定义
- 对象是 javascript 的一种数据类型,也是唯一一种复杂数据类型。
一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
语法
可以用以下两种方法来声明一个对象
let obj = { //常用写法'name' : 'frank','age' : 18}let obj = new Object({ //正规写法'name' : 'frank','age' : 18})
原型
原型包含了所有对象的共有属性,每一个对象都有原型,原型也是一个对象,对象的原型的原型是null
对象的隐藏属性 proto 储存了原型的地址obj = {'name' : 'frank','age' : 18__proto__:Object //隐藏属性}obj.__proto__.__proto__ === null; //true
删除对象的属性
delete obj.xxx;delete obj[‘xxx’] (delete只可删除属性,不可删除对象。)
let obj = {'name' : 'frank','age' : 18}delete obj.name //delete obj['name']obj.name //undefined
Object.keys(obj);Object.values(obj);Object.entries(obj)
let obj = {'name' : 'frank','age' : 18}Object.keys(obj) // ["name", "age"]Object.value(obj) // ["frank", 18]Object.entries(obj) // ["name", "frank"] ["age", 18]
单个属性 obj.xxx;obj[‘xxx’];obj[xxx](变量)
obj.name //"frank"obj['name'] //"frank"obj[name] //undefined //[]内无引号是变量 有引号才是字符串//未声明变量let key = 'name'obj[key] //"frank"
-
判断是自身属性还是共有属性
obj.hasOwnProperty() 返回布尔值
let obj = {'name' : 'frank','age' : 18}obj.hasOwnProperty('name') //trueobj.hasOwnProperty('toString') //false
改或增
改自身属性
改单个跟查语法相同
obj.name = 'frank'obj['name'] = 'frank'let key = 'name'obj[name] = 'frank'
批量赋值:Object.assign()
Object.assign(obj,{age :18,gender:'man'})
改原型
一般不要修改原型 一定要改就在开始改,不要中途再改,会非常影响性能
Object.create();Object.prototype;obj.proto(不建议使用)
let common = {'国籍': '中国',color: 'balck'}//方式一let person = Object.create(common)person.name == 'frank' //设置自有属性//方式二(不方便)let person = Object.create(common,{name:{value:'frank'}})
改原型上的共有属性 Object.prototype.xxx;obj.proto.xxx(不建议使用)
```javascript let obj1 = {}; obj.toString = ‘空’; //只能修改自身属性 console.dir(obj); //toString:’空’ obj.toString; //f toString()
Object.prototype.toString = undefined; obj.toString; //undefined
<a name="or5IC"></a># 'name' in obj 和obj.hasOwnProperty的区别- in判断的是对象的所有属性,包括对象实例及其原型的属性;而hasOwnProperty只判断对象实例的是否具有某个属性。```javascriptlet obj = {'name' : 'frank','age' : 18}'name' in obj //true'toString' in obj //trueobj.hasOwnProperty('name') //trueobj.hasOwnProperty('toString') //false
