简单记录
1、let命令
声明变量,只在代码块中有效
2、const
声明一个只读的常量,一旦声明,常量的值就不能改变。
注
:并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
所以变量的属性可以改变,比如:
1 2 3
| const obj = {"name","jike"}; obj.address = "北京";
|
3、一个将元素彻底冻结的函数
1 2 3 4 5 6 7 8
| var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if ( typeof obj[key] === 'object' ) { constantize( obj[key] ); } }); };
|
1) Object.freeze(obj)
阻止修改现有属性的特性和值,并阻止添加新属性。
2) Object.keys(obj)
返回对象的可枚举属性和方法的名称。
4、数组解构赋值-按照位置解构
1 2 3 4 5 6 7
| let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样。 let [a, b, c] = [1, 2, 3];
|
在这里没看懂的
事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。
1 2 3 4 5 6 7 8 9 10 11 12
| function* fibs() { let a = 0; let b = 1; while (true) { `yield a``; [a, b] = [b, a + b]; } } let [first, second, third, fourth, fifth, sixth] = fibs(); sixth // 5 上面代码中,fibs是一个 Generator 函数(参见《Generator 函数》一章) 原生具有 Iterator 接口。解构赋值会依次从这个接口获取值。
|
5、对象的解构赋值-按照属性名解构
或者-不同名的时候
1 2 3 4 5 6 7 8
| let obj = { first: 'hello', last: 'world' }; let { first: `f`, last: `l` } = obj; f l 如: let { foo: baz } = { foo: "aaa", bar: "bbb" }; baz foo
|
foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
注意,采用这种写法时,变量的声明和赋值是一体的。对于let和const来说,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。
6、字符串的扩展
不太懂的地方:
1 2 3 4 5 6
| var a = 5; var b = 10; tag`Hello ${ a + b } world ${ a * b }`; tag(['Hello ', ' world ', ''], 15, 50);
|
7、正则的扩展
1)
new RegExp(/abc/ig, ‘i’).flags —— i,覆盖前面的
2)
flags 属性
ES6 为正则表达式新增了flags属性,会返回正则表达式的修饰符。
1 2 3 4 5 6 7 8 9
| /abc/ig.source /abc/ig.flags
|