JavaScript测试值未更改

时间:2018-10-04 20:06:44

标签: javascript

在我的代码中,我需要知道值是否更改。

类似这样的东西:

let a = {x:func1()};
let old_x = a.x;
func2(a);

if(x === old_x)
    console.log(`x wasn't changed`);
else
    console.log(`x is changed`);

这段代码工作了一段时间,但我遇到了'NaN' 对于NaN规范来说,NaN!== NaN会给出“ true”……这对我来说是一个惊喜,现在我不知道:

  • JavaScript中是否有统一的方法来比较两个值相同?
  • 'NaN'是JavaScript中唯一的一种特殊情况,以下条件是比较两个值相等性的安全方法吗?

    x === old_x || isNaN(old_x) && isNaN(x)
    

注意: 就我而言,“相同”是指

1 === 1 => true
null === null => true
undefined === null => false
undefined === undefined => true
NaN === NaN => true
'0' === 0 => false
Infinity === Infinity => true
...etc

对象,数组,函数和其他“引用类型”通过引用进行比较: 即

let a = b = {}
a === b => true
but
a === {} => false

2 个答案:

答案 0 :(得分:2)

  

'NaN'是Javascript中唯一的一种特殊情况,以下条件可以安全地比较两个值是否相等吗?

是的。比较值NaN是唯一的例外,用于比较两个变量/属性,例如:

 a === a

can be fun

答案 1 :(得分:1)

REPAR_ALLOW_DATA_LOSS确实是一个特例。在这方面,这是一种特殊的“独特价值”。


编辑:由于您知道对象引用比较,因此删除了有关对象的部分。


  

以下条件是比较两个值相等的安全方法:

     

NaN

一点都不!

例如,如果old_x === x || isNaN(old_X) && isNaN(x)true是与数字不可比的不同字符串,则可以返回old_x

例如,xisNaN("a")都将返回isNaN("b")

您可以使用类似的方法,但是您还必须测试old_x和x的类型是否也为“数字”:

true

可以确定值。