JavaScript中Object.keys、Object.getOwnPropertyNames区别

定义

Object.keys

定义:返回一个对象可枚举属性的字符串数组;

Object.getOwnPropertyNames

定义:返回一个对象可枚举、不可枚举属性的名称;

属性的可枚举性、不可枚举性

定义:可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性,对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true,对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false。

例子

var obj = { "prop1": "v1" };
Object.defineProperty(obj, "prop2", { value: "v2", writable: false });
console.log(Object.keys(obj).length);           //output:1
console.log(Object.getOwnPropertyNames(obj).length);    //output:2

console.log(Object.keys(obj));           //output:Array[1] => [0: "prop1"]
console.log(Object.getOwnPropertyNames(obj));    //output:Array[2] => [0: "prop1", 1: "prop2"]

内置的判断,访问和迭代方法

功能

可枚举

可枚举、不可枚举

判断

propertyIsEnumerable

in/hasOwnProperty

访问

Object.keys

Object.getOwnPropertyNames

迭代

for..in..

Object.getOwnPropertyNames

实战

var obj = { "prop1": "v1" };
Object.defineProperty(obj, "prop2", { value: "v2", writable: true });

console.log(obj.hasOwnProperty("prop1")); //output: true
console.log(obj.hasOwnProperty("prop2")); //output: true

console.log(obj.propertyIsEnumerable("prop1")); //output: true
console.log(obj.propertyIsEnumerable("prop2")); //output: false

console.log('prop1' in obj);    //output: true
console.log('prop2' in obj);    //output: true

for (var item in obj) {
    console.log(item);
}
//output:prop1

for (var item in Object.getOwnPropertyNames(obj)) {
    console.log(Object.getOwnPropertyNames(obj)[item]);
}
//ouput:[prop1,prop2]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding for love

JS入门难点解析10-创建对象

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

1193
来自专栏行者常至

020.Java的反射机制

JAVA反射机制是在运行状态中, 对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意方法和属性; 这种动态获取信息以...

831
来自专栏懒人开发

java反射与注解(二):Constructor类理解

这里Constructor,我们知道是构造函数 为什么是数组形式的呢? 因为可能有多个构造 这个时候,我们写一个DummyClass2, 这里有2个构造 ...

1974
来自专栏Micro_awake web

JavaScript中创建对象的几种模式

1010
来自专栏天天

js面向对象思想精要

981
来自专栏nummy

ECMAScript5 Object的新属性方法

虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流...

1144
来自专栏JavaEdge

深入分析Java的enum

34811
来自专栏前端儿

JS 中 this上下文对象的使用方式

JavaScript 有一套完全不同于其它语言的对 this 的处理机制。 在五种不同的情况下 ,this 指向的各不相同。

2131
来自专栏androidBlog

Java 反射机制详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

851
来自专栏老付的网络博客

Java中lambda表达式详解

上面的代码中,e是一个lambda的对象,根据java的继承的特性,我们可以说e对象的类型是继承自eat接口。而e1是一个正常的匿名类的对象.

3864

扫码关注云+社区

领取腾讯云代金券