我目前正在练习 javascript,目前在对象检测方面遇到了麻烦。我想创建一个对象并检测它是否存在。下面是我目前正在使用的一些示例代码。
下面的代码示例是我创建对象的方式。
var obj = obj || {};
我应该使用这个吗?
if (typeof obj !== "undefined") {
// code
}
或这个?
if (obj !== null) {
}
我目前正在练习 javascript,目前在对象检测方面遇到了麻烦。我想创建一个对象并检测它是否存在。下面是我目前正在使用的一些示例代码。
下面的代码示例是我创建对象的方式。
var obj = obj || {};
我应该使用这个吗?
if (typeof obj !== "undefined") {
// code
}
或这个?
if (obj !== null) {
}
该值undefined
意味着该变量尚未被赋值。该值null
表示已为其分配了值null
。运算符(===
及其否定,!==
)防止类型强制。
哪个是对的?这完全取决于您要完成的工作。两者undefined
和null
都是“假”值,这意味着每个值都false
在布尔上下文中计算(如false
,0
和空字符串)。
请注意,如果obj
是null
,typeof obj
则不是 "undefined"
。
通常的做法是使用:
var obj = obj || {};
当该代码运行时,您可以确定它obj
已经被定义(因为var
声明),尽管它可能没有被分配一个值。
如果 的值obj
解析为“假”值,那么您将分配一个对新对象的引用。
可能的结果是:
如果obj
尚未分配值,则分配新的对象引用。
如果obj
之前已经分配了一个“假”值,它将被一个新的对象引用替换(这可能会与分配给它假值的任何代码混淆)。
如果obj
之前已经分配了一个“真实的”原始值,则以下属性分配obj
将引发错误并且脚本执行将停止。
如果obj
已经是对 以外的对象的引用null
,则随后的属性分配将指向该对象。根据对象的类型,事情可能没问题。或不。据推测,您无法控制的某些东西创建了该对象,因此可能会在您不知情的情况下修改或破坏它。你会怎么做?
一般来说,在 JavaScript 中不可能处理情况 2 和 3,或者不是您要处理的情况 4 obj
。因此,请使用一个不太可能与任何其他名称发生冲突的名称,并希望您获得 #1 或 #4 并且一切顺利。
顺便说一句,在你之后添加的代码仍然可能(或多或少)导致#4,即使你在代码执行时有#1。
测试没有额外的好处,例如:
if (typeof obj == 'undefined')
因为结果本质上是一样的。