关于javascript:es6杂记

42次阅读

共计 1140 个字符,预计需要花费 3 分钟才能阅读完成。

1、
let命令所在的代码块内无效。

如果区块中存在 letconst命令,这个区块对这些命令申明的变量,从一开始就造成了关闭作用域。但凡在申明之前就应用这些变量,就会报错。

var tmp = 123;

if (true) {tmp = 'abc'; // ReferenceError  let tmp;}

在代码块内,应用 let 命令申明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
第一种场景,内层变量可能会笼罩外层变量。
第二种场景,用来计数的循环变量泄露为全局变量
块级作用域的呈现,实际上使得取得广泛应用的匿名立刻执行函数表达式(匿名 IIFE)不再必要了。
顶层对象,在浏览器环境指的是 window 对象,在 Node 指的是 global 对象。ES5 之中,顶层对象的属性与全局变量是等价的。
ES6 规定,let命令、const命令、class命令申明的全局变量,不属于顶层对象的属性。
2、解构赋值

let [a, b, c] = [1, 2, 3];
let [head, ...tail] = [1, 2, 3, 4];
head // 1 tail // [2, 3, 4]

默认值

let [x = 1] = [undefined];
x // 1 
let [x = 1] = [null];
x // null

ES6 外部应用严格相等运算符(===),判断一个地位是否有值。所以,只有当一个数组成员严格等于 undefined,默认值才会失效。如果一个数组成员是null,默认值就不会失效,因为null 不严格等于undefined

对象的解构赋值

let {bar, foo} = {foo: 'aaa', bar: 'bbb'};
foo // "aaa" bar // "bbb" 
let {baz} = {foo: 'aaa', bar: 'bbb'};
baz // undefined

3、
ES6 为字符串增加了遍历器接口,使得字符串能够被 for...of 循环遍历。这个遍历器最大的长处是能够辨认大于 0xFFFF 的码点,传统的 for 循环无奈辨认这样的码点。
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它能够当作一般字符串应用,也能够用来定义多行字符串,或者在字符串中嵌入变量。

`${x} + ${y} = ${x + y}`

箭头函数有几个应用留神点。

(1)函数体内的 this 对象,就是定义时所在的对象,而不是应用时所在的对象。

(2)不能够当作构造函数,也就是说,不能够应用 new 命令,否则会抛出一个谬误。

(3)不能够应用 arguments 对象,该对象在函数体内不存在。如果要用,能够用 rest 参数代替。

(4)不能够应用 yield 命令,因而箭头函数不能用作 Generator 函数。

正文完
 0