JavaScript 中检查对象中是否存在属性

Posted by cl9000 on May 12, 2020

在事情成功之前,一切总看似不可能。——<纳尔逊·曼德拉>

当您必须检查对象中是否存在某个属性时,您可能执行以下操作:

1
2
3
4
5
var myObject = {
name: '@tips_js'
};

if (myObject.name) { ... }

对于这种情况,有两种本机方式,即inoperatorObject.hasOwnProperty。衍生自的每个对象Object都有两种可用方式。

1
2
3
4
5
6
7
8
9
var myObject = {
name: '@tips_js'
};

myObject.hasOwnProperty('name'); // true
'name' in myObject; // true

myObject.hasOwnProperty('valueOf'); // false, valueOf is inherited from the prototype chain
'valueOf' in myObject; // true

者在检查属性的深度上都不同。换句话说,hasOwnProperty仅当键直接在该对象上可用时,才会返回true。但是,in运算符不会区分在对象上创建的属性和从原型链继承的属性。

这是另一个例子:

1
2
3
4
5
6
7
8
9
var myFunc = function() {
this.name = '@tips_js';
};
myFunc.prototype.age = '10 days';

var user = new myFunc();

user.hasOwnProperty('name'); // true
user.hasOwnProperty('age'); // false, because age is from the prototype chain

实时示例! - https://jsbin.com/tecoqa/edit?js,console

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!