声明对象的两种语法

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])正确