为什么“未定义”==未定义是不正确的
Why "undefined" == undefined isn't true?
==
运算符真的很有趣。它通常不会像人们想象的那样行事。
这促使我调查了冰山一角以下到底发生了什么,根据MDN的说法,情况如下:
如果两个操作数的类型不同,JavaScript 会将 然后,操作数应用严格的比较。如果任一操作数是数字 或布尔值,如果可能,操作数将转换为数字;还 如果其中一个操作数是字符串,则另一个操作数将转换为 字符串(如果可能)。如果两个操作数都是对象,那么 JavaScript 比较当操作数引用时相等的内部引用 内存中的同一对象。
(来源)
那么,为什么"undefined" == undefined
没有评估为真呢?
undefined
不应该转换为"undefined"
然后根据此描述返回 true?
"undefined"
有一个值。它是9个字母:u-n-d-e-f-i-n-e-d。因此,字符串"未定义"没有未定义的值。javascript 中的String
可以有一个未定义的值,但在这里String
对象有一个定义的值,恰好拼写为"undefined"。
使用您提供的解释,右侧的undefined
值将转换为未分配值的String
对象,然后与"未定义"String
进行比较,从而无法进行比较。
对于这类问题,值得回到源头:ECMAScript 5.1 规范。第 11.9.3 节完整描述了双等式的情况:
- 如果 Type(x) 与 Type(y) 相同,则一些规则
- 如果 x 为空且 y 未定义,则返回 true。
- 如果 x 未定义且 y 为空,则返回 true。
- 如果 Type(x) 是 Number 且 Type(y) 是 String,则返回比较结果 x == ToNumber(y)。
- 如果 Type(x) 是字符串,Type(y) 是 Number,则返回比较结果 ToNumber(x) == y。
- 如果 Type(x) 是布尔值,则返回比较结果 ToNumber(x) == y。
- 如果 Type(y) 是布尔值,则返回比较结果 x == ToNumber(y)。
- 如果 Type(x) 是字符串或数字,而 Type(y) 是 Object,则返回比较结果 x == ToPrimitive(y)。
- 如果 Type(x) 是 Object 并且 Type(y) 是 String 或 Number,则返回比较 ToPrimitive(x) == y 的结果。
- 返回假。
因为在这种情况下Type(x)是string
而Type(y)是undefined
的,规则规定结果应该是假的。
undefined
是JavaScript中内置值的原语,内置类型为Undefined
。做一个比较,比如x == undefined
,在javascript中有一个特殊的含义:它检查变量是否尚未定义。
"undefined"
字面上是一个string
,undefined
是一个object
。我认为它用nothing
或""
或an empty string
铸造右侧操作数.所以"undefined" == null
返回false
.
undefined
是一个特殊的JavaScript关键字,以下是检查未定义的变量/属性的方法。
var a = undefined;
//if( a == undefined )
//if( a === undefined )
- 未定义不是函数:模块导出
- 得到"未定义不是函数“;使用显示原型图案时出错
- 未捕获的类型错误:未定义不是上的函数.GetElementByID
- 在同一页面中使用两个版本的jquery将返回'未定义不是函数'
- "未定义不是函数“;错误jQuery,.replaces,scrollTop
- 在将 Pickadate 与 Meteor 一起使用时,未定义不是函数错误
- 反应.js:未捕获类型错误:未定义不是一个函数
- jQuery onclick 函数:未定义不是一个函数
- 出现“未捕获的类型错误:未定义不是函数”控制台错误
- Javascript - 错误“未定义不是函数”在以前工作的代码上引发
- 未捕获的类型错误:未定义不是函数,在中为循环创建了对象
- 未定义不是一个函数,谷歌地理定位
- 谷歌URL缩短器API-未压缩类型错误:未定义不是一个函数
- 无法解释的未捕获类型错误:未定义不是函数
- AngluarJS单元测试-未定义不是函数
- 树映射导致未捕获类型错误:未定义不是函数
- 表达式'$的结果.cookie'[未定义]不是函数
- 可以't create Kendo GanttChart:未定义不是一个函数,尽管GanttDataSource
- Firebug:未捕获类型错误:未定义不是函数
- 一个经典的jQuery错误 - 未捕获的类型错误:未定义不是一个函数