首页 > 其他分享 >JS获取对象的所有属性(自身/原型属性、可枚举/不可枚举)

JS获取对象的所有属性(自身/原型属性、可枚举/不可枚举)

时间:2022-12-31 14:46:16浏览次数:40  
标签:Symbol Object JS 枚举 key 不可枚举 属性

var s1 = Symbol('s1')
var s2 = Symbol('s2')
var obj= {
    a: 'a1', // 自身属性 可枚举
    b: 'b1', // 自身属性 可枚举
    [s1]: 's1s1s1s1', // 自身属性 Symbol类型不可枚举
};

// 原型链属性 可枚举
Object.prototype.c = 111

// 原型链属性 不可枚举 
Object.defineProperty(Object.prototype, 'd', {
    val: 'dddd'
})

// 原型链属性 不可枚举 Symbol类型
Object.defineProperty(Object.prototype, s2, {
    val: 's2s2s2s2'
})

// 枚举 自身属性
for (key in obj) {
    console.log('key', key);
    // key a
    // key b
    // key c
    /*没有[Symbol(s1)],因为Symbol类型是不可枚举的*/
}
console.log(obj); // Symbol是自身属性可以显示
// { a: 'a1', b: 'b1', [Symbol(s1)]: 's1s1s1s1' }

// JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举)
function getAllkeys (obj) {
    const keys = []
    let temp = obj
    while (temp) {
        keys.push.apply(keys, Object.getOwnPropertyNames(temp))
        keys.push.apply(keys, Object.getOwnPropertySymbols(temp))
        temp = Object.getPrototypeOf(temp) // 返回指定对象的原型(内部[[Prototype]]属性的值)
    }
    return keys
}
console.log(getAllkeys(obj));

 

标签:Symbol,Object,JS,枚举,key,不可枚举,属性
From: https://www.cnblogs.com/webtown/p/17016625.html

相关文章

  • JS获取ip地址,JS获取省市
    $.ajax({url:'https://api.ipify.org?format=jsonp',type:'GET',dataType:'jsonp',success:function(data......
  • jsdom自动补全环境
    constjsdom=require("jsdom");const{JSDOM}=jsdom;constdom=newJSDOM('<!DOCUMENThtml><p>Test</p>')window=dom.windowdocument=window.documentnavigato......
  • js学习记录01
    函数声明functionfunctionName(parameters参数){执行的代码}functionmyFunction(a,b){ returna*b;}菜鸟中用document.getElementById("demo").innerHTML=......
  • CSS Flex 布局的 flex-direction 属性讲解
    ​​CSSFlex布局的flex-direction属性讲解​​ ​​flex-direction​​​设置了主轴,从而定义了弹性项目放置在弹性容器中的方向。Flexbox是一种单向布局概念,......
  • js中的绝对定位和相对定位
    子元素是相对于父元素来做定位的,因此要用absolute。绝对定位是相对于参照物定位,相对定位是相对于自身来定位(此时的子元素的poisition是absolute,父元素的poisition是relativ......
  • nodejs常用命令
    npm管理配置设置下载源npmconfigsetreqistryhttps://registry.npm.taobao.org查看下载源npmconfiggetreqistry设置缓存目录npmconfigsetcache"D:\npm\n......
  • node.js编写反向代理转发https
    node.js编写反向代理转发httpsconstcrypto=require("crypto");constmd5=function(str){constmd5=crypto.createHash('md5');md5.update(str);......
  • c/c++开发分享使用NlohmannJson写JSON保留插入顺序
    1.正文nlohmann/json是一个c++的读写json的组件,号称使用现代c++范式写的。简单看了一下,这个组件确实包含了很多cpp11以上的特性,在vs2015及一下的版本甚至没办法正常编译......
  • 【C++ JSON 开源库】nlohmann入门使用总结
    一、前言以前更多使用Qt5专门的QJsonDocument及其相关类来读写JSON文档,但用久了发现比较麻烦,不够简洁美观,所以更换使用nlohmann。nlohmann 是一个用于解析JSON......
  • c++中nlohmann json的基本使用教程
    nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观,下面这篇文章主要给大家介绍了关于c++中nlohmann json基本使用的相关资料,文中通过实例代码介绍的非常详细,......