【问题标题】:Why isn't undefined less than 1?为什么 undefined 不小于 1?
【发布时间】:2014-04-03 18:39:13
【问题描述】:

所以在大多数情况下,我已经能够使用类似于这些行的东西,但是 Javascript 给了我这个奇怪的结果。

如果我取了某个值并且结果是未定义的,那么当与整数相比时,它似乎不会小于或大于任何数字。这是为什么呢?

if(undefined < 1 || undefined >= 1)
    alert("yes");
else
    alert("no");

//this always alerts no

JSFiddle

【问题讨论】:

  • 不是一定小于1,只是失败了。
  • 嗯...所以 undefined 在评估方式上与 null 无关?
  • 试试undefined &gt; 1你还是不会。
  • @adeneo - 不完全是,在 undefined 比较的情况下返回 false 是规范的明确部分:ecma-international.org/ecma-262/5.1/#sec-11.8

标签: javascript undefined


【解决方案1】:

这就是 javascript 的工作原理。如果任一方都无法转换为数字(字符串可以,通过代码点比较:'2' &lt; '3' &amp;&amp; '186' &lt; '4'),则数字比较将返回 false(适用于 &gt;&lt;&lt;=&gt;=) .

【讨论】:

  • 不完全正确;我相信字符串将&lt;/&gt; 与代码点进行比较,而不是将它们转换为数字;例如:'12' &lt; '2'
  • @TurnerHayes 我猜代码点 数字,只是与使用 parseFloat 得到的不同。
  • 是的,但我的意思是该示例具有误导性; '2' &lt; '3' 是正确的,但不是因为它将两侧强制为数字(即Number('2') &lt; Number('3')),而是因为它逐个代码点比较每个字符串,并且'2'的代码点小于'3'的代码点'。特别是这给出了上面的结果,如果将它们强制为数字,它就不会给出。
【解决方案2】:

在 JavaScript 中没有 operator '&lt;' can not be applied to type 'undefined' 错误,就像在其他类型语言中一样。因此,JavaScript 使用运算符将​​不兼容的类型评估为 false

【讨论】:

  • 哦,好吧,这是有道理的。那么 undefined 它是自己的类型吗?可以替代使用!== undefined吗?
  • undefined 实际上是对包含原始值undefined 的全局对象的只读引用。由于!== 比较两个对象是否相同,那么1 !== undefined 将是真的,因为它们不是同一个对象。
  • 非常有趣。感谢您的澄清!
  • @cgTag,来源在哪里?
  • @Parcerier 该规范定义了关系运算符的行为方式,包括当undefined 是操作数之一时:ecma-international.org/ecma-262/5.1/#sec-11.8。特别提到了在将undefined转换为NaN的操作数上调用了“ToNumber”,然后说明如果NaN是操作数,则比较返回false。
猜你喜欢
  • 2018-09-08
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多