JavaScript对象检测

JavaScript对象检测,javascript,oop,prototype-programming,object-detection,Javascript,Oop,Prototype Programming,Object Detection,我目前正在练习javascript,目前在对象检测方面遇到了问题。我想创建一个对象并检测它是否存在。下面是我目前正在使用的一些示例代码 下面的代码示例是我如何创建对象的 var obj = obj || {}; 我应该用这个吗 if (typeof obj !== "undefined") { // code } 还是这个 if (obj !== null) { } 值未定义表示变量未赋值。值null表示已为其分配值null。==运算符(及其否定形式,!==)阻止 哪个是对的?这完

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

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

var obj = obj || {};
我应该用这个吗

if (typeof obj !== "undefined") {
   // code
}
还是这个

if (obj !== null) {

}

未定义
表示变量未赋值。值
null
表示已为其分配值
null
==
运算符(及其否定形式,
!==
)阻止

哪个是对的?这完全取决于你想要完成什么。
undefined
null
都是“falsy”值,这意味着在布尔上下文中每个值的计算结果都是
false
0
和空字符串


请注意,如果
obj
null
,则
obj的类型
不是
“未定义”
,通常的做法是使用:

var obj = obj || {};
当该代码运行时,您可以确定已定义了
obj
(因为
var
声明),尽管它可能没有被赋值

如果
obj
的值解析为“false”值,则您将为新对象指定一个引用

可能的结果是:

  • 如果未为
    obj
    指定值,则会指定一个新的对象参照

  • 如果以前为
    obj
    分配了一个“假”值,它将被一个新的对象引用所取代(这可能会与分配给它假值的任何代码相混淆)

  • 如果以前为
    obj
    分配了一个“truethy”原语值,则以下对
    obj
    的属性分配将抛出错误,脚本执行将停止

  • 如果
    obj
    已经是对
    null
    以外的对象的引用,则随后的属性分配将是对该对象的。根据对象的类型,事情可能会好起来。或者不是。可能是你无法控制的东西创造了这个对象,因此可能会在你不知情的情况下修改或破坏它。你会怎么做

  • 一般来说,在javascript中,不可能处理案例2和案例3,或案例4,因为它们不是您要处理的
    obj
    。所以,使用一个不太可能与其他名字冲突的名字,希望你得到1或4,一切顺利

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

    测试没有其他好处,例如:

    if (typeof obj == 'undefined')
    

    因为结果基本相同。

    1。没有
    ===。2.你还没有解释你真正需要什么。根据实际目标,解决方案可以改变为什么不简单地
    var obj={}
    来创建一个新对象?如果您将obj设置为{},它不能为null或未定义。我的错,我的意思是typeof obj!==“未定义”和对象类型!==无效的我要问的是..哪种方法最适合确定对象是否存在。我在网上读到一些方法会产生错误的结果,我很难找到正确的方法。希望我能更好地解释自己。提前感谢!:)obj=obj |{}本质上是指if(!obj)obj={}。这相当简单,但希望有助于在这方面提供一些清晰的信息:)