JavaScript对象检测

时间:2012-07-20 02:36:06

标签: javascript oop prototype-programming object-detection

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

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

var obj = obj || {};

我应该使用它吗?

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

还是这个?

if (obj !== null) {

}

2 个答案:

答案 0 :(得分:3)

undefined表示尚未为变量分配值。值null表示已为其分配值null===运算符(及其否定!==)会阻止type coercion

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

请注意,如果objnull,则typeof obj "undefined"

答案 1 :(得分:0)

通常的做法是使用:

var obj = obj || {};

当该代码运行时,您可以确定obj已被定义(因为var声明),但可能没有为其分配值。

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

可能的结果是:

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

  2. 如果先前已为obj分配了“falsey”值,则它将被新的对象引用替换(可能会混淆任何为其指定falsey值的代码)。

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

  4. 如果obj已经是对null以外的对象的引用,则属性的后续分配将是该对象。根据对象的类型,事情可能没问题。或不。大概是你控制之外的东西创造了对象,因此可能在你不知情的情况下修改或破坏它。你会做什么?

  5. 一般情况下,javascript无法处理案例2和3或4,而不是你所处理的obj。所以使用一个不太可能与其他任何人冲突的名字,并希望你得到#1或#4,事情进展顺利。

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

    对于以下测试没有其他好处:

    if (typeof obj == 'undefined')
    

    因为结果基本相同。