美文网首页
Symbol作为属性名的遍历

Symbol作为属性名的遍历

作者: 祈求者 | 来源:发表于2018-03-29 01:36 被阅读45次

    Symbol作为属性名。该属性不会出现在for...in ,for...of 循环中,也不会被Object.keys() 和
    Object.getOwnPropertyNames() 返回。但是它不是私有属性,有一个方法Object.getOwnPropertySymbols()可以获取指定对象的所有Symbol属性名。

    Object.getOwnPropertySymbols()方法返回一个数组,数组每项是当前对象的所有用作属性名的Symbol值。

    var obj = {};
    var a = Symbol('a');
    var b = Symbol('b');
    
    obj[a] = 'kon';
    obj[b] = 'chan';
    
    var objectSymbols = Object.getOwnProperySymbols(obj);
    
    objectSymbols
    //[Symbol(a),Symbol(b)]
    
    

    有一个新的API ------ Reflect.ownKeys方法可以返回所有类型的键名

    let obj = {
      [Symbol('my_key')]:1,
      enum:2,
      nonEnum:3
    };
    
    Reflect.ownKeys(obj)
    //[Symbol(my_key),'enum','nonEnum']
    
    

    补充Object.keys() 和Object.getOwnPropertyNames()方法

    *Object.keys()
    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。
    *Object.getOwnPropertyNames()
    Object.getOwnPropertyNames() 返回一个数组,该数组对元素是 obj自身拥有的枚举或不可枚举属性名称字符串。 数组中枚举属性的顺序与通过 for...in 循环(或 Object.keys)迭代该对象属性时一致。数组中不可枚举属性的顺序未定义。

    摘录自:https://developer.mozilla.org/zh-CN/docs/Web

    相关文章

      网友评论

          本文标题:Symbol作为属性名的遍历

          本文链接:https://www.haomeiwen.com/subject/hjepcftx.html