美文网首页
javascript新特性小技巧

javascript新特性小技巧

作者: SailingBytes | 来源:发表于2022-04-19 18:13 被阅读0次

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

相关文章

网友评论

      本文标题:javascript新特性小技巧

      本文链接:https://www.haomeiwen.com/subject/sixeertx.html