1)对象字面量
(1)属性的简洁表示法: ES6允许对象的属性直接写变量,这时候属性名是变量名,属性值是变量值。
var name = "xiaozhang"
var age = 21
var obj = {name,age}
console.log(obj);
(2)对象的方法可以简写:
var obj = {
name:"xiaozhang",
say() {
console.log(this.name);
}
}
obj.say()
(3) 属性名表达式: ES6允许用表达式作为属性名,但是一定要将表达式放在方括号内。
var obj = {
["abc"]:10,
["abc"+1]:20,
[Symbol(1)]:30,
[false]:40,
[{name:"xiaozhang"}]:50
}
console.log(obj)
注意:属性的简洁表示法和属性名表达式不能同时使用,否则会报错。
2)对象的扩展运算符
拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象。
var obj1 = {
name:"xiaozhang",
}
var obj2 = {
age:21
}
var obj3 = {...obj1,...obj2}
console.log(obj3)
自定义的属性和拓展运算符对象里面属性的相同的时候:
(1)自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。
var obj1 = {
name:"xiaozhang",
age:21
}
var obj2 = {...obj1,age:22}
console.log(obj2)
(2) 自定义的属性在拓展运算度前面,则变成设置新对象默认属性值。
var obj1 = {
name:"xiaozhang",
age:21
}
var obj2 = {name:"xiaoliao",...obj1}
console.log(obj2)
(3)拓展运算符后面是空对象,没有任何效果也不会报错。
var obj1 = {
}
var obj2 = {...obj1}
console.log(obj2)
(4) 拓展运算符后面是null或者undefined,没有效果也不会报错。
var obj = {...null,...undefined}
console.log(obj)
3)对象的新静态方法
Object.is(value1, value2):用来比较两个值是否严格相等,与(===)基本类似。
var a = 10
var b = "10"
var re = Object.is(a,b)
console.log(re);
注意:
(1) 用Object.is方法比较+0和-0,结果为false;而用===比较却为true.
var re = Object.is(+0,-0)
console.log(re)
console.log(+0 === -0);
(2) 用Object.is方法比较NaN和NaN,结果为true;而用===比较却为false.
var re = Object.is(NaN,NaN)
console.log(re)
console.log(NaN === NaN);