美文网首页
属性的类型

属性的类型

作者: ticktackkk | 来源:发表于2020-11-06 14:02 被阅读0次

    数据的属性

    • [Configurable] 是否可以删除并且重新定义
    • [ Enumerable] 是否可以通过 for in 循环返回
    • [Writeable] 是否可以被修改
    • [Value] 属性的实际值

    修改属性的默认特性

    • Object.defineProperty()
      三个参数
      分别为 添加属性的对象,属性的名称,和描述符对象
          let person={}
          Object.defineProperty(person,'name',{
              value:123,
          })
          console.log(person);
    

    访问器属性

    • [Configurable] 是否可以删除并且重新定义
    • [Enumerable] 是否可以通过 for in 循环返回
    • [Get] 获取函数,在读取属性的时候调用,默认值为undefined
    • [Set] 设置函数,在写入属性的时候调用,默认值为undefined
    另外访问器属性不能被直接调用,必须用Object.defineProperty()
          let book = {
            year_: 2017,
            editon: 1,
          };
          Object.defineProperty(book, "year", {
            get(e) {
              return this.year_;
            },
            set(newValue) {
              if (newValue > 2017) {
                this.year_ = newValue;
                this.editon += newValue - 2017;
              }
            },
          });
          book.year = 2018;
          console.log(book);
    
    定义多个属性Object.defineProperties

    这段代码定义了两个数据属性year_和edtion还有一个访问器属性year

          let book = {
            year_: 2017,
            editon: 1,
          };
          Object.defineProperties(book, {
            year_: {
              Value: 2020,
            },
            editon: {
              value: 1,
            },
            year: {
              get() {
                return this.year_;
              },
              set(newValue) {
                if (newValue > 2017) {
                  this.year_ = newValue;
                  this.editon += newValue - 2017;
                }
              },
            },
          });
          book.year = 2018;
          console.log(book);
    
    读取属性的特性Object.getOwnPropertyDescriptor
          console.log(Object.getOwnPropertyDescriptor(book,'year'));
         // configurable: false
         // enumerable: false
         // get: ƒ get()
         // set: ƒ set(newValue)
         //__proto__: Object
    
    合并类型Object.assign()(浅拷贝)
    • 弊端:如果源对象属性值改变,则源对象的对应的值也会改变
      这个方法接收一个目标对象和一个或者多个目标对象作为参数
      并且是将源对象可枚举和自有属性
          desc = {};
          src = {
            id: "src",
          };
          aaa = {
            ids: "aaa",
          };
          result = Object.assign(desc, src, aaa);
          console.log(result);
    
    

    如果多个对象都有相同的属性,则使用最后一个赋值的值

        a = {
            value: 1,
          };
          b = {
            value: 2,
          };
          Object.assign(a, b);
          console.log(a);//value:2
    
    对象相等及标识判定

    Object.is()

         console.log(Object.is(true,1));false
         console.log(Object.is({},{})); false
         console.log(Object.is("2",2)); false
         console.log(Object.is(NaN,NaN)); true
         console.log(Object.is(+0,-0)); false
         console.log(Object.is(-0,0)); false
         console.log(Object.is(+0,0)); true
    

    相关文章

      网友评论

          本文标题:属性的类型

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