JS 对象基本用法
定义:
- 无序的数据集合(可以包括多种类型的数据)
- 键值对的集合
一、声明的两种语法
let obj = {'name':'xdd', 'age':18 }
let obj = new Object({'name':'xdd', 'age':18 })
- 注意:键名是字符串,键名的引号就算省略了,也会自动转为字符串
二、删除属性
- delete()
- 注意区分**属性值为undefined **和 不含属性名
let obj = {
'name':'xdd',
'age':22,
'gender':undefined
};
console.log('name' in obj); //true
delete obj.name;
console.log('delete' in obj); //false
console.log(obj.haha); //undefined,但是haha不为obj的属性,因此不能通过此方式来判断属性是否在对象中
console.log('gender' in obj && obj.xxx === undefined
); //true,用此来判断地偶像里面有某个属性,并且值为undefine。
三、查看属性
1.查看单个属性
- 中括号:obj['key']
- 点语法:obj.key
- 防踩坑:obj[key],注意,这里的key会默认为变量名,先求值。
防止踩坑
let list = ['name', 'age', 'gender']
let person = {
name:'xdd', age:18, gender:'man'}
for(let i = 0; i < list.length; i++){
let name = list[i]
console.log(person__???__)
}
使得 person 的所有属性被打印出来
- console.log(person.name)
- console.log(person[name])
选择2
2.查看所有属性
let obj = {
'name':'xdd',
'age':18,
'gender':undefined
};
Object.keys(obj); //输出键名
Object.values(obj); //输出键值
Object.entries(obj); //输出键值对
console.dir(obj); //查看自身+共有属性
//判断一个属性是否属于自身
console.dir(obj.hasOwnProperty('toString'));
四、增加或修改属性
1.单个
let obj = {name: 'frank'} ;// name 是字符串
obj.age = 18; // name 是字符串
obj.name = 'aaa'; //修改
obj['name'] = 'bbb'; //修改
obj['gender'] = 'female'; //添加
2.批量
Object.assign(obj, {age: 18, gender: 'man'})
3.注意
- 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx' //只会改 obj 自身属性
obj2.toString //还是在原型上
- 我偏要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' // 不推荐用 __proto__
Object.prototype.toString = 'xxx'
一般来说,不要修改原型,会引起很多问题
- 修改隐藏属性(原型)
不推荐使用 __proto__
let obj = {name:'frank'}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common
推荐使用 Object.create
let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'
要改就一开始就改,别后来再改
五、'name' in obj 和 obj.hasOwnProperty('name')
var obj = {
'name':'xdd',
'age':18,
'gender':undefined
};
console.log('name' in obj); //true
console.log(obj.hasOwnProperty('name'));//true
console.log('toString' in obj);//true
console.log(obj.hasOwnProperty('toString'));//false
-
obj.hasOwnProperty('name')用来判断某个对象自身是否拥有某个属性,有true无false -
而
'name' in obj在判断某个对象中是否有某个属性时,判断的范围除自身外,还会包含原型的共有属性。