`

Understanding ECMAScript 6笔记(1)

 
阅读更多

1.var与let的区别(scope区别)

(1)块级别的声明

    传统的var声明在代码函数块中,实质是全局的变量,而用ES6的let声明则是真正区域在块中

 

function getValue(condition) {
    if (condition) {
        var value = "blue";
        // other code
        return value;
    } else {
        // value exists here with a value of undefined
        return null;
    }
    // value exists here with a value of undefined
}

等价于

function getValue(condition) {
    var value;
    if (condition) {
        value = "blue";
        // other code
        return value;
    } else {
        return null;
    }
}
真正的块区域为
function getValue(condition) {
    if (condition) {
        let value = "blue";
        // other code
        return value;
    } else {
        return null;
    }
}

 (2)const 变量,可赋值原始类型和引用类型,赋值原始类型不可再赋值,赋值引用类型,引用类型属性可修改。const和let类型在赋值之前不可以访问,否则会抛出referenceError

(3)var,let 在循环块中的绑定

      var循环后仍然可以访问,而let是不可以的,var始终是一个,而let每次循环都有自己的一个copy,所以以前用var循环做不到的效果,现在用let可以解决了。比较下面的结果,看看其中的区别

var funcs = [];

for (var i = 0; i < 10; i++) {
    funcs.push(function() { console.log(i); });
}

funcs.forEach(function(func) {
    func();     // outputs the number "10" ten times
});


var funcs = [];

for (var i = 0; i < 10; i++) {
    funcs.push((function(value) {
        return function() {
            console.log(value);
        }
    }(i)));
}

funcs.forEach(function(func) {
    func();     // outputs 0, then 1, then 2, up to 9
});

var funcs = [];

for (let i = 0; i < 10; i++) {
    funcs.push(function() {
        console.log(i);
    });
}

funcs.forEach(function(func) {
    func();     // outputs 0, then 1, then 2, up to 9
})

var funcs = [],
    object = {
        a: true,
        b: true,
        c: true
    };

for (let key in object) {
    funcs.push(function() {
        console.log(key);
    });
}

funcs.forEach(function(func) {
    func();     // outputs "a", then "b", then "c"
});

 (3)在全局范围内,用var声明的变量,它是全局对象window的一个属性,如果window对象有相同的属性会被覆盖,而用let和const声明的变量,独立于window对象,单独存在。

// in a browser
var RegExp = "Hello!";
console.log(window.RegExp);     // "Hello!"

var ncz = "Hi!";
console.log(window.ncz);        // "Hi!"

// in a browser
let RegExp = "Hello!";
console.log(RegExp);                    // "Hello!"
console.log(window.RegExp === RegExp);  // false

const ncz = "Hi!";
console.log(ncz);                       // "Hi!"
console.log("ncz" in window);     

 2. String串和正则表达式表示的变化(增加了很多东东,更丰富了)

(1)更好地支持unicode,添加codePointAt(),正则表达式添加u标记。

(2)其他string变化,添加includes(),startsWith(), endsWith(),repeat()等方法,同时,支持更丰富。

(3)正则表达式增加y标记,确定lastindex后面的匹配方式。

3. Functions 的变化

(1)ECMAScript6增加了default参数的支持,default value 赋值不在argument数组中。

//ECMAScript5
function makeRequest(url, timeout, callback) {
    timeout = (typeof timeout !== "undefined") ? timeout : 2000;
    callback = (typeof callback !== "undefined") ? callback : function() {};
    // the rest of the function
}

//ECMAScript6
function makeRequest(url, timeout = 2000, callback = function() {}) {
    // the rest of the function
}

 (2)支持剩余参数(rest parameter)允许长度不确定的实参表示为一个数组。

function pick(object, ...keys) {
    let result = Object.create(null);
    for (let i = 0, len = keys.length; i < len; i++) {
        result[keys[i]] = object[keys[i]];
    }
    return result;
}

 (3)增加了function的构造函数功能

var add = new Function("first", "second", "return first + second");

console.log(add(1, 1));     // 2

 

var pickFirst = new Function("...args", "return args[0]");

console.log(pickFirst(1, 2));   // 1

 (4)Arrow function的引入(书写方式的变化)

var reflect = value => value;
// effectively equivalent to:
var reflect = function(value) {
    return value;
};


var sum = (num1, num2) => num1 + num2;
// effectively equivalent to:
var sum = function(num1, num2) {
    return num1 + num2;
};

var getName = () => "Nicholas";
// effectively equivalent to:
var getName = function() {
    return "Nicholas";
};

var sum = (num1, num2) => {
    return num1 + num2;
};
// effectively equivalent to:
var sum = function(num1, num2) {
    return num1 + num2;
};

var getTempItem = id => ({ id: id, name: "Temp" });
// effectively equivalent to:
var getTempItem = function(id) {
    return {
        id: id,
        name: "Temp"
    };
};

 (5)arraw function 的其他技巧

var PageHandler = {
    id: "123456",
    init: function() {
        document.addEventListener("click", function(event) {
            this.doSomething(event.type);     // error
        }, false);
    },
    doSomething: function(type) {
        console.log("Handling " + type  + " for " + this.id);
    }
};

var PageHandler = {
    id: "123456",
    init: function() {
        document.addEventListener("click", (function(event) {
            this.doSomething(event.type);     // no error
        }).bind(this), false);
    },
    doSomething: function(type) {
        console.log("Handling " + type  + " for " + this.id);
    }
};
var PageHandler = {
    id: "123456",
    init: function() {
        document.addEventListener("click",
                event => this.doSomething(event.type), false);
    },
    doSomething: function(type) {
        console.log("Handling " + type  + " for " + this.id);
    }
};
分享到:
评论

相关推荐

    Understanding ECMAScript 6 中文版

    Understanding ECMAScript 6 中文版

    Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers mobi

    Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    《Understanding ECMAScript 6》PDF翻译完整版//带目录

    翻译来源:本书原作者 Zakas 长期供职于雅虎,是著名的 JS 库 YUI 的主要作者,有着非常丰富的一线 工作经验。他同时也是一个成功的作者,其最重要的著作《 JavaScript 高级编程》基本上是 JS 领域的必读之作,而他...

    Understanding ECMAScript 6

    In Understanding ECMAScript 6, expert developer Nicholas C. Zakas provides a complete guide to the object types, syntax, and other exciting changes that ECMAScript 6 brings to JavaScript. Every ...

    《Understanding ECMAScript 6》 理解ES6

    《Understanding ECMAScript 6》理解ES6 PDF 中文版带书签目录

    Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers epub

    Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers pdf 0分

    本书《Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers》由资深前端开发者Nicholas C. Zakas撰写,旨在为JavaScript开发者提供一份完整而权威的ES6指南。 在ES6中,引入了诸多与编程...

    understanding ecmascript 6 中文版

    综上所述,《Understanding ECMAScript 6》是一本详尽介绍了 ES6 新特性的书籍,对于想要深入理解 ES6 的开发者来说是非常有价值的参考资料。这本书不仅覆盖了 ES6 的所有主要特性,还提供了一些实用的例子和深入的...

    《ECMAScript 6 入门-阮一峰》PDF完整版

    **ECMAScript 6(简称ES6)是JavaScript语言的一个重大升级版本,它引入了许多新的特性和改进,为开发者提供了更强大的工具和更简洁的语法。阮一峰先生的《ECMAScript 6 入门》是一本深入浅出介绍这一版本的权威指南...

    深入理解ECMAScript6(2017-09-01勘误版)

    原书《Understanding ECMAScript 6》,作者 Nicholas C. Zakas ,此书为开源书籍,可访问它的 github 仓库。本书原作者 Zakas 长期供职于雅虎,是著名的 JS 库 YUI 的主要作者,有着非常丰富的一线工作经验。他同时...

    ECMAScript 6 第三版

    **ECMAScript 6(简称ES6)是JavaScript语言的一个重大升级版本,它引入了许多新的特性和改进,为开发者提供了更强大的工具和更简洁的语法。阮一峰老师的《ES6标准入门》第三版是一本深入讲解这些新特性的权威著作,...

    ECMAScript 6 入门 (最新版)

    阮一峰老师著作,最新版epub格式电子书,在线地址:http://es6.ruanyifeng.com/,请支持纸质正版

    Learning ECMAScript 6 无水印pdf 0分

    1. ECMAScript 6(ES6)的重要性:随着技术的演进,JavaScript从一个不被重视的脚本语言,转变成了一个重要的编程语言。ES6的发布对JavaScript语言产生了深远的影响,它引入了大量新特性,极大地提高了语言的表达...

    ECMAScript6入门.zip

    《ECMAScript 6入门》是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性。 本书力争覆盖ES6与ES5的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。 本书为中级...

    ECMAScript 6 入门(第三版)

    **ECMAScript 6 入门(第三版)** ECMAScript 6,通常被称为ES6,是JavaScript语言的一个重大更新,它引入了一系列新的特性和语法改进,旨在提高开发效率和代码可读性。这本书“ECMAScript 6 入门(第三版)”为...

    ecmascript 6 入门.pdf

    ECMAScript 6(ES6),是JavaScript语言的下一代标准,于2015年6月正式发布。它由ECMA国际标准化组织制定,旨在让JavaScript能够编写大型的复杂应用程序,成为企业级开发语言。ES6的制定者计划每年发布一次标准,...

    ECMAScript 6入门.pdf

    ECMAScript 6,也被简称为ES6,是JavaScript语言的下一代标准,它的发布目的是为了让JavaScript语言能够用于编写更复杂的大型应用程序,进而成为企业级开发语言。ES6在2015年6月正式发布,并且按照计划,标准制定者...

    understanding-ecmascript-6-zh-ver.pdf

    根据提供的文件信息,本文将基于《Understanding ECMAScript 6》中文版的内容概要来探讨ECMAScript 2015(简称ES6)的重要知识点。ECMAScript 2015是JavaScript的一个重大更新版本,引入了许多新的特性和语法改进,...

Global site tag (gtag.js) - Google Analytics