声明对象的两种语法
- 对象是无序的数据集合
- 是键值对
key:value
的集合
声明语法
//语法1
let obj = {'name':'jack','age':18}
//name为键名,jack为键值 age为键名,18为键值
//语法2
let obj = new Object({'name':'jack','age':18})
小细节🧐:
- 键名是字符串,不是标识符,可以包含任意字符
- 键名的引号可以省略,但省略以后就只可以是标识符
- 省略引号,键名依旧是字符串
- 每一个
key
都是对象的属性名(property) - 每一个
value
都是对象的属性值
变量属性名
使用[]实现
let slot = 'name'
let obj ={[slot]:'jack' } //属性名为name
// 等同于
let obj = {'name':'jack'}
//不等同于
let obj = {slot:'jack'} 属性名为slot
如何删除对象的属性
//方法1
delete obj.xxx
//方法2
delete obj['xxx']
//方法3
let d_key = 'ket_name'
delete obj[d_key]
//注意:这种方法使用变量的形式来对应对象的属性名
如何查看对象的属性
// 查看自身的所有属性
Object.keys(obj)
//查看自身和共有属性
console.dir(obj)
//或者
Object.keys(obj)
Object.keys(obj.__proto__)
//查看是否拥有该属性
'xxx' in obj === true/false
// 查看属性是自身的还是共有的
obj.hasOwnProperty('xxx')
in 和 hasOwnProperty 的区别
in
判断的是对象的所有属性,包括对象自身及其原型的属性。
hasOwnProperty
则是判断对象自身是否具有某个属性。
所以当hasOwnProperty
和in
结合使用时,就可以判断属性是否为原型属性。
如何增加属性或修改对象的属性值
let obj = {name: 'jack'}
//增加属性
obj.age //不直接赋值,读取时返回undefined
obj.gender = 'male' //直接赋值
obj['height'] = '168cm'
//等于
obj.height='168cm'
//一个一个增加多麻烦,批量赋值来帮你
Object.assign( obj, {age,gender:'male',height:'168cm'})
//修改属性值
obj.gender = 'female'
obj['height'] = '200cm'
//修改共用属性值
obj.__proto__.共有属性名= 'value' //不推荐写法
//等于
Object.prototype.共有属性名 = 'value'
如何增加共有属性
推荐用法 Object.create(target_obj)
let obj = {}
let common = {kind:'human'}
let obj = Object.create(common)
obj.name = 'jack'
注意🧐:Object.create()
需要用在空对象,否则会覆盖掉原本存在的属性
最后的坑,还没有找到很好的答案,如何修改属性名?后期有时间研究下。
每日一语:坚持突破,而不是坚持重复。