数值扩展
0.Number.EPSILON 是 JavaScript 表示的最小精度
EPSILON 属性的值接近于 2.2204460492603130808472633361816E-16
function equal(a,b){
if(Math.abs(a-b)< Number.EPSILON){
return true;
}else{
return false;
}
}
console.log(0.1 + 0.2 === 0.3);
console.log(equal(0.1 + 0.2,0.3));
使用console.log(0.1 + 0.2 === 0.3) 得出的结果为false ,所以我需要使用console.log(equal(0.1 + 0.2,0.3)) 才能得到 true。
1.二进制和八进制
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b
(或0B
)和0o
(或0O
)表示。
//二进制
let b = 0b1010;
console.log(b);
//八进制
let o = 0o777;
console.log(o);
//十六进制
let x = 0xff;
console.log(x);
2. Number.isFinite 检测一个数值是否为有限数, 即不是 Infinity
console.log(Number.isFinite(100));
console.log(Number.isFinite(100/0));
console.log(Number.isFinite(Infinity));
注意,如果参数类型不是数值,Number.isFinite
一律返回false
。
3.Number.isNaN 检测一个数值是否为 NaN
console.log(Number.isNaN(123));
4. Number.parseInt Number.parseFloat 字符串装整数
console.log(Number.parseInt('999999999九九'));
console.log(Number.parseInt('88888888发发'));
5. Number.isInteger 判断一个数是否为整数
console.log(Number.isInteger(5));
console.log(Number.isInteger(2.5));
6. Math.trunc 将数字的小数部分抹掉
console.log(Math.trunc(5.2));
console.log(Math.trunc(9.9));
-
Math.sign 判断一个数到底为整数 负数 还是零
console.log(Math.sign(99)); console.log(Math.sign(0)); console.log(Math.sign(-99));
1 表示整数 , -1 表示负数
对象方法扩展
1.Object.is 判断两个值是否完全相等
console.log(Object.is(999,888)) //跟 === 类似
console.log(Object.is(999,999))
console.log(Object.is(NaN,NaN));
console.log(NaN === NaN);
Object.is 与 === 类似,但是Object.is(NaN,NaN),得到的答案是true,NaN === NaN ,得到的答案则是 false
2.Object.assign 对象的合并
Object.assign() 用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
const config1 = {
host:'localhost',
port:3306,
name:'root',
pass:'root',
test:'test'
};
const config2 = {
host:'https://123.com',
port:3306,
name:'123.com',
pass:'999'
}
console.log(Object.assign(config1,config2));
Object.assign() 方法的第一个参数是目标对象,后面的参数都是源对象。
注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
1)如果只有一个参数,Object.assign()会直接返回该参数。
const obj = {a:9};
console.log(Object.assign(obj) === obj)
2)如果该参数不是对象,则会先转成对象,然后返回。
console.log(typeof Object.assign(2));
3)由于undefined和null无法转成对象,所以如果它们作为参数,就会报错。
Object.assign(undefined)
Object.assign(null)
4) 如果非对象参数出现在源对象的位置(即非首参数),那么处理规则有所不同。首先,这些参数都会转成对象,如果无法转成对象,就会跳过。这意味着,如果undefined和null不在首参数,就不会报错。
let obj = {a: 9};
console.log(Object.assign(obj, undefined) === obj);
console.log(Object.assign(obj, null) === obj);
3. Object.setPrototypeOf 设置原型对象 Object.getPrototypeOf
Object.setPrototypeOf 方法用来设置一个对象的原型对象(prototype),返回参数对象本身。
const books = {
name:'名著'
}
const leibie = {
bookName:['西游记','红楼梦','水浒传']
}
Object.setPrototypeOf(books,leibie);
console.log(books);
Object.getPrototypeOf 方法与 Object.setPrototypeOf 方法配套,用于读取一个对象的原型对象。
const books = {
name:'名著'
}
const leibie = {
bookName:['西游记','红楼梦','水浒传']
}
Object.setPrototypeOf(books,leibie);
console.log(Object.getPrototypeOf(books));
Object.values 和 Object.entries
Object.values() 方法返回一个给定对象的所有可枚举属性值的数组
Object.entries() 方法返回一个给定对象自身可遍历属性 [key,value] 的数组
//声明对象
const school = {
name:'js123',
cities:['广州','深圳','上海'],
xueke:['前端','Java','大数据','测试']
}
//获取对象所有的键
console.log(Object.keys(school));
//获取对象所有的值
console.log(Object.values(school));
//entries
//获取对象所有的键
console.log(Object.entries(school));
Object.getOwnPropertyDescriptors
该方法返回指定对象所有自身属性的描述对象
//对象属性的描述对象
console.log(Object.getOwnPropertyDescriptors(school));