1、?.与??
简化运算逻辑,如三木运算符、if
let data = {}
const msg = data ?. msg ?? 'message'; // message
?. 可以无限链下去,不论有多少属性,只要有最后可以访问到属性,就会直接赋值最后的属性值。否则当任何一个链出现问题,立刻停止,而后赋值undefined。
?? 出现null ,undefined值会后,合并默认值(??后面的值)。
具体详见js中?.、??、??=的用法
2、数字分隔符_
遇到数字足够大的时候,如果有个分隔符能按照规律隔开那就好了。
const num = 6000000000; // 无法轻易分辨
const num2 = 6_000_000_000; // 清晰明了
console.log(num2) // 6000000000
也可用于计算
const num1 = 1;
const num2 = 6_000_000_000;
const sum = num1 + num2; // 6000000001
3、BigInt数据类型,解决大数字
js数字大小受制于Number.MAX_SAFE_INTEGER。因为Javascript的数字存储使用了IEEE 754中规定的双精度浮点数数据类型,而这一数据类型能够安全存储 -(2^53 - 1) 到 2^53 - 1 之间的数值(包含边界值)。
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
这个是不对的,就是因为计算后的值超过了安全存储。故想处理大数字,需要借助与BigInt。
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53) + 1); // true,错误
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53) )+ BigInt(1); // false,正确
4、in 与 hasOwn
对象上是否存在某个属性。
hasOwnProperty 只能检测对象实例属性,无法检测原型中的属性
class Persion {
constructor(name){
this.name = name;
}
getName() {
return name;
}
}
var persion=new Persion(12,88);
console.log(persion.hasOwnProperty("xiaoming"));//true
console.log(persion.hasOwnProperty("getName"));//false
console.log("name" in persion);//true
console.log("getName" in persion);//true
但在Object.create这种情况下,hasOwnProperty会出现异常错误,而hasOwn则不会。
let object_one = Object.create(null);
Object.hasOwnProperty(object_one, 'age'); // Uncaught TypeError: Cannot convert object to primitive value
Object.hasOwn(object_one, 'age'); // false
"name" in object_one // false
网友评论