2012-07-20 150 views
1

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

下面的代码示例是我如何创建我的对象。

var obj = obj || {}; 

我该用这个吗?

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

或者这个?

if (obj !== null) { 

} 
+0

1.没有'!==='。 2.你没有解释你真的需要什么。根据** real **目标,解决方案可能会有所不同 – zerkms 2012-07-20 02:37:22

+0

为什么不简单地使用'var obj = {}'创建一个新对象? – 2012-07-20 02:39:38

+0

如果您将obj设置为{},那么它不能为null或未定义。 – epascarello 2012-07-20 02:40:38

回答

3

undefined表示该变量未被赋值。值null表示它已分配值null===运营商(及其否定,!==)阻止type coercion

这是对的吗?这完全取决于你想要完成的事情。 undefinednull都是“falsy”值,表示每个值在布尔上下文中评估为false(如false0和空字符串)。

注意,如果objnull,然后typeof obj"undefined"

0

通常的做法是使用:

var obj = obj || {}; 

当代码运行,你可以肯定的是obj已被定义(因为var声明的),尽管它可能没有被赋值。

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

可能的结果是:

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

  2. 如果obj先前被赋予了“falsey”值,它将被替换为新的对象引用(这可能与分配给它的falsey值的任何代码混淆)。

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

  4. 如果obj已经是对除null以外的对象的引用,则随后的属性赋值将是该对象。取决于对象的类型,事情可能没有问题。或不。据推测,你的控制之外的东西创造了这个物体,因此可能在你不知情的情况下修改或销毁它。你会怎么做?

这是不可能的JavaScript处理,一般案件2和3或4它不是你obj你与dealiing。所以用一个不太可能与其他人冲突的名字,并希望你得到#1或#4,并且事情顺利。

顺便说一句,即使您在代码执行的位置拥有#1,代码在您的代码后面添加仍然可能会导致(或多或少)在#4中。

没有额外的好处就像测试:

if (typeof obj == 'undefined') 

因为它的结果基本上是相同的。