公司有用到es6的语法糖,对简化代码和阅读性有很大的提高
let
let 关键字声明的变量是属于块作用域,也就是包含在 {} 之内的作用于。
可以用来避免异步回掉,或者闭包。
const
const 关键字一般用于常量声明,用 const 关键字声明的常量需要在声明时进行初始化并且不可以再进行修改,并且 const 关键字声明的常量被限制于块级作用域中进行访问。
注意,对于对象和数组来说,const的不可变,指的是指向对应值的指向不可变性,而不是指不可变。上代码。
const numbers = [1, 2, 3, 4, 6]
// undefined
numbers[4] = 5
// 5
numbers
//(5) [1, 2, 3, 4, 5]
numbers = [1, 2, 3, 4, 6]
// VM141:1 Uncaught SyntaxError: Identifier 'numbers' has already been declared
// at <anonymous>:1:1
连续赋值
JavaScript是支持连续赋值的
var a = {n:1};
var b = a; // 持有a,以回查
a.x = a = {n:2};
alert(a.x);// --> undefined
alert(b.x);// --> [object Object]
// undefined
a
// {n: 2}
b.x
// {n: 2}
a.x
// undefined
b
// {n: 1, x: {…}}
// n: 1
// x: {n: 2}
// __proto__: Object
实际上在连续赋值中,值是直接赋予给变量指向的内存地址。
a.x先存取指向{n:2}
的地址,然后a再指向同一个地址,内容覆盖点了x,因此a.x undefined。
而b一开始就指向a,b.x也就指向a.x的原地址。下面代码就很容易理解了。
b.x.n
// 2
b.x.n = 3
// 3
a
// {n: 3}
Deconstruction: 解构赋值
解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。超级简洁舒服,而且便于阅读。
// Array
var [first, second, third] = someArray;
var [a, , b] = [1, 2, 3];
var [a, ...b] = [1, 2, 3]; // ...不定参数,数组同理
a
// 1
b
// (2) [2, 3]
var {...all} = b
// undefined
all
// {bb: 123, cc: 213}
// Object
var { prop, prop2} = {prop: 5, prop2: 10};
var a, b;
({ a, b } = {a: 1, b: 2}); //注意括号
b = { bb: 123,cc:213 }
var {bb,cc} = b // 数组同理
Spread Operator
和解构有点相反
let cold = ['autumn', 'winter'];
let warm = ['spring', 'summer'];
// construct an array
[...cold, ...warm] // => ['autumn', 'winter', 'spring', 'summer']
That's all. Thx 4 watching.
网友评论