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 The Definitive Guide for JavaScript Developers 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
翻译来源:本书原作者 Zakas 长期供职于雅虎,是著名的 JS 库 YUI 的主要作者,有着非常丰富的一线 工作经验。他同时也是一个成功的作者,其最重要的著作《 JavaScript 高级编程》基本上是 JS 领域的必读之作,而他...
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 PDF 中文版带书签目录
Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
本书《Understanding ECMAScript 6 The Definitive Guide for JavaScript Developers》由资深前端开发者Nicholas C. Zakas撰写,旨在为JavaScript开发者提供一份完整而权威的ES6指南。 在ES6中,引入了诸多与编程...
综上所述,《Understanding ECMAScript 6》是一本详尽介绍了 ES6 新特性的书籍,对于想要深入理解 ES6 的开发者来说是非常有价值的参考资料。这本书不仅覆盖了 ES6 的所有主要特性,还提供了一些实用的例子和深入的...
**ECMAScript 6(简称ES6)是JavaScript语言的一个重大升级版本,它引入了许多新的特性和改进,为开发者提供了更强大的工具和更简洁的语法。阮一峰先生的《ECMAScript 6 入门》是一本深入浅出介绍这一版本的权威指南...
原书《Understanding ECMAScript 6》,作者 Nicholas C. Zakas ,此书为开源书籍,可访问它的 github 仓库。本书原作者 Zakas 长期供职于雅虎,是著名的 JS 库 YUI 的主要作者,有着非常丰富的一线工作经验。他同时...
**ECMAScript 6(简称ES6)是JavaScript语言的一个重大升级版本,它引入了许多新的特性和改进,为开发者提供了更强大的工具和更简洁的语法。阮一峰老师的《ES6标准入门》第三版是一本深入讲解这些新特性的权威著作,...
阮一峰老师著作,最新版epub格式电子书,在线地址:http://es6.ruanyifeng.com/,请支持纸质正版
1. ECMAScript 6(ES6)的重要性:随着技术的演进,JavaScript从一个不被重视的脚本语言,转变成了一个重要的编程语言。ES6的发布对JavaScript语言产生了深远的影响,它引入了大量新特性,极大地提高了语言的表达...
《ECMAScript 6入门》是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性。 本书力争覆盖ES6与ES5的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。 本书为中级...
**ECMAScript 6 入门(第三版)** ECMAScript 6,通常被称为ES6,是JavaScript语言的一个重大更新,它引入了一系列新的特性和语法改进,旨在提高开发效率和代码可读性。这本书“ECMAScript 6 入门(第三版)”为...
ECMAScript 6(ES6),是JavaScript语言的下一代标准,于2015年6月正式发布。它由ECMA国际标准化组织制定,旨在让JavaScript能够编写大型的复杂应用程序,成为企业级开发语言。ES6的制定者计划每年发布一次标准,...
ECMAScript 6,也被简称为ES6,是JavaScript语言的下一代标准,它的发布目的是为了让JavaScript语言能够用于编写更复杂的大型应用程序,进而成为企业级开发语言。ES6在2015年6月正式发布,并且按照计划,标准制定者...
根据提供的文件信息,本文将基于《Understanding ECMAScript 6》中文版的内容概要来探讨ECMAScript 2015(简称ES6)的重要知识点。ECMAScript 2015是JavaScript的一个重大更新版本,引入了许多新的特性和语法改进,...