1、Object.keys()遍历自身可以枚举属性

   let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    //setPrototypeOf()设置一个指定的对象的原型到另一个对象or NULL
    Object.keys(myColors);
    Object.keys(yourColors);
    console.log(myColors);
    console.log(yourColors);
    console.log(myColors['color1']);
    console.log(yourColors['color3']);

解析:Object.keys(myColors) 返回 myColors对象的自身可枚举属性键;Object.keys(yourColors)也是返回yourColors对象自身的可枚举属性键。setPrototypeOf()方法让yourColors继承myColors原型的属性,但是能看到并不能遍历出来。Object.keys() 是 遍历自身可以枚举属性。

2、Ojbect.values() /Ojject.entries()

返回自身可枚举属性的键值对数组:

    let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    console.log(Object.values(myColors));
    console.log(Object.entries(myColors));

3、for-in 遍历可枚举属性prototype 属性

for-in遍历对象所有的可枚举属性,包括原型。

ps:for-in和for-of的区别

①for in 遍历的是数组的索引(即键名),for of遍历的是数组元素值

②for in 得到对象的key or 数组 or 字符串的下标

③for of 得到对象的value or 数组 or 字符串的值

for in更适合遍历对象 

   let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    let arrayColors = [];
    for (let key in yourColors) {
        arrayColors.push(key);
    }
    console.log(arrayColors);

解析:arrayColors 数组 包含yourColors自身属性键,也有从原型对象myColrs继承的属性。

4、hasOwnProperty 遍历可枚举属性

返回一个布尔值,只能判断自有属性是否存在,对于继承属性会返回false,因为它不查找原型链的函数

//不使用hasOwnProperty,返回自身属性和继承原型属性
    let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    for (let i in yourColors) {
        console.log(i);
    }

//使用hasOwnProperty,返回自身属性
    let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    for (let i in yourColors) {
        if (yourColors.hasOwnProperty(i)) { //加上if判断去掉原型链上的
            console.log(i)
        }
    }

5、getOwnPropertyNames() 返回可枚举属性和不可枚举属性

不包括prototype属性,不包括symbol类型的key

getOwnPropertyNames()返回一个对象自身所有的属性,包括可枚举和不可枚举属性组成的数组

//返回对象自身所有的属性,可枚举和不可枚举组成的数组,但不包括prototype属性
    let myColors = {
        color1: 'pink',
        color2: 'red'
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue'
    };
    Object.setPrototypeOf(yourColors, myColors);
    //定义不可枚举属性
    Object.defineProperty(yourColors, 'your', {
        enumerable: true,
        value: 6,
    })
    console.log(Object.getOwnPropertyNames(yourColors));

//返回对象自身所有的属性,可枚举和不可枚举组成的数组,但不包括Symbol类型的key
    let _item = Symbol('item') //定义Symbol数据类型
    let myColors = {
        color1: 'pink',
        color2: 'red',
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue',
        [_item]: 'mySymbol'
    };
    Object.setPrototypeOf(yourColors, myColors);
    //定义不可枚举属性
    Object.defineProperty(yourColors, 'your', {
        enumerable: true,
        value: 6,
    })
    console.log(Object.getOwnPropertyNames(yourColors));

6、getOwnPropertySymbols() 返回symbol类型的key属性,

不关心是否可枚举,返回对象自身的所有Symbol属性组成的数组

    let _item = Symbol('item') //定义Symbol数据类型
    let myColors = {
        color1: 'pink',
        color2: 'red',
    };
    let yourColors = {
        color3: 'green',
        color4: 'blue',
        [_item]: 'mySymbol'
    };
    Object.setPrototypeOf(yourColors, myColors);
    //定义不可枚举属性
    Object.defineProperty(yourColors, 'your', {
        enumerable: true,
        value: 6,
    })
    console.log(Object.getOwnPropertySymbols(yourColors));

7、对象对key的获取方法

    function getkey() {
        let obj = {
            a: 1,
            b: 2,
            c: 3
        };

        Object.prototype.d = 4;
        Object.defineProperty(obj, 'e', {
            configurable: true,
            writable: false,
            enumerable: false,
            value: 5
        });

        Object.defineProperty(obj, 'f', {
            configurable: true,
            writable: false,
            enumerable: true,
            value: 6
        });

        const symbolg = Symbol('g');
        const symbolh = Symbol('h');

        Object.defineProperty(obj, symbolg, {
            configurable: true,
            writable: false,
            enumerable: false,
            value: 7
        });

        Object.defineProperty(obj, symbolh, {
            configurable: true,
            writable: false,
            enumerable: true,
            value: 8
        });

        console.log();
        for (let key in obj) {
            console.log('-- for-in:', key);
            if (obj.hasOwnProperty(key)) {
                console.log('-- hasOwnProperty: ', key);
            }
        }
        console.log('-- getOwnPropertyNames: ', Object.getOwnPropertyNames(obj));
        console.log('-- getOwnPropertyDescriptor: ', Object.getOwnPropertyDescriptor(obj));
        console.log('-- getOwnPropertySymbols: ', Object.getOwnPropertySymbols(obj));
        console.log('-- keys: ', Object.keys(obj));

    }
