数值扩展
1、Number.EPSILON
是 JavaScript 表示的最小精度,一般用来处理浮点数运算。例如可以用于两个浮点数的比较。
let equal = (x, y) => Math.abs(x - y) < Number.EPSILON;
console.log(0.1 + 0.2 === 0.3); // false
console.log(equal(0.1 + 0.2, 0.3)); // true
2、二进制和八进制:二进制以 0b
开头,八进制以 0o
开头。
let b = 0b1010;
let o = 0o777;
let d = 100; // 十进制
let x = 0xff; // 十二进制
console.log(x);
3、Number.isFinite
检测一个数值是否为有限数。
console.log(Number.isFinite(100)); // false
console.log(Number.isFinite(100 / 0)); // true
console.log(Number.isFinite(Infinity)); // false
4、Number.parseInt 和 Number.parseFloat
ES6 给 Number
添加了 parseInt
方法,Number.parseInt
完全等同于 parseInt
。将字符串转为整数,或者进行进制转换。Number.parseFloat
则等同于 parseFloat()
console.log(Number.parseInt('5211314love')); // 5211314
console.log(Number.parseFloat('3.1415926神奇')); // 3.1415926
5、Number.isInteger()
判断一个数是否为整数。
console.log(Number.isInteger(5)); // true
console.log(Number.isInteger(2.5)); // false
6、Math.trunc()
将数字的小数部分抹掉。
console.log(Math.trunc(3.5)); // 3
7、Math.sign 判断一个数到底为正数 负数 还是零
对象方法扩展
ES6 新增了一些 Object
对象的方法。
- Object.is 比较两个值是否严格相等,与『===』行为 基本一致
Object.assign
对象的合并,将源对象的所有可枚举属性,复制到目标对象__proto__
、setPrototypeOf
、setPrototypeOf
可以直接设置对象的原型
1、Object.is()
Object.is()
方法判断两个值是否完全相同。Object.is
比较两个值是否严格相等,与 ===
行为 基本一致。返回一个 Boolean
类型。
Object.is(value1, value2);
Object.is()
方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:
- 都是
undefined
- 都是
null
- 都是
true
或false
- 都是相同长度的字符串且相同字符按相同顺序排列
- 都是相同对象(意味着每个对象有同一个引用)
- 都是数字且
- 都是
+0
- 都是
-0
- 都是
NaN
- 或都是非零而且非
NaN
且为同一个值
- 都是
与 ==
运算不同。 ==
运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换 (这种行为的结果会将 "" == false
判断为 true
),而 Object.is
不会强制转换两边的值。
与 ===
算也不相同。 === 运算符 (也包括 ==
运算符) 将数字 -0
和 +0
视为相等,而将 Number.NaN
与 NaN
视为不相等。
2、Object.assign
Object.assign
对象的合并,相当于浅拷贝。
const config1 = {
host: 'localhost',
port: 3306,
name: 'root',
pass: 'root',
test: 'test'
};
const config2 = {
host: 'http://atguigu.com',
port: 33060,
name: 'atguigu.com',
pass: 'iloveyou',
test2: 'test2'
}
console.log(Object.assign(config1, config2));
3、Object.setPrototypeOf 和 Object.getPrototypeof
Object.setPrototypeOf
用于设置对象的原型对象,Object.getPrototypeof
用于获取对象的原型对象,相当于 __proto__
。
const school = {
name: '尚硅谷'
}
const cities = {
xiaoqu: ['北京','上海','深圳']
}
Object.setPrototypeOf(school, cities);
console.log(Object.getPrototypeOf(school));
console.log(school);
4、Object.values、Object.entries和Object.getOwnPropertyDescriptors
代码实现:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>对象方法扩展</title>
</head>
<body>
<script>
// 对象方法扩展
let school = { name : "訾博", age : 24, sex : "男" }
// 获取对象所有的键
console.log(Object.keys(school));
// 获取对象所有的值
console.log(Object.values(school));
// 获取对象的entries
console.log(Object.entries(school));
// 创建map
const map = new Map(Object.entries(school));
console.log(map);
console.log(map.get("name"));
// 返回指定对象所有自身属性的描述对象
console.log(Object.getOwnPropertyDescriptors(school));
const obj = Object.create(null,{
name : {
// 设置值
value : "訾博",
// 属性特性
writable : true,
configuration : true,
enumerable : true
}
});
</script>
</body>
</html>
运行结果:
es10对象扩展( Object.fromEntries 将数组转换成对象与Object.entries相反):
let results = Object.fromEntries([
['name','name'],
['value','value']
])
let m = new Map();
m.set('name','333')
console.log(results)