当前位置: 首页 > 编程笔记 >

Object.keys() 和 Object.getOwnPropertyNames() 的区别详解

栾英资
2023-03-14
本文向大家介绍Object.keys() 和 Object.getOwnPropertyNames() 的区别详解,包括了Object.keys() 和 Object.getOwnPropertyNames() 的区别详解的使用技巧和注意事项,需要的朋友参考一下

大部分情况下Object.getOwnPropertyNames()与Object.keys(obj)的功能是一样的,我们一般也是用来获取一个JSON对象中所有属性,例如

const obj = {
  property1: 1,
  property2: 2,
};

console.log(Object.keys(obj));
console.log(Object.getOwnPropertyNames(obj));

输出:

> Array ["property1", "property2"]
> Array ["property1", "property2"]

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

共同点:都是返回自身的属性,不会返回原型链上的。

区别: Object.keys()返回可枚举的,Object.getOwnPropertyNames()返回所有的。

Person = function(name){
  this.name = name || ''
}
Person.prototype.sayHello = function(){
  console.log('hello')
}
p = new Person('yangyang')
p.age = 18
Object.defineProperties(p, {
  age:{
    enumerable:false
  }
})
console.log(Object.keys(p)) // ["name"]
console.log(Object.getOwnPropertyNames(p)) // ["name", "age"]

参考资料:
html" target="_blank">html" target="_blank">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

到此这篇关于Object.keys() 和 Object.getOwnPropertyNames() 的区别详解的文章就介绍到这了,更多相关Object.keys()和Object.getOwnPropertyNames()内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍ipython和python区别详解,包括了ipython和python区别详解的使用技巧和注意事项,需要的朋友参考一下 ipython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell命令,内置了许多很有用的功能和函数。 IPython 是基于BSD 开源的。 IPyt

  • 本文向大家介绍Mybatis-Plus和Mybatis的区别详解,包括了Mybatis-Plus和Mybatis的区别详解的使用技巧和注意事项,需要的朋友参考一下 原文:https://blog.csdn.net/qq_34508530/article/details/88943858 . 区别一 如果Mybatis Plus是扳手,那Mybatis Generator就是生产扳手的工厂。 通俗来

  • 本文向大家介绍AngularJS constant和value区别详解,包括了AngularJS constant和value区别详解的使用技巧和注意事项,需要的朋友参考一下 angularJS可以通过constant(name,value)和value(name,value)对于创建服务也是很重要的。 相同点是:都可以接受两个参数,name和value。 区别: 1.constant(name,

  • 本文向大家介绍Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别,包括了Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别的使用技巧和注意事项,需要的朋友参考一下 前言   第一次听说jsonp,其实早在2年之前。当时在做一个活动页面的抽奖模块,要从服务端get一个概率,当时什么都不懂,同事说用ajax,我就用ajax,同事说dataType

  • 本文向大家介绍C#中string.Empty和null的区别详解,包括了C#中string.Empty和null的区别详解的使用技巧和注意事项,需要的朋友参考一下 这是一个及其常见的问题,网上已经有关于这个问题的很多讨论。但是我觉得都是不求甚解,有一些还是在误导别人。下面我来说下我对这三者的理解,如有错误的地方请大家及时指正。   一:""与string.Empty我认为是一样的。网上有一篇被转载

  • 本文向大家介绍Android中asset和raw的区别详解,包括了Android中asset和raw的区别详解的使用技巧和注意事项,需要的朋友参考一下 *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即