首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript目标检测

JavaScript目标检测
EN

Stack Overflow用户
提问于 2012-07-20 10:36:06
回答 2查看 467关注 0票数 1

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

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

代码语言:javascript
复制
var obj = obj || {};

我应该用这个吗?

代码语言:javascript
复制
if (typeof obj !== "undefined") {
   // code
}

或者这个?

代码语言:javascript
复制
if (obj !== null) {

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 10:40:25

undefined表示尚未为变量赋值。值null表示已为其指定值null===运算符(及其求反!==)防止type coercion

哪一个是对的?这完全取决于你想要实现的目标。undefinednull都是"falsy“值,这意味着它们在布尔上下文中的计算结果都是false (就像false0和空字符串一样)。

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

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 11:40:54

通常的做法是使用:

代码语言:javascript
复制
var obj = obj || {};

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

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

可能的结果是:

  1. 如果尚未为obj赋值,则会分配新的对象引用。
  2. 如果obj以前已被赋值为False值,则它将被新的对象引用所取代(这可能会与为其赋值为False值的任何代码发生冲突)。
  3. 如果obj先前已被赋值为"truethy“原始值,则对D13的以下属性赋值将抛出错误,并且脚本执行将停止。如果obj已经是对D17以外的对象的引用,则后续的属性赋值将被分配给该对象。根据对象的类型,事情可能是正常的。或者不是。可能是您控制范围之外的东西创建了对象,因此可能会在您不知情的情况下对其进行修改或销毁。你会怎么做?

通常情况下,在javascript中不可能处理情况2和3,或者4,其中您要处理的不是您的obj。因此,使用一个不太可能与其他名称冲突的名称,并希望您得到#1或#4,一切都会顺利进行。

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

这样的测试没有额外的好处:

代码语言:javascript
复制
if (typeof obj == 'undefined')

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11572087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档