怎样检测对象是否具有某个属性或方法

随声附和 提交于 2019-11-30 21:25:11

前言: 检测对象是否具有某个属性分为两种情况.

1. 如果要检测从原型链上继承的属性, 则使用: in 关键字;

2. 如果不检测继承的属性, 则使用: Object.hasOwnProperty() 方法;

 

第一步: 使用 in 关键字

var obj = {};

// obj.name没有声明, 且原型链上也没有找到, 因此返回false
"name" in obj; // false

// obj没有声明 toString 方法, 但在原型链上找到了, 因此返回true
"toString" in obj; // true

// 为obj新增一个属性和方法
obj.name = "Lilei";
obj.sayHi = function(){console.log("Hi.")};
"name" in obj; // true;
"sayHi" in obj; // true;

 

第二步: 使用 Object.prototype.hasOwnProperty() 方法

var obj = {};

// obj.name没有声明, 故返回false
obj.hasOwnProperty("name"); // false

// obj没有声明 toString 方法, 尽管在原型链上有, 但不是定义在obj上的, 因此返回false
obj.hasOwnProperty("toString"); // false

// 为obj新增一个属性和方法
obj.name = "Lilei";
obj.sayHi = function(){console.log("Hi.")};

obj.hasOwnProperty("name"); // true
obj.hasOwnProperty("sayHi"); // true

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!