JS 对象基本用法

135 阅读2分钟

对象

定义:

无序的数据集合

键值对的集合

写法:

let obj = {'name': 'pjh'};

常用写法

let obj = new Object({'name': 'pjh'});

正规写法

console.log({'name': 'pjh'});

匿名对象,前面不写东西 JS 会当成一个 label

细节:

键名是字符串,不是标识符,可以包含任意字符

引号可以省略,省略之后就只能写标识符

==就算引号省略了,键名也还是字符串==


所有的属性名会自动变成字符串,所以会存在一些奇怪的属性名

Object.keys(obj)

得到 obj 的所有 key


变量作属性名

let a = 'name'
let obj = {[a]: 'pjh'}

不加 [] 的属性名会自动变成字符串

加了 [] 则会当作变量求值

值如果不是字符串,会尝试把它变成字符串

var obj = {
	[1+2+3]: '六'
}

除了字符串,symbol 也能做属性名

let a = Symbol()
let obj = {[a]: 'hello'}

对象的隐藏属性

JS 中的每一个对象都有一个隐藏属性

这个隐藏属性存储着其==公有属性组成的对象==的地址

这个==公有属性组成的对象==叫做原型

就是说,隐藏属性存储着原型的地址

删属性

delete obj.xxxdelete obj['xxx']

即可删除 obj 的 xxx 属性

'xxx' in obj === true

判断属性名是否存在

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

含有属性名但是值为 undefined

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

读属性

查看自身所有属性:Object.keys(obj)

查看自身+共有属性console.dir(obj)

查看自身属性+值Object.entries(obj)

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

  • 'name' in obj是判断 obj 是否有该属性,不区分自身有还是原型有
  • hasOwnproperty('name')是判断自身是否有该属性

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

点语法:obj.key

变量:obj[key]

原型

每个对象都有原型,原型里面存着对象的共有属性

对象的原型也是对象,这个原型包含所有对象的共有属性,是==对象的根==

这个原型也有原型,是 null

写属性

直接赋值

批量赋值:Object.assign(obj,{age: 18, gender: 'man'})

let obj = {},obj2 = {}
obj.toString = 'xxx'

无法通过自身修改或增加共有属性

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

修改共有属性

let common = {'国籍': '中国'}
let person = Object.create(common)

修改原型