不得不提的是:我了解一点 JavaScript,但还不是很深入。
始终认为这是检查对象上的属性是否可用的正确方法:
if (window.console) {
// doSomething
}
昨天我看到了使用这种技术的代码:
if ('console' in window) {
// doSomething
}
两种技术等效吗?或者说他们有区别吗?
没有。他们有区别。
第一个检查值是否为window.console
是 Truthy 并且第二个检查console
财产存在于window
.
假设您创建了一个这样的变量。
window.myName = "";
Now, if (window.MyName)
将无法满足条件,因为空字符串在 JavaScript 中是 Falsy。
console.log(Boolean(window.myName)); // false
But if ("myName" in window)
将满足条件,因为myName
是一个属性window
object.
console.log(Boolean("myName" in window)); // true
Note: in
操作员将返回true
即使正在测试的属性位于原型层次结构中的某个位置。例如,
console.log("toString" in {}); // true
它返回true
因为对象{}
继承方法toString
.
如果您想确保该属性存在于对象本身上,那么您应该使用Object.prototype.hasOwnProperty https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty, 像这样
console.log({}.hasOwnProperty("toString")); // false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)