Object函数的内置方法 Object.getOwnPropertyNames

一、定义

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"]

 

posted @ 2022-03-30 11:24  之鹿喵  阅读(274)  评论(0编辑  收藏  举报