es6

ES5 ES6

2009年12月,ECMAScript 5.0版正式发布
2011年6月,ECMAscript 5.1版发布
2015年6月,ECMAScript 6正式发布,并且更名为“ECMAScript 2015”。
2016年6月,ECMAScript6.1发布, 与ECMAScript6差异较小

ES5

ES5的严格模式:
所谓严格模式,从字面上就很好理解,即更严格的模式 在这种模式下执行,浏览器会对JS的要求更苛刻,语法格式要求更细致,更符合逻辑。
怪异模式:就是我们之前一直使用的开发模式,就叫怪异模式。因为很多时候出来的结果是非常怪异的,所以才称之为怪异模式。

Javascript 为什么要设立严格模式:
1.消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
2.代码运行的一些不安全之处,保证代码运行的安全;
3.提高编译器效率,增加运行速度;
严格模式增加哪些?
1. 不可以省略var声明变量
2. 禁止函数使用this关键字指向全局变量
3. 禁止函数使用八进制方法
4. 不允许在非函数的代码块内声明函数 if (true) function fn() { } , if没有大括号就报错
5. 严格模式下, arguments变量, 形参是不会变(不同步)
6. eval作用域 var x = 20 eval(“ 'use strict'; var x = 10 ”); console.log(x) //20
7. delete 变量 报错, 严格模式必须写在第一行代码

"use strict";//全局严格
myname = "周杰伦";
console.log(myname);
"use strict";//全局严格

function fn2() {
        console.log(this); //默认指向window
      }
fn2()

"use strict";//全局严格
var n = 023;
console.log(n);

"use strict";//全局严格
if (true) {
   function fn4() {
        console.log("44444");
    }
}
fn4();

"use strict";//全局严格
function fn5(num) {
       // console.log(arguments); //[20]
       // arguments[0]=30;
      // console.log(num);  // 20
       num = 40;
    console.log(arguments);
}
fn5(20);

'use strict';
var age = 20;
  console.log(window);
  console.log(window.age);
  delete (window.age);
  console.log(window);

eval作用 把字符串当做js代码被解析
        eval +  use strict ,eval函数作用域
        作用域
        1.全局   2.局部     3.eval +  use strict ,形参eval函数作用域
var x = 20;
eval(" 'use strict'; var x=30; console.log(x) ");//30
console.log(x)// 20

btn.onclick = function () {
            eval(txt.value); 不安全
            还能把json 转换成对象或数组
            var str = '{"name":"刘德华"}';
             console.log(JSON.parse(str));
            var o = eval("[" + str + "]");
            console.log(o[0]);
把json转换成对象或数组    1. JSON.parse  2. eval() 执行数组
        }

forEach、map以及reduce的不同点:
forEach 方法是将数组中的每一个值取出做一些程序员想让他们做的事情
map 方法是将数组中的每一个值放入一个方法中做一些程序员想让他们做的事情后可以返回一个新的数组
reduce 方法 将数组中的每一个值与前面的值处理后得到的最终值

//对象
        var obj = {
            name: "刘德华"
        }
        //变量
        var name = "周杰伦"; // window.name

        function fn(str) {
            //this window   window.name
            console.log(this.name);
            console.log(str);
        }
        // fn();
        fn.bind(obj, "你好")("他好")
        bind 改变this指向,它不会立即执行,需要函数执行,它才会生效

简单总结 与this相关的?
1. 函数内部的this,默认指向window
2. 在严格模式下,函数内部的this指向undefined
3. 事件绑定函数,内部的this指向当前绑定的元素
4. 对象内,方法里的this指向当前的对象
5. ES5的bind函数,改变this指向

异常捕获,非常大的性能影响,
        网络连接的地方一定要try..
         try {
             aaaaa
         } catch (err) {
             //try 里面报错了,我就被执行
             console.log(err);
         }finally{
             //始终会被执行
             console.log("始终会被执行");
         }
         try {
             aaaaaaa;
         } catch (error) {
             console.log(error);
         }
         console.log("我..还曾经的那个少年..没有一丝丝改变");

let
let 是ES6中新增关键字。它的作用类似于var,用来声明变量,但是所声明的变量,只在let命令所在的代码块内有效。
块级作用域
ES6之后加入块级作用域,一个大括号{}我们称之为一个代码块,一个大括号{}的内部就是块级作用域
利用块级作用域可以有效解决以下问题
1.防止全局变量泄露
2.防止变量提升带来的覆盖问题
const 声明的是常量,一旦声明,值将是不可变的,声明变量赋予初始值,它的类型是值类型,就不能修改,可以修改数组的值,如果是引用类型,可以修改它值,不能修改类型
,它的其他特性与let一样

1.如果是代码块内声明,只能在块里使用
2.先定义,后使用 (避免变量提升问题)
3.let 声明的变量,只能被声明一次

let oBtns = document.querySelectorAll("button");
        //方式1
        for (var i = 0; i < oBtns.length; i++) {
            //在遍历(循环)的过程中,给每一个按钮设置一个属性,并且给i的值
            oBtns[i].tempIndex = i;
            oBtns[i].onclick = function () {
                // console.log(i);
                console.log(this.tempIndex);
            }
        }
        //方式2
        for (let i = 0; i < oBtns.length; i++) {
            //在遍历(循环)的过程中,给每一个按钮设置一个属性,并且给i的值
            oBtns[i].onclick = function () {
                console.log(i);
            }
        }
        //方式3
        oBtns.forEach(function (item, index) {
            item.onclick = function () {
                console.log(index);
            }
        })

