JS 对象基本用法

123 阅读2分钟

对象的语法

写法

let obj = { 'name': 'frank', 'age': 18 }
let obj = new Object({'name': 'frank'})
console.log({ 'name': 'frank, 'age': 18 })
  • 就算引号省略了,键名也还是字符串
  • 每个 key 都是对象的属性
  • 每个 value 都是对象的属性
  • Object.keys(obj) 可以得到 obj 的所有 key

如何用变量做属性名

let p1 = 'name'
let obj = { p1 : 'frank'} //这样写,属性名为 'p1'
let obj = { [p1] : 'frank' } //这样写,属性名为 'name'

对比

  • 不加 [ ] 的属性名会自动变成字符串
  • 加了 [ ] 则会当做变量求值
  • 值如果不是字符串,则会自动变成字符串

对象的隐藏属性

  • JS 中每一个对象都有一个隐藏属性
  • 这个隐藏属性储存着其共有属性组成的对象的地址
  • 这个共有属性组成的对象叫做原型
  • 也就是说,隐藏属性储存着原型的地址

删除属性

写法:
delete obj.xxx 或 delete obj['xxx']

查看属性是否存在

'xxx' in obj
true 在;false:不在

含有属性名,但是值为 undefined

'xxx' in obj && obj.xxx === undefined

  • 注意:obj.xxx === undefined 不能断定 'xxx' 是否为 obj 的属性

查看属性

两种方法查看属性

中括号语法:obj['key'] (优先使用该语法)
点语法:obj.key

查看自身所有属性

Object.keys(obj)
Object.value(obj) 查值
Object.entries(obj)键、值都查

查自身+共有属性

console.dir(obj2)
obj2.__proto__ //不推荐

判断一个属性是自身的还是共有的

obj.hasOwnProperty('toString')

true:自身的 ,false:共有的

原型

  • 每个对象都有原型
  • 对象的原型也是对象

如何修改或增加对象的属性

直接赋值

let obj = {name: 'frank'} // name 是字符串
obj.name = 'frank' // name 是字符串

批量赋值

Object.assign(obj, {age: 18, gender: 'man'})

修改隐藏属性

let obj = Object.create(common)
obj.name = 'frank'
  • 要改就一开始就改,别后来再改 另外也可使用__proto__但不推荐使用

'name' in obj和obj.hasOwnProperty('name') 的区别

  • 'name' in obj查看属性name是否在obj里,但是它无法区分这个属性是自身特有的还是共有的。

  • obj.hasOwnProperty('name')用来检测name是否为obj特有的属性还是共有的属性,如果是特有的返回true,如果是共有的则返回false


资料参考:饥人谷