Mem*_*eak 24 javascript nan undefined
为什么isNaN()JavaScript中有一个函数,isUndefined()必须写成:
typeof(...) != "undefined"
Run Code Online (Sandbox Code Playgroud)
我有没有看到一点?
在我看来,写这个而不仅仅是非常难看isUndefined(testValue).
Jam*_*lly 27
根本不需要isUndefined()功能.ECMAScript规范中解释了这背后的原因:
(注意,NaN值是由程序表达式NaN产生的.)在某些实现中,外部代码可能能够检测各种Not-a-Number值之间的差异,但这种行为依赖于实现; 对于ECMAScript代码,所有NaN值都无法区分.
该isNaN()函数用作检测某些东西是否NaN因为相等运算符不起作用(正如您所期望的那样,见下文)的方法.一个NaN值不等于另一个NaN值:
NaN === NaN; // false
Run Code Online (Sandbox Code Playgroud)
undefined另一方面是不同的,undefined价值是可区分的:
undefined === undefined; // true
Run Code Online (Sandbox Code Playgroud)
如果您对该isNaN()函数的工作原理感到好奇,ECMAScript规范也为我们解释了这一点:
- 设num是ToNumber(数字).
- ReturnIfAbrupt(NUM).
- 如果num是NaN,则返回true.
- 否则,返回false.
ECMAScript代码测试值X是否为NaN的可靠方式是X!== X形式的表达式.当且仅当X是NaN时,结果才为真.
NaN !== NaN; // true
100 !== 100; // false
var foo = NaN;
foo !== foo; // true
Run Code Online (Sandbox Code Playgroud)
sim*_*ack 15
该用例var === undefined几乎无处不在,除了这个答案涵盖的情况,其中任何一个undefined被赋值,或者var未定义.
从后一种情况可以清楚地看出这种功能不存在的原因.如果var未定义,则调用假定的函数isUndefined(var)将导致a ReferenceError.但是,引入新关键字isundefined var可以解决此问题.
但是尽管有效,但上述两种情况都是javascript的不良用法.这就是我认为这样的关键字不存在的原因.
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |