一、let和const命令
1.特点:
- 块级作用域,防止污染全局变量
- 没有变量提升,防止意外错误
- 不可重复声明变量
- 不可在声明前使用该变量
2.注意:
- const本质是保证变量指向的内存地址不得改变,所以对于对象,对象的属性依旧可以更改
- let、const声明的变量,不再默认是全局对象的属性
3.示例:
- for循环中的i用let声明
- 经典闭包问题解决
二、变量的解构赋值
1.语法:
(1)数组的解构赋值
1 | let [foo, [[bar], baz]] = [1, [[2], 3]]; |
(2)默认值:
1 | let [foo = true] = []; |
(3)对象的解构赋值
1 | let { bar, foo } = { foo: "aaa", bar: "bbb" }; |
(4)字符串的解构赋值
1 | const [a, b, c, d, e] = 'hello'; |
(5)函数参数的解构赋值
1 | function move({x = 0, y = 0} = {}) { |
2.注意:
- 只有变量对应的值显示设置为undefined,默认值才会生效,如果为null,则不生效
- 对象的解构赋值,变量必须与属性同名,才能取到正确的值
3.示例:
(1)数组解构
1 | [[1, 2], [3, 4]].map(([a, b]) => a + b); |
(2)交换变量的值
1 | let x = 1; |
(3)从函数返回多个值
1 | function example() { |
(4)提取JSON数据
1 | let jsonData = { |
三、字符串的扩展
1.新增方法:
(1)includes:返回布尔值,表示是否找到了参数字符串
(2)startsWith:返回布尔值,表示参数字符串是否在原字符串的头部
(3)endsWith:返回布尔值,表示参数字符串是否在原字符串的尾部
1 | let s = 'Hello world!'; |
(4)repeat:返回一个新字符串,表示将原字符串重复n次
1 | 'x'.repeat(3) // "xxx" |
(5)padStart:头部补全
(6)padEnd:尾部补全
1 | //为数值不全指定位数 |
2.注意
- includes、startsWith、endWith这三个方法都支持第二个参数,表示开始搜索的位置
- 使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束
四、数值的扩展
1.新增方法:
(1)ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示
(2)Number.isFinite:用来检查一个数值是否为有限的
(3)Number.isNaN:用来检查一个值是否为NaN
1 | isFinite(25) // true |
(4)Number.parseInt:与原方法同
(5)Number.parseFloat:与原方法同
(6)Number.isInteger:判断一个数值是否为整数
(7)Math.trunc:用于去除一个数的小数部分,返回整数部分
(8)Math.sign:用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
(9)新增了一个指数运算符(**)
1 | let a = 1.5; |
2.注意:
- Number.isFinite、Number.isNaN与传统方法区别:传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false