Javascript 同一对象上的严格等式比较算法

Javascript 同一对象上的严格等式比较算法,javascript,vue.js,Javascript,Vue.js,正在浏览Vue.js源代码,并面临有争议的if声明。它是为属性定义被动setter的部分 if (newVal === value || (newVal !== newVal && value !== value)) { return } 已检查此说明,但仍无法理解此类比较何时有用 (newVal !== newVal && value !== value) (newVal!==newVal&&value!==value)如果newVal和value都是N

正在浏览Vue.js源代码,并面临有争议的
if
声明。它是为属性定义被动setter的部分

if (newVal === value || (newVal !== newVal && value !== value)) {
  return
}
已检查此说明,但仍无法理解此类比较何时有用

(newVal !== newVal && value !== value)
(newVal!==newVal&&value!==value)
如果
newVal
value
都是
NaN
,则为真


(newVal==value)
另一方面,即使它们都是
NaN

只是出于兴趣,检查
NaN
,不是更简单更清晰吗?是的,有一个函数正是这样做的:函数
isNaN
有一个误导性的名称。它不仅仅检查
NaN
。e、 g.
isNaN('x')
将是
true
。另请参见
Object.is
,@skirtle,这是真的,mdn中提到了这一点:
该函数应解释为回答以下问题:“当强制为数值时,该值是否为IEEE-754‘不是数字’值?”
@ElAoutarHamza我的观点是,该答案中给出的示例目前是错误的,不能只使用
isNaN
替换现有代码。您还需要使用
typeof
检查,这就是为什么通常使用习惯用法
value==value
。这是github上的问题/4236的一部分。请在这里阅读,谢谢@Gildas.Tambo。这是这个问题的确切答案。