我理解的JS对象

62 阅读2分钟

一、声明对象的两种语法

第一种
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: 18gender: '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)