JS对象基本用法

379 阅读2分钟

一、声明对象的两种语法

  • 写法
1. let obj = {'name': 'frank', 'age': 18}
2. let obj = new Object({'name': 'frank', 'age': 18})

第1种为简单写法,和代码块不一样,但写法相似。
第2种为正规写法。

  • 细节 键名必须是字符串,不是标识符,可以包含任意字符。
    引号可以省略,省略之后只能写标识符。
    就算引号省略了,键名也还是字符串。(重要)

二、如何删除对象属性

  • 删除属性 delete obj.xxxdelete obj['xxx']
    即可删除obj的xxx属性
    注:要区分[属性值为undefined] 和 [不含属性名]

  • 不含属性名 'xxx' in obj && obj.xxx === undefined

  • 含有属性名,但是值为undefined 'xxx' in obj && obj.xxx === undefined

  • 另外,obj.xxx === undefined 不能判断'XXX'是否为obj的属性。
    如下图所示:

xxx_undefined.png


三、如何查看对象的属性

  • 查看自身所有 属性名 / 属性值 / 属性名和值: Object.keys(obj) / Object.value(obj) / Object.entries(obj)
  • 查看自身属性和共有属性:
  1. console.dir(obj)
  2. 或者自己依次用 Object.keys 打印出 obj.__proto__
  • 判断一个属性是自身的还是共有的: obj.hasOwnProperty('toString')
  • 查看属性写法 两种方法
  1. 中括号语法:obj['key']
  2. 点语法:boj.key 优先使用中括号语法,点语法会误导新人认为key不是字符串。等熟练区分了再改用点语法。
    obj.name等价于obj['name']
    obj.name不等价于obj[name]
    在这里name是字符串,而不是变量。

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

  • 直接赋值
let obj = {name: 'frank' } // name是字符串
obj.name = 'frank' // name是字符串
obj['name'] = 'frank' // name是字符串

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'})

  • 改/增 已有属性则改,没有属性则增

改自身 obj['name'] = 'jack'
批量改自身 Object.assign(obj, {age: 18, ...})
改共有属性 obj.__proto__['toString'] = 'xxx'
改共有属性 Object.prototype['toString'] = 'xxx'
改原型 obj.__proto__ = common
改原型 let obj = Object.create(common)
注:所有__proto__代码都是强烈不推荐写的

一些区别

  • 例子:'name' in objobj.hasOwnProperty('name') 的区别 in是查看是否是拥有属性
    hasOwnProperty是判断一个属性是自身(true)的还是共有(false)的。

hasownproperty.png

如图所示,'name' 是自身属性,'toString' 是共有属性不是自身属性。


©转载声明