一、声明对象的两种语法
第一种
let obj = {'name': 'frank', 'age': 18}
第二种
let obj = new Object({'name': 'frank'})
注意一个细节:
对象的key一直、永远都是字符串!键名是字符串!键名是字符串!
二、如何删除对象的属性
detele obj.xxx 或者 delete obj['xxx']
obj.xxx=undefined;并没有删除name这个属性名 只不过是把name的属性值改为undefined;而delete obj.xxx删除的是属性名(删除了属性名,自然就没有属性值了)
obj.xxx=undefined 不能用于判断 xxx是否存在于对象中
三、如何查看对象的属性
3.1 查看所有属性
3.1.1 查看自身所有属性
查看属性名
Object.keys(obj)
查看属性值
Object.values(obj)
3.1.2 查看自身+共有属性
console.dir(obj)
3.1.3 判断一个属性是自身的还有共有的
obj.hasOwnProperty('toString')
3.1.4 key in obj 和 obj.hasOwnProperty('toString')的区别
key in obj 不能判断出这个属性是自身属性还是共有属性
obj.hasOwnProperty('key') 可以判断出这个属性是自身属性还是共有属性
使用示例:
3.2 查看单独一个属性
obj.name 等价于 obj["name"] 对象的键名都是字符串!
obj[变量名]
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])
答案是2
四、如何修改或者增加对象的属性
改自身 obj['name'] = 'bob'
批量改自己 Object.assign(obj, {age: 18})
改原型:let obj = Object.create(common)
直接赋值
let obj = {name: 'frank '}l/ name是字符串
obj.name = 'frank'// name是字符串
obj[ 'name ' ] = 'frank '
obj[name] = 'frank'//错,因name 值不确定
obj['na ' +'me ' ] = 'frank '
let key = 'name ' ; obj[key] = 'frank '
let key = 'name ' ; obj.key = 'frank'//错
因为obj.key 等价于obj[ ' key ']
批量赋值
Object.assign(obj, {age: 18,gender: 'man'})
如何修改原型
不推荐使用__proto__
let obj = {name : 'frank ' }
let obj2 = {name: 'jack '}
let common = {kind: " human'}
obj._proto_ =common
obj2._proto_ = common
推荐使用Object.create
let obj = Object.create ( common)
obj.name = 'frank '
let obj2 = Object.create ( common)
obj2.name = 'jack '
五、总结
5.1 删
delete obj['name']
'name' in obj // false
obj.hasOwnProperty('name') // false
5.2 查
Object.keys(obj)
console.dir(obj)
obj['name']
obj.name // 记住这里的 name 是字符串 ,等价于obj['name']
obj[name] // 记住这里的 name 是变量
5.3 改
改自身 obj['name'] = 'jack'
批量改自身 Object.assign(obj, {age:18, ...})
改原型 let obj = Object.create(common)