字符串

       includes 是否包含指定的字符串
        var str = "abc123";
        console.log(str.includes("ac"));
        console.log(str.indexOf("c") != -1);

        startsWith 是否在开始位置
        var str = "abc123";
        console.log(str.startsWith("a")); //true

        endsWith 是否在结束位置
        var str = "abc123";
        console.log(str.endsWith("3"));//true

        repeat 让字符串重复n次
        var str = "我爱你!";
        console.log(str.repeat(100));

        填充
        var str = "我爱你";
        console.log(str.padStart(10, "."));
        console.log(str.padEnd(10, "."));

        字符串模板
        var str = "不好";
        let str1 = `今天天气真的${str}`;
        console.log(str1);

数组

        Array.from()把伪数组转换成真数组
        var oBtns = document.getElementsByTagName("button");
        遍历获取下标
        Array.from(oBtns).forEach(function (item, index) {
            item.onclick = function () {
                console.log(index);
            }
        })

        Array.of() 将一组值,变成数组
        var arr = Array.of(1, 3, 4, 5, 7);
        console.log(arr);

        find
        var arr = [
            {
                name: "刘德华",
                age: 19
            }, {
                name: "周杰伦",
                age: 19
            }, {
                name: "蔡依林",
                age: 19
            }, {
                name: "马季",
                age: 19
            }];

        var name = "周杰伦"
        var obj = arr.find(function (item, index) {
            return item.name == name;
        })
        console.log(obj);
        
        findIndex 找到了返回下标
        var name = "周杰伦" //找到周杰伦,删除周杰伦
        var index = arr.findIndex(function (item) {
            return item.name == name
        })
        console.log(index);
        arr.splice(index, 1)
        console.log(arr);

for-of 遍历集合:
这是目前遍历数组最简洁和直接的语法;
它避免了for-in的所有缺陷;
与forEach()不一样,它支持break,continue和return

函数

函数的默认参数
         function fn1(n = 10) {
             console.log(n);
         }
         fn1(40);

         function fn(n) {
             if (n == undefined) {
                 n = 10;
             }
             console.log(n);//10
         }
         fn(50)
        2.箭头函数 拉姆达(Lambda )表达式
          函数的语法糖 
        场景1---
        var fn = function (n) {
            return n * 10;
        }
        console.log(fn(5));
        箭头函数
        var fn = (n) => { return n * 10 };
        var fn = n => { return n * 10 }; //由于只有一个参数,可以省略参数的()
        var fn = n => n * 10;            //由于函数体只有一个句代码,可以省略 {}

        场景2---
        var fn = function (n, m) {
            return n + m;
        }
        箭头函数
        const fn = (n, m) => n + m; //多个参数,不能省略()

        场景3---
        const fn = function (name) {
            return { name: name }
        }
        console.log(fn("刘德华"));
        箭头函数
        const fn = name => { return { name: name } }
        console.log(fn("周杰伦"));
        箭头函数
        const fn = name => ({ name: name }) //返回的是一个对象,用()包裹起对象 看做整体
        console.log(fn("周杰伦"));

       var arr = [3, 5, 7, 2, 67, 8];
       arr.sort(function (n, m) {
           return n - m;
         })
         console.log(arr);

        arr.sort((n, m) => m - n);
        console.log(arr);

        let fn = n => m => n * m;
        let fn = function (n) {
            return function (m) {
                return n * m
            }
        };

箭头函数的this,指向所在的运行环境(上下文对象)
            var obj = {
            fn1: function () {
                console.log(this); //obj

                let ff = () => {
                    console.log(this); //obj
                }
                ff();
            },

            fn2: () => {
                console.log(this) //window

                let ff = () => {
                    console.log(this); //window
                }
                ff();
            }
        }
         obj.fn1()
        obj.fn2()

对象

     属性的简写:
      var foo = 'bar';
      var baz = {foo};    // 等同于 var baz = {foo: 'bar'};
    方法的简写:
      var o = {
            method() {   
                 return "Hello!";
            }
      };
    属性名表达式:
      let obj = {};
      obj['a'+'bc'] = 123;
      console.log(obj);
     方法名表达式:
      let obj = {
            ['h'+'ello']() {
                return 'hi';
            }
      }; 

    
 obj["abc"] = 10;
        Object.is( , )
         1 == 1
         -0 == +0
        console.log(Object.is(-0, 0)); //false
        重点
        console.log(Object.is(NaN, NaN)); //true
       其他情况 和 == 是一样的

        1.合并对象
        2.拷贝对象  浅拷贝
        Object.assign()
        var o1 = { name: '刘德华', sex: "男" };
        var o2 = { age: 60, name: "蔡依林" };
        var o = {};
        Object.assign(o, o1, o2);
        console.log(o);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 函数 JS函数的概念 函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体正如函数的概念, 我们可以根据...
    sskingfly阅读 387评论 0 0
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 3,981评论 12 65
  • 你不懂JS:入门与进阶 第二章:进入JavaScript 在前一章中,我介绍了编程的基本构建块儿,比如变量,循环,...
    寒彧儿阅读 320评论 0 0
  • 闭包 变量作用域 变量根据作用域不同可以将函数分为全局变量和局部变量 函数内部可以使用全局变量 函数外部不可以使用...
    alfalfaw阅读 208评论 0 0
  • 文章内容输出来源:拉勾教育大前端高薪训练营文章说明:文章内容为学习笔记,学徒之心,仅为分享; 如若有误,请在评论区...
    树懒的梦想阅读 203评论 0 0