es5对象的键是字符串类型,对象的属性名都是字符串,而字符串是有可能会重复的。如果重复的话就会产生冲突。在ES2015版本中对象的键类型还可以是Symbol。
访问对象属性
const obj = {
info: 'wakaka',
inner: {
a: 10,
b: 20
},
arr: [1, 2],
sayHi: (name) => {
console.log(`hi,${name}`)
}
}
// 用 dot(点 .) 的方式访问
console.log(obj.info) // wakaka
console.log(obj.inner) // {"a":10,"b":20}
console.log(obj.arr) // [1,2]
obj.sayHi('dengke') // hi,dengke
// 用 [] 的方式访问
console.log(obj['info']) // wakaka
console.log(obj['inner']) // {"a":10,"b":20}
console.log(obj['arr']) // [1,2]
obj['sayHi']('dengke') // hi,dengke
指定默认值
如果要访问的对象不存在,可以使用 逻辑运算符 || 指定默认值:
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
console.log(obj.age || 18) // 18
动态属性
const dynamic = 'flavour';
var item = {
name: 'Coke',
[dynamic]: 'Cherry'
}
console.log(item);
// { name: "Coke", flavour: "Cherry" }
属性不存在
当对象上没有这个键的时候,不会报错,而是赋值undefined
javascript 运算(操作)符
遍历对象
var json = {
j: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
for (var j in json){
console.log(j+":"+json.j); //获取json的属性j的值
}
for (var j in json){
console.log(j+':'+json[j]); //遍历json的所有属性
}
深拷贝
const obj2 = JOSN.parse(JSON.stringify(obj1))