ES6 学习笔记
整理于 阮一峰 ECMAScript 6 入门
1.let命令:用来声明变量。类似于var。但是所声明的变量只在let所在的代码块(带大括号的基本上都是代码块)内有效
适合场景:1.局部变量,2.for循环的计数器
跟var不同之处:解决var的变量提升BUG(即没有用var定义的变量 使用的话会是undefined,而不会报错)
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError 报错 即使有一个全局变量tmp,但是下面有let定义tmp 就会形成一个对于tmp的暂时性死区(外界对于tmp的影响减为0) let tmp; }
2.const命令:声明一个只读的常量,一旦声明,常量的值就不能改变(改变的话会报错,,如果只声明 不赋值的话,也会报错,因为需要一旦声明,就要立即初始化)
有效性:只在声明所在的块级作用域内有效。(跟let一样,也只能在声明之后使用,否则报错,也存在暂时性死区)
特点:声明一个不是变化的值,本质是变量指向的那个内存地址所保存的数据不得改动
3.解构赋值(等号两边类型一致,否则报错):即按照一定模式,从数组和对象中提取值,对变量进行赋值,如果解构不成功的话,变量的值就等于undefined(变量没值的时候)
解构赋值允许指定默认值。
用途:
1.交换变量的值
2.函数返回多个值的时候
3.函数参数的定义的时候
4.提取JSON数据的时候
5.函数参数的默认值:避免在函数体内部写一些 类似 var foo = config.foo || 'default foo' 设置默认值的语句
4.字符串的扩展
1.允许采用“\u****”形式标识一个字符,可以将码点放入到大括号中,就可以规避一些问题
"\u{20BB7}"
// "𠮷"
"\u{41}\u{42}\u{43}"
// "ABC"
let hello = 123;
hell\u{6F} // 123
'\u{1F680}' === '\uD83D\uDE80'
// true
2.新增string.codePointAt() 能够返回对应的unicode码值,用于处理原先的charCodeAt可能会出现的问题
let s = '𠮷a'; s.codePointAt(0).toString(16) // "20bb7" s.codePointAt(2).toString(16) // "61" 这个是一个bug 需要记住
3.新增 String.fromCodePoint() 用于码点--对应字符的转换。用于处理原先String.fromCharCode可能会出现的问题
String.fromCodePoint(0x20BB7) // "𠮷" String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' // true
注意:fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。
4.字符串的遍历(for...of...)
5.数值的扩展
1.二进制和八进制表示法
二进制:0b开头 八进制:0o开头
2.Number.isFinite()和Number.isNaN()
Number.isFinite():用来检查一个数值是否为有限的,false表示Infinity
注意:如果参数类型不是数值的话,一律返回false
Number.isNaN():用来检查一个值是否为NaN,非NaN一律返回false
3.Number.parseInt(), Number.parseFloat()
区别:ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变
4.Math 对象的扩展
1.Math.trunc():用于去除一个数的小数部分,返回整数部分,,对于非数值,内部使用Number方法将其先转化为数值,,对于空值和无法截取整数的值,返回NaN
2.Math.sign()方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值。
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
3.Math.cbrt()方法用于计算一个数的立方根。
5.指数运算符
let a = 1.5; a **= 2; // 等同于 a = a * a; let b = 4; b **= 3; // 等同于 b = b * b * b;
浙公网安备 33010602011771号