对象字面量
1)属性的简洁表示法:ES6允许对象的属性直接写变量,这时候属性名是变量名,属性值是变量值
对象中的方法也可以简写
const name = "张三"
var person = {name:name}
console.log(person)//{name:"张三"}
person = {name}
console.log(person)//{name:"张三"}
person = {myfunction(){
console.log(name)}}
person.myfunction()//"张三"
2)属性名表达式:ES6允许用表达式作为属性名,但是一定要将表达式放在方括号内
const obj = {
["张"+"三"](){
return "李四"
}
}
obj.张三()
//"李四"
对象的扩展运算符
1)基本用法
let person = {name: "张三", neb:"李四"}
let all = { ...person }
console.log(all)
//{name: "张三", neb:"李四"}
2)合并两个对象
let p1 = {age: 15,hobby:"draw"}
let p2 = {name: "Lmy",age:12}
let person = {...p2, ...p1,...age:21}
console.log(person)
//{name: "Lmy",age:21,hobby:"draw"}
注意
1.自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉
2.自定义的属性在拓展运算度前面,则变成设置新对象默认属性值
(正常运行顺序,后面覆盖前面)
3.拓展运算符后面是空对象,没有任何效果也不会报错。
let a = {...{}, a: 1, b: 2}
console.log(a)
//{a: 1, b: 2}
4.拓展运算符后面是null或者undefined,没有效果也不会报错
let b = {...null, ...undefined, a: 1, b: 2}
console.log(b)
//{a: 1, b: 2}
对象的方法
Object.is(value1, value2):用来比较两个值是否严格相等,与(===)基本类似
Object.is("q","q"); // true
Object.is(1,1); // true
Object.is([1],[1]); // false
Object.is({q:1},{q:1}); // false
与 ===的区别
//一是+0不等于-0
Object.is(+0,-0); //false
+0 === -0 //true
//二是NaN等于本身
Object.is(NaN,NaN); //true
NaN === NaN //false