在 JavaScript 中,相等比较运算符是我们经常使用的语法之一。在 ES12 中,新增了两个相等比较运算符:Object.is() 和 Object.isnt(),并且还有一个新的赋值运算符:??=。本文将详细介绍这三个运算符的使用方法和指导意义。
Object.is()
Object.is() 是 ES12 中新增的一个用于比较两个值是否相等的方法。与原有的比较运算符(== 和 ===)不同,Object.is() 能够正确地处理一些特殊情况,比如 NaN 和 -0。
console.log(Object.is(NaN, NaN)); // true console.log(Object.is(-0, 0)); // false console.log(Object.is(0, 0)); // true console.log(Object.is(1, '1')); // false
可以看到,使用 Object.is() 进行比较时,NaN 与 NaN 是相等的,-0 与 0 是不相等的。这些结果与原有的比较运算符不同,因为原有的比较运算符在处理这些特殊情况时会出现问题。
在实际开发中,我们经常会遇到需要比较两个值是否相等的场景,而 Object.is() 能够正确地处理各种情况,因此建议在使用比较运算符时,优先考虑使用 Object.is()。
Object.isnt()
Object.isnt() 是 Object.is() 的反向操作。它用于比较两个值是否不相等。与 Object.is() 类似,Object.isnt() 也能够正确地处理一些特殊情况。
console.log(Object.isnt(NaN, NaN)); // false console.log(Object.isnt(-0, 0)); // true console.log(Object.isnt(0, 0)); // false console.log(Object.isnt(1, '1')); // true
可以看到,使用 Object.isnt() 进行比较时,NaN 与 NaN 是不相等的,-0 与 0 是相等的。这些结果与原有的比较运算符不同,因为原有的比较运算符在处理这些特殊情况时会出现问题。
在实际开发中,我们也经常会遇到需要比较两个值是否不相等的场景,因此 Object.isnt() 也是一个非常有用的方法。
??= 运算符
??= 运算符是 ES12 中新增的一个赋值运算符。它用于给一个变量赋值,但只有当该变量的值为 null 或 undefined 时才执行赋值操作。
let a = null; a ??= 'default'; console.log(a); // 'default' let b = 'value'; b ??= 'default'; console.log(b); // 'value'
可以看到,当变量 a 的值为 null 时,??= 运算符会将 'default' 赋值给 a;当变量 b 的值不为 null 时,??= 运算符不会执行赋值操作。
在实际开发中,我们经常会遇到需要给变量赋默认值的场景。使用 ??= 运算符可以让代码更加简洁明了。
总结
ES12 中新增的相等比较运算符 Object.is() 和 Object.isnt() 能够正确地处理一些特殊情况,建议在使用比较运算符时,优先考虑使用它们。而 ??= 运算符则能够让代码更加简洁明了,特别是在需要给变量赋默认值的场景中非常有用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/660eeae8d10417a222f5cb6c