JS 对象基本用法

130 阅读2分钟

如何声明对象

// 简写方式
let obj = {'name':'frank','age':18}

// 标准方式
let obj = new Object({'name':'frank'})

如何删除对象的属性

delete obj.xxx
delete obj['xxx']

上面代码删除的是属性名和属性值。

如果只想删除属性值,保留属性名,直接重设属性值就好

obj.name = undefined

如何查看对象的属性

查看属性就是读属性

查看对象的属性:

// 中括号语法
obj['key']

// 点语法
obj.key

// 坑新人语法
obj[key] //key不是字符串,而是变量

注意不要弄混下面的

obj.name === obj[‘name’]
obj.name !== obj[name]

// 这里的 name 应该是字符串,而不是变量
let name = ‘frank’
obj[name] === obj[‘frank’]

obj.name !== obj[‘name’]

下面是查看所有属性的方法

Object.keys(obj) // 查看key值
Object.values(obj) // 查看value值
console.dir(obj) // 查看自身属性+共有属性
obj.__proto__ // 打印出obj.__proto__这个隐藏属性,但是不推荐,因为不规范

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

  • 直接赋值
let obj = {name:'frank'}
obj.name = 'frank'  //方式1
obj['name'] = 'frank' //方式2
obj['na'+'me'] = 'frank' //方式3

let key = 'name'
obj[key] = 'frank'//方式4
  • 批量赋值
Object.assign(obj,{age:18,gender:'man'})
  • 修改或增加共有属性 注意:修改或增加的时候只能写自己的属性,无法通过自身修改或增加共有属性

要修改或增加原型上的属性,就修改prototype

obj.__proto__.toString='xxx'// 不推荐使用
Object.pototype.toString='xxx'

一般来说,不要修改原型,会引起很多问题

  • 如何用自己的属性来作为原型
    • 先说不推荐的方式
    let obj = {name:'frank'}
    let obj2 = {name:'jack'}
    let common = {kind:'human'}
    obj.__proto__ = common
    obj2.__proto__ = common
    
    • 推荐的方式
    let obj = Object.create(common) //以common对象为原型创建obj
    obj.name = 'frank'
    

Q&A

‘name’ in obj和obj.hasOwnProperty(‘name’) 有什么区别?

  • ‘name’ in obj ,可以判断obj对象里是否有name这个属性,会在所有属性中找,包括原型属性和自身属性。
  • obj.hasOwnProperty(‘name’) 只会在自身的属性中找name。