在我的代码中,我需要知道值是否更改。
类似这样的东西:
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”……这对我来说是一个惊喜,现在我不知道:
'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
答案 0 :(得分:2)
答案 1 :(得分:1)
REPAR_ALLOW_DATA_LOSS
确实是一个特例。在这方面,这是一种特殊的“独特价值”。
编辑:由于您知道对象引用比较,因此删除了有关对象的部分。
以下条件是比较两个值相等的安全方法:
NaN
一点都不!
例如,如果old_x === x || isNaN(old_X) && isNaN(x)
和true
是与数字不可比的不同字符串,则可以返回old_x
。
例如,x
和isNaN("a")
都将返回isNaN("b")
!
您可以使用类似的方法,但是您还必须测试old_x和x的类型是否也为“数字”:
true
可以确定值。