ECMAScript 2019 的 Object.is(): 如何避免非精确真假性

阅读时长 3 分钟读完

在 JavaScript 中,为了判断两个变量是否相等,通常使用 ===== 运算符。然而,这两个运算符只能处理有限的情况,对于一些特殊的值,比如 NaN-0,会出现一些麻烦,从而导致我们的判断出错。ECMAScript 2019 引入了 Object.is() 方法来解决这些问题,使我们可以更加准确地判断两个变量是否相等。

Object.is() 的作用

在 ECMAScript 5 中,我们已经有了 === 运算符来判断两个变量的严格相等性。这个运算符非常简单,只有当两个变量的值和类型都相同时才会返回 true。但是,当我们需要判断一些特殊值的相等性时,这个运算符就会出现问题。

例如,NaN 是一个特殊的值,它表示 Not-A-Number,但是它和自身并不相等,即 NaN === NaN 返回的是 false。这意味着,如果我们要判断一个变量是否为 NaN,不能使用 === 运算符,而是需要使用 isNaN() 函数。同样的,-0+0 是相等的,但是 === 运算符无法判断它们的相等性。

ECMAScript 2019 引入了 Object.is() 方法来解决这些问题。Object.is() 方法与 === 运算符非常相似,它们都是用来判断两个值是否相等。但是,它们对特殊值的判断方式略有不同,Object.is() 方法可以避免一些非精确真假性的问题,例如:

  • Object.is(NaN, NaN) 返回的是 true
  • Object.is(-0, +0) 返回的是 false

使用 Object.is() 方法

使用 Object.is() 方法非常简单,它只有两个参数,分别为待比较的两个值,例如:

在上面的代码中,第一个例子中,使用 Object.is() 方法判断 1 和 '1' 是否相等,返回的是 false,因为它们的类型不同;第二个例子中,使用 Object.is() 方法判断 1 和 1 是否相等,返回的是 true;第三个例子中,使用 Object.is() 方法判断 NaNNaN 是否相等,返回的是 true;第四个例子中,使用 Object.is() 方法判断 -0+0 是否相等,返回的是 false

总结

在 JavaScript 中,有限的运算符无法处理所有情况,特别是对于一些特殊值,例如 NaN-0,使用 === 运算符无法判断它们相等的情况。ECMAScript 2019 引入了 Object.is() 方法来处理这些问题,使我们可以更加准确地判断两个值是否相等。使用 Object.is() 方法非常简单,只需要将待比较的两个值作为参数传入即可。在实际开发中,我们应该尽量使用 Object.is() 方法来判断值的相等性,避免出现一些非精确真假性的问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6486e26c48841e989457f479

纠错
反馈