关于对象的一些问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于对象的一些问题相关的知识,希望对你有一定的参考价值。

      对象的属性有属性描述符的对象,即使没有直接给出。

var obj = {
       name: ‘objcet‘
};

Objcet.getOwnpropertyDescriptor(obj, "name"); // 为:{value: "objcet", configurable: true, writable: true, enumerable: true}

//直接给出
Object.defineProperty(obj, "tool", {
value: "tool"
});

Objcet.getOwnpropertyDescriptor(obj, "tool"); // 为:{value: "tool", configurable: false, writable: false, enumerable: false}


   这里默认含有一个对象描述符对象。且各项默认为true。我们可以对其进行多项操作。若我直接给出呢?这是若不在对象中明确给出,那么就会默认为false。

   问题是这四个值重要吗?

       value可以直接修改值,writable决定是否可以写入,enumerable决定for in 语句、Objcet.keys()、o.propertyIsEnumerable(),configurable决定是否可以删除属性值以及是否可以配置。

   问题2:浅复制下不会对原有的描述符的属性进行复制,也就是说其中的值默认为true。

   访问器属性:它们与value、writable是冲突的,只能给出一种形式。

var obj = {
       get value () {
        return this._value;  
       },
       set value (v) {
        this._value = v; 
       }
};
//这是的value是不可枚举、不可配置的。_value是可以枚举配置的。

  枚举

       for...in 语句会以[[prototype]]链的方式枚举但枚举的是属性名。

var arr = [1, 2, 3];
for (var i in arr) {
     console.log(i);
}
//值为:"0"、"1"、"2"

  另:Object.keys()、Objcet.getOwnPropertyNames()不会查找原型链。

遍历:

     数组内置@@iterator从而可以遍历得到值,对于一个对象可以认为建立@@iteraror来与for of 语句搭配使用。下面是一个例子。

var random = {
        [Symbol.iterator]: function () {
                return {
                      next: function () {
                             return {
                                    value: Math.random()
                             }; 
                      }
                };
        }
};

 

以上是关于关于对象的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段中的 JSON 响应中的对象获取数据

java大对象存取的简单实现的代码

关于代码片段的时间复杂度

markdown [mybatis参考]关于mybatis #mybatis的一些片段

几个关于js数组方法reduce的经典片段

关于poc脚本的一些问题