我想知道为什么JavaScript的未定义被创建为对象(W3Schools)并且未定义为关键字?并且,创建自定义未定义对象(覆盖默认未定义)是否有任何优势?
对我来说,这有点令人困惑 - 正如我读过的那样,我应该使用
if(myObject === 'undefined')
{ /* ... */ }
虽然我经常使用=== undefined
的错误版本。但在我看来,这种方法就像我尝试将myObject
与String
进行比较,尽管我正在尝试确定myObject
状态。
那么,是概念错误还是有一些正当理由以这种方式创建它?
最后一个问题:使用不正确的版本可能容易受到攻击吗? (通过浏览器或浏览器插件的JS修改)
感谢所有回复。
答案 0 :(得分:3)
这不是一个对象;这就是为什么即使在今天学校教育资源贫乏的原因。
undefined
“值”(将其称为值,因为它更像是值的缺少)是一个标记,表示某些内容不存在。它有点奇怪,它与null
不同,但它是。
您对undefined
进行测试的方式不正确。您应该直接与undefined
进行比较:
if (something === undefined)
或按类型比较:
if (typeof something === "undefined")
通常情况下,您并不关心某些内容是undefined
还是null
,在这种情况下您可以安全地执行此操作:
if (something == null)
因为在undefined
比较中null
被视为与==
相同。 (如果你是“从不使用==
”宗教的信徒,那么显然你不会这样做。)
答案 1 :(得分:0)
在最近的JS实现中,undefined不能重新定义(之前你可以)。 undefined = object
仍会返回undefined。以前你可以重新定义undefined但是如果另一个库/脚本重新定义了未定义的OR,或者如果它预期未定义到真正未定义,则可能导致兼容性问题。因此,这是一个非常糟糕的想法"重新定义未定义。
要正确比较未定义,您必须object === undefined
而不是object == "undefined"
。 "未定义"引号之间是一个字符串。
还有其他方式(typeof object == "undefined"
),因为typeof返回一个String;该解决方案在我个人看来更容易阅读并且更容易出错,但与旧的JS实现兼容。
您可以object = undefined
清空变量,这就是它的原因。