/***
 * 
 -- for-in: a
 -- hasOwnProperty:  a
 -- for-in: b
 -- hasOwnProperty:  b
 -- for-in: c
 -- hasOwnProperty:  c
 -- for-in: f
 -- hasOwnProperty:  f
 -- for-in: d
 -- getOwnPropertyNames:  (5) ["a", "b", "c", "e", "f"]
 -- getOwnPropertyDescriptor:  undefined (可获取对象属性的具体配置,总共是6个)
 -- getOwnPropertySymbols:  (2) [Symbol(g), Symbol(h)]
 -- keys:  (4) ["a", "b", "c", "f"]
 */

8、对象声明/对象赋值

/**
 * 对象声明
 * 首选 {}
 * 
 * 对象赋值
 * 首选 对象内赋值
 */
function getKey(flag) {
    return `uniqued key ${flag}`;
}
const obj = {
    id: 5,
    name: 'San Francisco',
    [getKey('enabled')]: true,  // 可变key提前声明
};

9、对象扩展

/**
 * 
 * 对象 扩展 
 * 
 * object assign 对象扩展
 * 每次执行 assign 
 * 事实上是对 object 原来对象的扩展然后并返回这个新的对象,🐘
 * 原理的对象被修改
 * 
 * */
const row = {
    display: 'inline-block',
    height: '50px',
    lineHeight: '50px',
}
const rowLeft = Object.assign(row, {
    color: 'rgba(0,0,0,.4)'
});
const rowRight = Object.assign(row, {
    color: 'rgba(0,0,0,.6)'
});

console.log(rowLeft, rowRight, '同时都被修改为最新的assign值');

到此这篇关于JavaScript获取对象key的几种方法和区别的文章就介绍到这了,更多相关JS获取对象key内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

JavaScript获取对象key的几种方法和区别的更多相关文章

  1. 【swift】15-0520 字典

    字典.count()字典.isEmpty字典[key]=value//增加一个值字典[key]=value2//修改一个值字典.updateValue//返回一个optional类型的值,需要更新的key不存在则更新失败,所以一般用if语句进行判断,if字典.updateValue{println}else{println}用binding显示出值。iflet常量=字典.updateValue{println(“”)}else{println(“”)}显示字典中所有的键值对:forin字典{println

  2. Swift-字典

  3. Swift 字典的常用方法

    /***要正确使用字典,也需要一些条件*1,字典键值对的键和值的类型必须明确,可以直接指定,也可以类似数组直接赋值由编译器自动识别*2,字典必须要初始化*3,键的类型必须是可以被哈希Hashable的**///字典的几种声明方式常用方法见下方代码苹果开发群:414319235欢迎加入欢迎讨论

  4. swift 2.0 字典

    //6.字典---的特点:无序性这个无序性是指字典内部存放的元素顺序跟我们定义时写的元素顺序是没有对应的,但是实质上,字典内部的元素是有序的。),至于为什么,之后会有专门的解说。//并且,字典的key值是唯一的,不能重复。

  5. swift * 字典/Dictionary初始化以及增、删、改、遍历

    学习笔记1、字典初始化vardict=[:]//初始化无类型空字典dict=["1":"aaa","2":"bbb"]print(dict)dict=[1:"1","2":2]//key和value都是不定类型的print(dict)letdict2:Dictionary=["1":111,"2":222]//限定键值类型print(dict2)letdict3:[Stri

  6. Swift基础学习2

    1.数组的创建及操作2.Range的创建3.Dictionary的创建及操作4.func5.闭包

  7. swift dictionary 是否存在key

  8. 是否应该使用可选映射?

    和之前使用可选映射的功能并无区别,但是意义上更加清晰了。略微有点可选映射能够有效避免可能发生的错误吗?有可能,但是也可能带来问题可选映射能够更好地表达编程的思路吗?对于我来说不,但是有可能让那些理解「映射」和「可选值」的人来说是使用可选映射维护代码能变简单吗?

  9. Swift NSKeyedArchiver

    1.在带键的归档中,每个归档字段都有一个key值,解归档时key值要与归档时key值匹配2.带键归档可以一次存储多个对象3.归档的对象是Foundation框架中的对象4.归档和解归档其中任意对象都需要归档和解归档整个文件5.归档后的文件是加密的,所以归档文件的扩展名可以随意取

  10. swift中dictionary字典的使用

    Swift字典用来存储无序的相同类型数据的集合,Swift字典会强制检测元素的类型,如果类型不同则会报错。和数组中的数据项不同,字典中的数据项并没有具体顺序。Swift字典的key没有类型限制可以是整型或字符串,但必须是唯一的。这意味着在创建字典后,可以通过添加、删除、修改的方式改变字典里的项目。如果将一个字典赋值给常量,字典就不可修改,并且字典的大小和内容都不可以修改。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部