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

为什么JavaScript';s未定义的对象,而不是关键字,javascript,Javascript,我想知道为什么JavaScript的未定义创建为object(),而不是定义为关键字?而且,创建自定义未定义对象(覆盖默认未定义对象)有什么好处吗 对我来说,这有点让人困惑——正如我读到的,我应该使用 if(myObject === 'undefined') { /* ... */ } 尽管我经常对==未定义的使用不正确的版本。但在我看来,这种方法就像我试图将myObject与String进行比较,尽管我试图确定myObject的状态 那么,这是一个概念上的错误,还是有合理的理由这样创造它 最

我想知道为什么JavaScript的未定义创建为object(),而不是定义为关键字?而且,创建自定义未定义对象(覆盖默认未定义对象)有什么好处吗

对我来说,这有点让人困惑——正如我读到的,我应该使用

if(myObject === 'undefined')
{ /* ... */ }
尽管我经常对
==未定义的
使用不正确的版本。但在我看来,这种方法就像我试图将
myObject
String
进行比较,尽管我试图确定
myObject
的状态

那么,这是一个概念上的错误,还是有合理的理由这样创造它

最后一个问题:使用不正确的版本是否有潜在的漏洞?(通过浏览器或浏览器插件的JS修改)


感谢您的回复。

这不是一个物体;这只是一个例子,说明为什么即使在今天,学校仍然是一个贫乏的资源

未定义的
“值”(称之为值是有问题的,因为它更像是缺少值)是一个标记,表示某个东西不存在。有点奇怪,它与
null
不同,但它确实是

测试
未定义的
的方式不正确。您可以直接与未定义的
进行比较

if (something === undefined) 
或按类型进行比较:

if (typeof something === "undefined")
通常情况下,您并不真正关心某个内容是
未定义的
还是
空的
,在这种情况下,您可以安全地执行以下操作:

if (something == null)

因为
未定义
=
比较中被视为与
相同。(如果你信奉“永不使用
=
”的宗教,那么显然你不会这么做。)

在最新的JS实现中,未定义的不能被重新定义(你以前可以这样做)
undefined=object
仍将返回undefined。以前,您可以重新定义undefined,但是如果另一个库/脚本也重新定义了undefined,或者它预期undefined实际上是未定义的,则可能会导致兼容性问题。因此,重新定义未定义的定义是一个“非常糟糕的主意”

要与未定义的对象进行正确比较,您必须执行
object===undefined
not
object==“undefined”
。引号之间的“未定义”是一个字符串

还有其他方法(
typeof object==“undefined”
),因为typeof返回字符串;在我个人看来,该解决方案阅读起来有点迟钝,更容易出错,但与旧的JS实现兼容


您可以执行
object=undefined
来清空变量,这就是它存在的原因。

您指的是typeof(myObject)吗?undefined是有效的类型,请尝试:a=undefined;(a)的类型;a将未定义为类型,其类型将为“未定义”,您应该使用:
if(typeof myObject=='undefined')
if(myObject==undefined)有什么问题吗(myObject==undefined)否决这个问题有多愚蠢。这种知识搜索正是堆栈溢出的目的。