1. 数值扩展
Number.EPSILON | 是js 最小精度 |
Number.isFinite | 检测一个数值是否为有限数 |
Number.isNaN | 检测一个数组是否为NaN |
Number.parseInt与Number.parseFloat | 字符串转整数 |
Number.isInteger | 判断一个数是否为整数 |
Math.trunc | 将数字的小数部分抹掉 |
Math.sign | 判断一个数到底为正数(1) 负数(-1) 0(0) -0(-0) 其他值,如字符串(NaN) |
console.log(0.1 + 0.2 === 0.3) // false
function equal (a, b) {
return Math.abs(a-b) < Number.EPSILON
}
let isEqual = equal(0.1+0.2, 0.3)
console.log(isEqual) // true
1.1 二进制和八进制
ES6 提供了二进制和八进制数值的新写法,分别用前缀0b(0B)和0o(0O)表示。从ES5开始,严格模式下,八进制就不再允许使用前缀0(零)表示,ES6进一步明确使用前缀0o表示。如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b111') // 7
Number('0o10') // 8
2. 对象方法的扩展
2.1 Object.is 判断两个值是否完全相等
功能上相等于===的比较,但除了NaN与NaN的比较。
console.log(Object.is(120, 120)) // true
console.log(Object.is(0.1+0.2, 0.3)) // false
// 功能相等于=== 但除了NaN之间的比较
console.log(Object.is(NaN, NaN)) // true
console.log(NaN === NaN) // false
2.2 Object.assign 对象的合并
在对象合并时,如果在两个对象中出现相同的属性名,则后面的值会覆盖前面的值,不重复的部分进行合并处理。
const config1 = {
host: 'localhost',
port: 3306,
name: 'root',
pass: 'root',
xxxx: 'xxxx'
}
const config2 = {
host: 'http://baidu.com',
port: 33060,
name: 'baidu.com',
pass: 'baidu',
test: 'test'
}
let test = Object.assign(config1, config2)
console.log(test)
2.3 Object.setPrototypeOf 设置原型对象 Object.getPrototypeOf
在Object.setPrototypeOf(A, B)中,为A的原型中添加B。当获取原型对象时,是该对象下的一级原型。
const school = {
name: '北大大'
}
const cities = {
area: ['东', '西', '南', '北']
}
Object.setPrototypeOf(school, cities)
let xx = Object.getPrototypeOf(school)
console.log(school, xx)