JS 对象基本用法

145 阅读2分钟

1 声明对象的两种语法

1.1 语法

第一种;
let obj = { name: "frank", age: 18 };
第二种;
let obj = new Object({ name: "frank" });
匿名对象:
console.log({'name':"frank",age:18})

注意:

{foo : 'a'}

不是对象

1.2 属性名的写法

  1. 键名(属性名)永远是字符串,不是标识符,可以包含任意字符
  2. 引号可以省略,省略之后只能用标识符的写法(全数字除外)
  3. 就算引号省略了,键名也是字符串。
  4. 当有空格和特殊字符时必须加引号。
  5. 没有数字键名和数字下标,因为浏览器会自动将数字转换为字符串。

1.3 变量作为属性名

如果想用变量的值做属性名,要用[]将属性名括起来

let a = 'xxx'
let obj = {[a] : 111}

对比

  1. 不加[]的属性名会自动变成字符串
  2. 加了[]则会当做变量求值
  3. 如果值不是字符串,则会尝试变为字符串

2 如何删除对象的属性

2.1 语法

delete obj.xxxdelete obj['xxx']

2.2 查看某个属性是否为该对象的属性

方法一
'name' in obj // false 无法区分该属性是自己的还是原型上共有的
方法二
obj.hasOwnProperty('name') // false

2.3 注意

obj.xxx === undefined 不能判断'xxx'是否为obj的属性,如果要判断:'xxx' in obj && obj.xxx === undefined

反例:

var obj = {}
var obj2 = {x: undefined}
obj.x === undefined // true
obj2.x === undefined // true

3. 如何查看对象的属性

3.1 查看对象自身所有属性

Object.keys(obj) // 查看keys
Object.values(obj) // 查看values
Object.entries(obj) // 查看keys和values

3.2 查看对象自身+共有属性

console.dir(obj) // 通过目录的形式查看自身的属性

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

'name' in obj // 不能判断出这个属性是自身属性还是共有属性
obj,hasOwnProperty('name') // true 代表是自身属性

3.4 两种方法查看属性值

中括号语法:obj['key']
点语法:obj.key

注意

obj[key] // 不加''就是变量,变量key的值不确定
obj[console.log('name')] // undefined 因为.log返回undefined

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

4.1 直接赋值

let obj = {name: 'frank'}
改:
obj.name = 'an'
obj['name'] = 'an'
obj['na' + 'me'] = 'an'
或者:
let key = 'name'
obj[key] = 'an'

4.2 批量赋值

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

4.3 修改共有属性

  1. 无法通过自身修改或增加共有属性
  2. 若要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' // 不推荐
Object.prototype.toString = 'xxx'

obj.__proto__ === window.Object.prototype

4.4 修改原型

obj.__proto__ = null // 不推荐
let obj = Object.create(common) // 属性在原型上