我目前正在练习javascript,并且我目前在对象检测方面遇到了问题。我想创建一个对象并检测它是否存在。下面是我目前正在使用的一些示例代码。
下面的代码示例是我创建对象的方式。
var obj = obj || {};我应该用这个吗?
if (typeof obj !== "undefined") {
// code
}或者这个?
if (obj !== null) {
}发布于 2012-07-20 10:40:25
值undefined表示尚未为变量赋值。值null表示已为其指定值null。===运算符(及其求反!==)防止type coercion。
哪一个是对的?这完全取决于你想要实现的目标。undefined和null都是"falsy“值,这意味着它们在布尔上下文中的计算结果都是false (就像false、0和空字符串一样)。
请注意,如果obj为null,则typeof obj不为"undefined"。
发布于 2012-07-20 11:40:54
通常的做法是使用:
var obj = obj || {};当该代码运行时,您可以确定已经定义了obj (因为使用了var声明),尽管它可能没有被赋值。
如果obj的值解析为"falsey“值,那么您将为一个新对象分配一个引用。
可能的结果是:
obj赋值,则会分配新的对象引用。obj以前已被赋值为False值,则它将被新的对象引用所取代(这可能会与为其赋值为False值的任何代码发生冲突)。obj先前已被赋值为"truethy“原始值,则对D13的以下属性赋值将抛出错误,并且脚本执行将停止。如果obj已经是对D17以外的对象的引用,则后续的属性赋值将被分配给该对象。根据对象的类型,事情可能是正常的。或者不是。可能是您控制范围之外的东西创建了对象,因此可能会在您不知情的情况下对其进行修改或销毁。你会怎么做?通常情况下,在javascript中不可能处理情况2和3,或者4,其中您要处理的不是您的obj。因此,使用一个不太可能与其他名称冲突的名称,并希望您得到#1或#4,一切都会顺利进行。
顺便说一句,在你的代码之后添加的代码仍然可能(或多或少)在#4中产生结果,即使你在代码执行时有#1。
这样的测试没有额外的好处:
if (typeof obj == 'undefined')因为结果基本上是一样的。
https://stackoverflow.com/questions/11572087
复制相似问题