在我看来,有四种不同的方法可以确定给定的对象(例如foo
)具有给定的属性(例如bar
)定义:
if (foo.hasOwnProperty(bar)) {
if ('bar' in foo) {
if (typeof foo.bar !== 'undefined') {
if (foo.bar === undefined) {
确定是否存在名为“的属性bar
“在对象中foo
,这三个陈述都等价吗?是否有任何我不知道的微妙语义使这三个陈述中的任何一个变得不同?
不,他们完全不同。例子:
foo = {bar: undefined};
Object.prototype.baz = undefined;
Object.prototype.bing = "hello";
Then:
(typeof foo.bar != "undefined") === false
('bar' in foo) === true
(foo.hasOwnProperty('bar')) === true
(typeof foo.baz != "undefined") === false
('baz' in foo) === true
(foo.hasOwnProperty('baz')) === false
(typeof foo.bing != "undefined") === true
('bing' in foo) === true
(foo.hasOwnProperty('bing')) === false
从逻辑上看:
-
foo.hasOwnProperty('bar')
暗示'bar' in foo
-
typeof foo.bar != "undefined"
暗示'bar' in foo
- 但这些是你能得出的唯一推论;正如上述反例所示,没有其他含义是普遍正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)