对象是复杂数据类型,定义了无序键值对的集合
一、声明对象
let obj = {'name' = 'Jack', 'age' = 18}
let obj = new object({'name' = 'Jack', 'age' = 18})
- 键名是字符串,不是标识符,可以包含任何字符
- 引号可以省略,省略之后只能写标识符了,就算引号省略了,键名仍是字符串
- 对象没有数字下标
var a = 'xxx'
var obj = {
[a] = 111 // 此时a为变量,a的值为xxx
}
- 不加 [ ] 属性名会自动变成字符串
- 加了 [ ] 则会当做变量求值,值如果不是字符串则会自动变成字符串
二、删除对象属性
delect obj.name
删除属性名和值
obj.name = undefined
删除属性值
name in obj && name === undefined
判断含有属性名,但值为undefined
注意 name === undefined
不能判定 name 是否为 obj 的属性
三、查看对象属性
Object.key(obj)
查看对象的所有属性名
Object.values(obj)
查看对象的所有属性值
Object.entries(obj)
查看对象的所有属性名和属性值
console.dir(obj)
查看共有属性和自身属性
name in obj
判断属性名是否存在,不会区分自身属性和共有属性
obj.hasOwnProperty('name')
判断对象自身拥有的属性,不包含共有属性
四、修改或增加对象的属性
属性存在则修改,没有则增加
批量赋值,ES6 新出
Object.assign(obj, {p1 = 1, p2 = 2, p3 = 3})
-
无法通过自身修改或增加共有属性
-
一般来说不要修改原型
推荐使用Object.create
修改对象的原型,要改就开始就改,别后来再改 -
不推荐使用
obj.__proto__
修改对象原型的属性
obj.__proto__['toString'] = 'xxx'
推荐使用obj.prototype
修改对象原型的属性
obj.prototype['toString'] = 'xxx'
五、原型
-
隐藏属性存了所有对象的共有属性的地址,这个共有属性组成的象叫做原型
-
原型的作用是为了省内存
-
每一个对象都有原型
-
__proto__ === null
人为指定原型为 null -
obj = { }
的原型即为所有对象的原型,这个原型包含所有对象的共有属性,是对象的根,这个原型也有原型,是 null -
中括号语法
obj['key']
,优先使用这种 -
点语法
obj.key
-
坑新人的写法
obj[key]
obj[console.log(name)]
是 undefined
obj.name
等价于obj['name']
,不等价于obj[name]
,obj.name
中的 name 是字符串,而不是变量
资料来源:饥人谷
网友评论