首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在javascript中检查可用的属性或方法的最佳实践?

在javascript中检查可用的属性或方法的最佳实践?
EN

Stack Overflow用户
提问于 2012-09-04 18:57:15
回答 3查看 80关注 0票数 3

我见过许多不同的方法来检查javascript中可用的属性或方法。

代码语言:javascript
运行
复制
if(typeof window.somePropOrMethod​ !== "undefined"){ }

if(window.hasOwnProperty("somePropOrMethod")){ }

if("somePropOrMethod" in window){ }

if(!!window.somePropOrMethod) { }

我应该使用哪一个,为什么?这完全取决于个人喜好,还是它们之间存在细微的差异?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-04 19:03:04

这取决于情况,以及您希望您的测试有多严格。

  1. 不检查是否在特定对象上定义了somePropOrMethod属性;它只检查它是否在继承链中。通常,这并不重要;特别是在检查window.时,需要特别检查"somePropOrMethod“属性是否为而不是 undefined

函数Foo() {} Foo.prototype.bar = 4;Foo.prototype.baz = undefined;var x= new Foo();typeof x.bar​!== "undefined";// true,但"x“实际上没有条形图属性;它在继承链类型x.baz​!== "undefined";// false

  • 检查特定对象是否持有该属性,并从搜索中排除继承链;但不检查somePropOrMethod是否未定义。

window.foo =未定义;window.hasOwnProperty("foo");// true;但它未定义// window.__proto__上的任何属性都将返回false

  • 与第一个属性相同,除了它不检查undefined;它只检查对象有一些成员(可能是检查对象,以及它的继承链(即#1和#3区域),但只检查真值;

window.foo = false;window.bar = 0;window.baz = null;!!window.foo;// false !!window.bar;// false !!window.baz;// false

当然,你应该做的是,如果你想要一个方法,你应该检查它是一个函数;

代码语言:javascript
运行
复制
if(typeof window.someMethod​ !== "function"){ } // specifically check for a function

您应该对其他属性(stringnumber等,甚至使用instanceof关键字)执行相同的操作。

票数 2
EN

Stack Overflow用户

发布于 2012-09-04 19:00:47

第一个函数将告诉您是否定义了属性。它可以在没有定义的情况下存在。

第二个函数将告诉您对象是否直接具有该属性(但如果它通过原型继承该属性,则不会)。

第三个函数将告诉您该对象是否具有该属性。

第四个函数会告诉你是否有一个真值( { number_of_children: 0 }不是)。

票数 1
EN

Stack Overflow用户

发布于 2012-09-04 19:08:32

  • if(typeof window.somePropOrMethod​ !== "undefined"){ }

检查somePropOrMethod是否是window的属性,并且它的值不是undefined

直接在对象上以及在其原型链中检查

  • if(window.hasOwnProperty("somePropOrMethod")){ }

检查somePropOrMethod是否显式存在于对象本身(window)上,而不管它的值如何(与#1不同)

仅在对象上直接检查

  • if("somePropOrMethod" in window){ }

检查是否可以在对象本身其原型链上找到somePropOrMethod,而不管它的值如何(与#1不同)

直接在对象上以及在其原型链中检查

  • if(!!window.somePropOrMethod) { }

这里发生的事情是获取somePropOrMethod的值并将其转换为布尔值。如果somePropOrMethodundefined或任何其他False值,则结果始终为false,否则为true

直接在对象上以及在其原型链中检查

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

https://stackoverflow.com/questions/12262058

复制
相关文章

相似问题

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