ES语言--two

展开运算符
 

const arr = [3, 6, 1, 7, 2];
// 对数组的展开
Math.max(...arr); // 相当于:Math.max(3, 6, 1, 7, 2)
const o1 = {
  a: 1, 
  b: 2,
}
const o2 = {
  a: 3, 
  c: 4,
}
// 对对象的展开
const o3 = {
  ...o1,
  ...o2
}
/*
	o3:{
		a: 3,
		b: 2,
		c: 4
	}
*/


 

const arr = [2,3,4];
const arr2 = [1, ...arr, 5]; // [1,2,3,4,5]


属性描述符

 

const user = {
  name: 'monica',
  age: 17
}

{
  // 属性 name 的描述符
  name: {
    value: 'monica',
    configurable: true, // 该属性的描述符是否可以被重新定义
    enumerable: true, // 该属性是否允许被遍历,会影响for-in循环
    writable: true // 该属性是否允许被修改
  },
  // 属性 age 的描述符
  age: {
    value: 'monica',
    configurable: true, // 该属性的描述符是否可以被重新定义
    enumerable: true, // 该属性是否允许被遍历,会影响for-in循环
    writable: true // 该属性是否允许被修改
  },
}


 

ES5提供了一系列的API,针对属性描述符进行操作

  1. Object.getOwnPropertyDescriptor(obj, propertyName)

    该方法用于获取一个属性的描述符
     

    const user = {
      name: 'monica',
      age: 17
    }
    
    Object.getOwnPropertyDescriptor(user, 'name');
    /*
    {
        value: 'monica',
        configurable: true, // 该属性的描述符是否可以被重新定义
        enumerable: true, // 该属性是否允许被遍历,会影响for-in循环
        writable: true // 该属性是否允许被修改
    }
    */


    2.Object.defineProperty(obj, propertyName, descriptor)

    该方法用于定义某个属性的描述符
     

    const user = {
      name: 'monica',
      age: 17
    };
    
    Object.defineProperty(obj, 'name', {
      value: '张张', // 将其值进行修改
      enumerable: false, // 让该属性不能被遍历
      writable: false // 让该属性无法被重新赋值
    })

    getter 和 setter

    属性描述符中有两个特殊的配置,分别为getset,通过它们,可以把属性的取值和赋值变为方法调用
     

    const obj = {};
    Object.defineProperty(obj, 'a', {
      get(){ // 读取属性a时,得到的是该方法的返回值
        return 1;
      },
      set(val){ // 设置属性a时,会把值传入val,调用该方法
        console.log(val)
      }
    })
    
    console.log(obj.a); // 输出:1
    obj.a = 3; // 输出:3
    console.log(obj.a); // 输出:1


    键值对
     

    Object.keys(obj):获取对象的属性名组成的数组

    Object.values(obj):获取对象的值组成的数组

    Object.entries(obj):获取对象属性名和属性值组成的数组

    Object.fromEntries(entries):将属性名和属性值的数组转换为对象

    冻结
    使用Object.freeze(obj)可以冻结一个对象,该对象的所有属性均不可更改
     

    const obj = {
      a: 1,
      b: {
        c: 3,
      },
    };
    
    Object.freeze(obj); //  冻结对象obj
    
    obj.a = 2; // 不报错,代码无效
    obj.k = 4; // 不报错,代码无效
    delete obj.a; // 不报错,代码无效
    obj.b = 5; // 不报错,代码无效
    
    obj.b.c = 5; // b对象没有被冻结,有效
    
    console.log(obj); // {a:1, b:{ c: 5 } }

    可以使用Object.isFrozen来判断一个对象是否被冻结

    相同性判定
    Object.is方法,可以判断两个值是否相同,它和===的功能基本一致,区别在于:
    -   NaN和NaN相等
    --   +0和-0不相等
     

    Object.is(1, 2); // false
    Object.is("1", 1); // false
    Object.is(NaN, NaN); // true
    Object.is(+0, -0); // false


     Set
    es6新增 用于保存唯一值的序列

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值