《JS对象》

66 阅读2分钟

对象的语法

  • 定义
    无序的数据集合 键值对的集合
  • 写法
    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自身的属性