《JS 对象基本用法》

191 阅读3分钟

声明对象的几种语法

对象是无序的数据集合或键值对的集合;声明对象和多种方式,常见的方式有以下:

1let obj = {'name':'xxx','age':18}
2console.log({'name':'xxx','age':18})

注意细节:

  • 键名是字符串,不是标识符,可以包住任意字符。
  • 引号是可以省略的,省略之后就只能写标识符
  • 就算引号省略了,键名也还是字符串

变量作属性名

let p1 = 'name'
let obj = {p1:'xxx'}//这样写属性名为'p1'
let obj = {[p1]:'xxx'}//这样写属性名为'name'

对比:

  1. 不加[]的属性名会自动变成字符串
  2. 加了[]则会当做变量求职
  3. 值如果不是字符串则会自动变成字符串

对象的隐藏属性

1、js中每一个对象都会有一个隐藏属性
2、这个隐藏属性储存着其共有属性著称的对象的地址
3、这个共有属性组成的对象叫做原型
4、也就是说,隐藏属性储存着原型的地址

代码示例

var obj ={}
obj toString()//这样js不会报错
因为obj的隐藏属性对应的对象上有toString()

增删改查/删除

delete obj.name 或 delete obj['name']
即可删除obj的xxx属性
查询是否删除:'xxx' in obj === false // 正常没有删除是会返回true

增删改查/查属性

Object.key(obj) //查看所有属性
console.dir(obj) //查看共有属性
obj.hasOwnProperty(‘toString’) //判断一个属性是自身还是共有的

1、原型:每个对象都有原型,原型里存着对象的共有属性,比如obj的原型就是一个对象,obj__proto__存着这个对象的地址,这个对象理由toString/constryctor/valueof等属性
2、对象的原型也是对象,obj={}的原型即为所有对象的原型,这个原型包含所有对象的共有属性,是对象的根,这个原型也有原型,是null

修改和增加对象属性

修改对象的属性可以直接赋值和批量赋值。

let obj = {name:'xiaoming'}
obj.name = 'xiaoming'
obj['name'] = 'xiaoming'
obj['na' + 'me'] = 'xiaoming'
let key = 'name';obj[key] = 'xiaoming'
//批量赋值
Object.assign(obj,{age:18, gender:'man'})

由于每个对象都有共有属性,无法通过自身修改或增加共有属性

let obj = {},obj2 ={}
obj.toString = "XXXX"
//obj2.toString依然在原型上,因为上面的只修改了obj的自身属性。
//如果确实想要修改原型上的属性
obj.__proto.toString = 'xxx'   //这个不推荐
Object.prototype.toString = 'xxx' //一般不建议修改原型
复制代码

增加对象属性的方法和修改自身属性的方法一样,已经有的属性修改,没有就增加属性。

'name' in obj和obj.hasOwnProperty('name') 的区别

两者的区别在于,前一个判断 obj 对象是否有这个属性,不论这个属性是私有还是共有属性;后者则是判断这个属性是否为私有属性。

let obj06 = {
    'name':'xiaoming',
    'age':18
};
'name' in obj06                   //返回true
'toString' in obj06               //返回的也是true
obj06.hasOwnProperty('name')      //返回的true
obj06.hasOwnProperty('toString')  //返回的flase