js 获取中括号里面字符串_JS 对象基本用法

一、对象

定义

  • 无序的数据集合
  • 键值对的集合

声明对象的写法

  • let obj = {'name': 'ben', 'age':18}(更简单)
  • let obj = new Object ({'name':'ben'})(更规范)
  • console.log({'name': 'ben', 'age':18})

细节

  • 键名是字符串,不是标识符,可以包含任意字符(可以是空字符串,也可以是空格字符串)
  • 引号可以省略,省略后只能写标识符
  • 就算引号省略了,键名也还是字符串

属性:每个key都是对象的属性名

属性:每个value都是对象的属性值

所有属性名都会自动变成字符串

Object.keys(obj)可以得到obj的所有key

变量作属性名

  • 之前都是用常量作属性名
  • let p1 = 'name'
  • let obj = {p1:'ben'},这样写属性名为p1
  • let obj = {[p1]:'ben'}这样写,属性名为'name'

对比

  • 不加[]的属性会自动变成字符串
  • 加了[]则会当成变量先求值
  • 值如果不是字符串,则会自动变成字符串

对象的隐藏属性

隐藏属性

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

代码示例

  • var obj{}
  • obj.toString()//不报错
  • 因为obj的隐藏属性对应的对象上有toString

二、删除属性

  • delete http://obj.xxx或者delete obj.['xxx']

即可删除obj的xxx属性

  • 不含属性名 'xxx' in obj===false
  • 含有属性名,但是值为undefined 'xxx' in obj&&obj.xxx===undefined
  • 注意obj.xxx===undefined 不能判定'xxx'是否为obj的属性

166022d20e572f8bd9f750aa269fd1fc.png

delete删除的是属性名和属性值,undefined仅仅删除的属性值

三、查看所有属性(读属性)

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

console.dir(obj)

或者自己依次用Object.keys打印出obj.__proto__(不推荐)

  • 判断一个属性是自身的还是共有的:obj.hasOwnProperty('toString')

四、原型

每个对象都有原型

  • 原型里存着对象的共有属性
  • 比如obj的原型就是一个对象
  • obj._proto__存着这个对象的地址
  • 这个对象里有toString/constructor/valueOf等属性

对象的原型也是对象

  • 对象的原型也有原型
  • obj={}的原型即为所有对象的原型
  • 这个原型包含所有对象的共有属性,是对象的根
  • 这个原型也有也有原型,是null

五、查看属性

两种方法查看属性

  • 中括号语法:obj['key']
  • 点语法:obj.key
  • 注意obj[key]//变量key值一般不为'key'

PS:优先使用中括号语法,点语法会误导你认为key不是字符串

特别注意

a03fa899e18930aa3ee21f813c38c392.png

ac2202798c769e1742e0ebee6fc1b2c1.png

六、增加或修改属性(写属性)

直接赋值

  • let obj = {name:'ben'}//name是字符串
  • obj.name = 'ben'//name是字符串
  • obj['name']='ben'
  • obj[name]='ben'//错因为name的值不确定
  • obj['na'+'me']='ben'
  • let key = 'name';obj[key] = 'ben'
  • let key = 'name';obj.key = 'ben'//错,因为obj.key等价于obj['key']

批量赋值

  • Object.assign(obj,{age:18,gender:'femal'})

七、修改或增加共有属性

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

  • let obj = {},obj2 ={}//共有toString
  • obj.toString = 'xxx'只会修改自身属性
  • obj2,toString还是在原型上

一般不要修改原型会产生问题,如果偏要修改Object.prototype.toString='xxx'

八、修改隐藏属性

使用Object.create

let obj = Object.create(common)

obj.name = 'ben'

规范如果要改就一开始改,不要后来再改

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值