为什么NaN =!NaN返回true?

new*_*wim 2 javascript nan assignment-operator node.js

NaN是可疑起源的残留实现之一,但在大多数情况下我得到它.但是,我今天将它输入到Node提示符中并且无法理解它...

NaN = !NaN
> true
Run Code Online (Sandbox Code Playgroud)

这只是简单地返回评估结果!NaN吗?这是有道理的,但我很惊讶尝试将NaN分配给另一个值时没有错误.

注意:这个问题是关于这个特定的语法结构; 有很多关于NaN和isNaN的问题,但我在google搜索后找不到答案.感谢Ori Drori 迄今为止最佳答案.

Ori*_*ori 9

您要分配trueNaN,而不是比较NaN!NaN使用=====,所以操作返回指定的值- > true.Javascript默认忽略此任务,因为它NaN是只读的.

console.log(NaN = true);

// NaN hasn't changed
console.log(NaN);
Run Code Online (Sandbox Code Playgroud)

如果你要添加use strict你的代码,JS将抛出一个只读错误:

'use strict';
NaN = true;
Run Code Online (Sandbox Code Playgroud)