hasOwnProperty() 方法会返回一个布尔值,指示对象 自身 属性中是否具有指定的属性(也就是是否有指定的键) 该方法属于 Object 对象,由于所有的对象都"继承"了Object的对象实例,因此几
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是是否有指定的键)
该方法属于Object
对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。
语法
obj.hasOwnProperty(prop)
参数
prop
要检测的属性
字符串
名称或者Symbol
。
返回值
用来判断某个对象是否含有指定的属性的 Boolean
。
o = new Object(); o.prop = 'exists'; function changeO() { // 改变对象自身属性 o.newprop = o.prop; delete o.prop; } o.hasOwnProperty('prop'); // 返回 true changeO(); o.hasOwnProperty('prop'); // 返回 false
o = new Object(); o.prop = 'exists'; o.hasOwnProperty('prop'); // 返回 true hasOwnProperty只能获得自身属性,不能获得继承属性 o.hasOwnProperty('toString'); // 返回 false o.hasOwnProperty('hasOwnProperty'); // 返回 false
Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
语法
Object.getOwnPropertyNames(obj)
参数
obj
一个对象,其自身的可枚举和不可枚举属性的名称被返回。
返回值
在给定对象上找到的自身属性对应的字符串数组。
var arr = ["a", "b", "c"]; console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"] // 类数组对象 var obj = { 0: "a", 1: "b", 2: "c"}; console.log(Object.getOwnPropertyNames(obj).sort()); // ["0", "1", "2"] // 使用Array.forEach输出属性名和属性值 Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) { console.log(val + " -> " + obj[val]); }); // 输出 // 0 -> a // 1 -> b // 2 -> c //不可枚举属性 var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } }); my_obj.foo = 1; console.log(Object.getOwnPropertyNames(my_obj).sort()); // ["foo", "getFoo"]
只获取不可枚举的属性
下面的例子使用了 Array.prototype.filter()
方法,从所有的属性名数组(使用Object.getOwnPropertyNames()
方法获得)中去除可枚举的属性(使用Object.keys()
方法获得),剩余的属性便是不可枚举的属性了:
var target = myObject; var enum_and_nonenum = Object.getOwnPropertyNames(target); var enum_only = Object.keys(target); var nonenum_only = enum_and_nonenum.filter(function(key) { var indexInEnum = enum_only.indexOf(key); if (indexInEnum == -1) { // 没有发现在enum_only健集中意味着这个健是不可枚举的, // 因此返回true 以便让它保持在过滤结果中 return true; } else { return false; } }); console.log(nonenum_only); 注:Array.filter(filt_func)方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。