声明对象的两种语法
let obj1 = {'name' : 'Tim' , 'age': 18}
let obj2 = new Object({'name': 'Tim', 'age': 18})
PS : 键名是字符串,不是标识符,可以包含任意字符
引号可省略,省略后只能写标识符(键名仍是字符串)
属性名:每个key都是对象的属性名(property)
属性值:每个value都是对象的属性值
所有属性名都会自动变成字符串
如何删除对象的属性
delete obj.xxx
delete obj['xxx']
删除obj的xxx属性
ps:请区分属性值为undefined和不含属性名
不含属性名:'xxx' in obj === false
含属性名但是属性值为undefined :
如何查看对象的属性
查看自身所有属性
Object.kets(obj)
查看自身+共有属性
console.dir(obj)
或者用Object.keyts 打印出obj.__proto__
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
如何修改或增加对象的属性
直接赋值
let obj = {name: 'Tim'} //name是字符串
obj.name = 'Tim'
obj['name']='Tim'
obj[name]='Tim' //错, name值不确定
obj['na'+'me']='Tim'
let key = 'name'; obj[key]='Tim'
let key = 'name'; obj.key='Tim' //错 因为 obj.key === obj['key']
批量赋值
object.assign(obj, {age:18 , gender :'man' })
'name' in obj和obj.hasOwnProperty('name') 的区别
前者可以是自身属性也可以是共有属性,后者只能是自身属性
重点
obj.name 等价于 obj['name'],不等价于obj[name]
因为此处的name是字符串而不是变量
let name = 'Tim'
obj[name]=== obj['Tim']
而不是 obj['name']或者obj.name
题目
代码
let list = ['name', 'age', 'gender']
let person = {
name:'frank', age:18, gender:'man'}
for(let i = 0; i < list.length; i++){
let name = list[i]
console.log(person__???__)
}
使得 person 的所有属性被打印出来
选项
1、console.log(person.name)
2、console.log(person[name])正确