为什么JavaScript是未定义的对象而不是关键字

时间:2015-04-17 20:38:22

标签: javascript

我想知道为什么JavaScript的未定义被创建为对象(W3Schools)并且未定义为关键字?并且,创建自定义未定义对象(覆盖默认未定义)是否有任何优势?

对我来说,这有点令人困惑 - 正如我读过的那样,我应该使用

if(myObject === 'undefined')
{ /* ... */ }

虽然我经常使用=== undefined的错误版本。但在我看来,这种方法就像我尝试将myObjectString进行比较,尽管我正在尝试确定myObject状态。

那么,是概念错误还是有一些正当理由以这种方式创建它?

最后一个问题:使用不正确的版本可能容易受到攻击吗? (通过浏览器或浏览器插件的JS修改)

感谢所有回复。

2 个答案:

答案 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清空变量,这就是它的原因。