1

我目前正在练习 javascript,目前在对象检测方面遇到了麻烦。我想创建一个对象并检测它是否存在。下面是我目前正在使用的一些示例代码。

下面的代码示例是我创建对象的方式。

var obj = obj || {};

我应该使用这个吗?

if (typeof obj !== "undefined") {
   // code
}

或这个?

if (obj !== null) {

}
4

2 回答 2

3

该值undefined意味着该变量尚未被赋值。该值null表示已为其分配了值null。运算符(===及其否定,!==)防止类型强制

哪个是对的?这完全取决于您要完成的工作。两者undefinednull都是“假”值,这意味着每个值都false在布尔上下文中计算(如false,0和空字符串)。

请注意,如果objnulltypeof obj不是 "undefined"

于 2012-07-20T02:40:24.987 回答
0

通常的做法是使用:

var obj = obj || {};

当该代码运行时,您可以确定它obj已经被定义(因为var声明),尽管它可能没有被分配一个值。

如果 的值obj解析为“假”值,那么您将分配一个对新对象的引用。

可能的结果是:

  1. 如果obj尚未分配值,则分配新的对象引用。

  2. 如果obj之前已经分配了一个“假”值,它将被一个新的对象引用替换(这可能会与分配给它假值的任何代码混淆)。

  3. 如果obj之前已经分配了一个“真实的”原始值,则以下属性分配obj将引发错误并且脚本执行将停止。

  4. 如果obj已经是对 以外的对象的引用null,则随后的属性分配将指向该对象。根据对象的类型,事情可能没问题。或不。据推测,您无法控制的某些东西创建了该对象,因此可能会在您不知情的情况下修改或破坏它。你会怎么做?

一般来说,在 JavaScript 中不可能处理情况 2 和 3,或者不是您要处理的情况 4 obj。因此,请使用一个不太可能与任何其他名称发生冲突的名称,并希望您获得 #1 或 #4 并且一切顺利。

顺便说一句,在你之后添加的代码仍然可能(或多或少)导致#4,即使你在代码执行时有#1。

测试没有额外的好处,例如:

if (typeof obj == 'undefined')

因为结果本质上是一样的。

于 2012-07-20T03:40:53.577 回答