对象的语法
- 定义
无序的数据集合 键值对的集合 - 写法
let obj={'name'='frank','age'=18}
let obj=new object({'name'='frank','age'=18})
console.log({'name'='frank','age'=18}) - 细节
键名是字符串,不是标识符,可以包含任意字符
引号可以省略,省略之后只能写标识符,就算引号省略了,键名也还是字符串
没有数字键名,没有数字下标
注意
- 奇怪的属性名
所有属性名会自动变成字符串
例如 1e2 就是'100' - object.keys(obj)可以得到obj的所有key
- let a=‘xxx’ let obj={a=111}
这两个a没有关系,第一个a是一个变量,第二个a是一个字符串,
如果想让第二个a当成第一个变量来使用,[a]这种写法即可
总结
不加中括号的属性会自动变成字符串
加了中括号的会当作变量名来求值,值如果不是字符串,会自动转换为字符串
对象的隐藏属性
JS中每一个对象都有隐藏属性
这个隐藏属性储存着其共有属性组成的对象的地址
这个共有属性组成的对象叫做原型
也就是说隐藏属性储存着原型的地址
如何删除对象的属性
delete obj.属性名或者delete obj['属性名']
如何查看对象的属性
object.keys(obj)
console.dir(obj)
obj['name']
obj[name] 这里的name是变量
obj.name 这里的name是字符串
如何修改或增加对象的属性
改自身 obj['name']=另一个name
批量改自身Object.assign(obj,{键值对})
改共有属性 obj.proto['toString']='xxx'
Object.prototype['toString']='xxx'
改原型 obj.proto=common
改原型 let obj=Object.create(common)
'name' in obj和obj.hasOwnProperty('name') 的区别
第一个是判断obj里是否有name,但是判断不出是他自身的还是共有的
第二个是判断 name是否是obj自身的属性