对象的扩展
对象可以省略v
对象的表达是k:v,当对象的k和v相同的时候,可以省略v
var a = 1; var b = 2; var c = 3; var obj = { a: a, b: b, c: c } //等价于 var obj={ a, b, c }
所以,kv一致省略v
例子
注意的是省略v的时候k不能加引号
var obj = {"result"};
这样写是错误的,不能加引号
对象的方法简写
对象的方法也是可以简写的
这两种方法是等价的
方法的name属性表示的是方法名称
Object.keys和Object.values方法
Object.keys方法返回的是对象的键名数组;
Object.values方法返回的是对象的值数组
Object.is方法
判断两个值是否相等的时候使用的是==或者===,它们都有自己的缺点,前者会自动转换数据类型,后者的NaN不自等,还有+0会等于-0,JavaScript之前缺少一种实际的应用场景,就应该是如果值相等就会返回true的结果
对于引用类型值还是按照是否是同一个地址来判断
对象、数组,方法是引用类型值,引用类型值的特点就是在内存中不是同一个地址,所以不自等。
Object.assign方法
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象方法用于对象的合并,将对象的可枚举属性复制到目标对象
上面的结果是将obj2和obj3合并到了obj1的上面,此时obj1的对象本质上已经被改变了,如果不希望改变结果可以用下面的代码示例
第一个对象就是合并源对象,所以Object.assign()可以有无限个参数,但是只会更改到第一个参数对象中
undefined和null无法转成对象,如果它们作为参数,就会报错。
Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
对象中的动态键-方括号
当对象的键名是一个变量的时候,在{}中可以用[]来包裹这个变量成为键的名字
例子
当sex=男生时: 当sex=女生时:
省略v的对象写法不能和动态键一起使用
这样写是错误的
var text = 'a'; var text2 = 'b'; var text3= { [text] };
这种写法才是对的
var text= 'a'; var text2= { [text]: 'b'};
for…in方法
循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。