JS对象基本用法

206 阅读2分钟

声明对象的两种语法

let obj = {'key1': 'value1', 'key2':'value2'}

let obj = new Object({'key1':'value1'})

细节: 键名是字符串,不是标识符,可以包含任意字符。引号可以省略,但省略后key只能按标识符格式写,但注意key仍为字符串。

一些奇怪的属性名: 所有属性名都会自动变为字符串:

let obj = {
            1: 'a',
            3.2: 'b',
            1e2: true,
            1e-2: true,
            .234: true,
            0xFF: true,
            };
 object.keys(obj)=>["1", "3.2", "100","0.01", "0.234", "255"]

如何以变量作为属性名:

let p1 = 'name'
let obj = {
    [p1]: 'frank'
    }

若用

let obj = {
    p1: 'frank'
}

则属性名为p1,不加[]的属性名会自动变成字符串,加[]则会当作变量求值,值若不是字符串则会自动变成字符串。

对象的隐藏属性

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

原型: 每个对象都有原型,原型中储存着对象的共有属性。obj的原型就是一个对象,obj.__proto__存着这个对象的地址,这个对象中有toString/.construtor/.valueof等属性。

对象的原型也是对象,因此对象的原型也有原型。obj = {}的原型即为所有对象的原型,次原型包含所有对象的共有属性,是对象的根。原型的原型为null。

删除对象属性

delete obj.xxx
delete obj['xxx']

注意:undefined只是空置属性值,delete是将属性值和属性名都删除

'xxx' in obj

可查看属性值是否删除,若返回为false则表示对象中没有该属性,删除成功。

注意:不能用 obj.xxx===undefined来判断'xxx'是否为obj的属性。

查看对象属性

查看自身所有属性

Object.keys(obj)

查看自身所有值

Object.values(obj)

查看自身所有值和属性

Object.entries(obj)

查看自身+共有属性

console.dir(obj)

判断一个属性是否为自身属性,若返还值为true则是自身,为false不是

obj.hasOwnProperty('key')

查看一种属性

(1) obj['key']
(2) obj.key

错误写法: obj[key] //这里key为变量,一般不为'key'

增加或修改属性

直接赋值

let obj = {key: 'value'}
obj.key = 'value'
obj['key'] = 'value'
obj['k'+'ey'] = 'value'
let key = 'key'; obj[key] = 'value'

*obj[key] = 'value' //错误,这里key为变量
*let key = 'key'; obj.key = 'value' //错误,obj.key = obj['key']

批量赋值

Object.assign(obj,{'key1': 'value1', 'key2':'value2'...})

修改隐藏属性: 不推荐:

let obj = {'key': 'value'}
let obj2 = {'key': 'value'}
let common = {'key': 'value'}
obj.__proto__ = common
obj2.__proto__ = common

推荐使用object.create

let obj = object.create(common)
obj.key = 'value'
let obj2 = object.create(common)
obj2.key = 'value'

增加属性的语法同上,已有的属性为修改,未有的属性为增加。