《深入理解ES6》阅读随笔
ES6 中一些其他小变化
Number 新方法
整数识别
Number.isInteger 方法接收一个参数,返回一个布尔值为结果,如果参数是整数类型,返回 true,否则返回 false。
console.log(Number.isInteger(10)) // true
console.log(Number.isInteger('10')) // false
console.log(Number.isInteger(10.0)) // true
console.log(Number.isInteger(10.1)) // false
安全数值
JavaScript 中的整数有个安全范围:负 2 的 53 次方到正 2 的 53 次方。如果超过此范围,就会出现计算混乱的情况:
let integer1 = 10;
console.log(integer1) // 10
integer1 = Math.pow(2, 53)
console.log(integer1) // 9007199254740992
integer1++
console.log(integer1) // 9007199254740992 很明显,此处是不对的
因此在可能会超过该安全范围时,最好先预先判断一下数值类型,ES6 提供了新的方法 Number.isSafeInteger 可用于判断整数是否安全,而默认的安全范围也可以通过 Number.MAX_SAFE_INTEGER 来获取到:
let integer1 = Number.MAX_SAFE_INTEGER
console.log(integer1) // 9007199254740991
console.log(Number.isSafeInteger(integer1)) // true
integer1++
console.log(Number.isSafeInteger(integer1)) // false
一些新增的 Math 方法
ES6 新增的定型数组极大的增强 JavaScript 的游戏和图形能力,除此之外,ES6 还新增了一些常用的数学运算方法,以提高密集型应用的执行效率(具体哪些方法此处不再赘述)。
Unicode 标记符
// ES5
const \u0061 = 'test1'
console.log("\u0061")
console.log(\u0061)
// ES6
const \u{62} = 'test2'
console.log("\u{62}")
console.log(\u{62})
__proto__
虽然 ES6 中,现在正式支持了 __proto__ ,但是其目的是为了与已存在的广泛使用 __proto__ 的库作兼容,ES 官方是推荐避免使用 __proto__ 的,其希望开发者可以通过 Object.setPrototypeOf() 和 Object.getPrototypeOf() 的方式对 __proto__ 进行升级替换。
ES2016 展望
ES6 用了 4 年时间整理归纳才发布,相较于 ES5 有了大量的新特性,但是发布周期太长,因此 ES 标准委员会决定缩短它发布的时间,改为以后每年一版,并以年份命名版本,ES6 是 2015 年发布,因此自动获取名 ES2015,而接下来将要发布的将是 ES2016 也就是 ES7(在笔者归纳笔记时早已发布)。因为时间周期更短,因此更新的特性就会少一些,ES2016 将会更新下面一些特性:
幂运算符号
** 运算符的功能与原来 ES5 中的 Math.pow 一致,都用于幂计算。
console.log(5 ** 2) // 25
console.log(Math.pow(5, 2)) // 25
Array.Prototype.includes
用于查找数组中是否包含某项元素,接收两个参数,一个参数是即将搜索元素,第二参数可选,为起始搜索位置:
const aa = [1, 2, 3, NaN, +0]
console.log(aa.includes(2)) // true
console.log(aa.includes(2, 2)) // false,从索引 2 开始往后搜索,因为没有找到
console.log(aa.includes(NaN)) // true
console.log(aa.includes(-0)) // 此处搜索存在问题,-0 和 +0 认为相同
错误校验
在严格模式下,在传参时默认赋值和解构传参均会报异常:
const sayHello1 = (name) => {
'use strict'
console.log('My name is ' + name)
}
// 在声明时就会报异常
const sayHello2 = (name = 'Jack') => {
'use strict'
console.log('My name is ' + name)
}
// 在声明时就会报异常
const sayHello3 = ({ name }) => {
'use strict'
console.log('My name is ' + name)
}
sayHello1('Tom') // My name is Tom
sayHello2()
sayHello3({ name: 'Tom' })
网友评论