一、定义
Object.getOwnPropertyNames()方法返回一个数组,包含对象所有自有的属性和方法(但不包括Symbol值作为名称的属性)的字符串名。
二、语法
Object.getOwnPropertyNames(obj);
参数
obj:要获取的自有属性和方法名的对象
返回值
在给定对象上找到的自有属性和方法(不包括Symbol值的属性)对应的字符串数组。
在ES5中,如果传递给方法的参数不是对象,那么会抛出TypeError错误。
在ES6中,如果传递给方法的参数不是对象,会被强制转换为对象。
三、示例
示例1:获取对象的原型对象上的所有自有属性和方法
var obj = {};
var target = Object.getPrototypeOf(obj);
Object.getOwnPropertyNames(target);
/*
["constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty",
"__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable",
"toString", "valueOf", "__proto__", "toLocaleString"]
*/
示例2:只获取对象的原型对象上的不可枚举属性
var str = 'abcde'; // 字符串类型
// 获取所有自有属性和方法,str会被强制转为new String('adcde'); ES5下会报错
var properties = Object.getOwnPropertyNames(str); // ["0", "1", "2", "3", "4", "length"]
// 获取所有可枚举的属性和方法
var keys = Object.keys(str); // ["0", "1", "2", "3", "4"]
// 过滤得到不可枚举的属性和方法
var no_enumerate = properties.filter(function (value) {
if (keys.indexOf(value) == -1) {
return true;
}
return false;
});
no_enumerate; // ["length"]