JS对象的基本用法
声明一个对象的语法
//方法一
let obj = {'name':'李华',age:18}\
//方法二
let ob = new Object{'name':'李华',age:18}
注意:
- 方法一等价于方法二。
- 对象的键名是字符串,不是标识符。
- 引号可省略,省略后,只能使用标识符的规则取名。
查看对象的属性(键名和值)
- Object.keys可以查看对象的所有键名;
- Object.values可以查看对象的所有值;
- console.dir() 可以查看一个对象的所有自身属性+共有属性;
查看对象的某一个具体的属性
let obj = {'name':'李华',age:18}
obj.name;//方法一
//李华
obj['name'];//方法二
//李华
初学者推荐使用第二种方法,可以帮助记忆这里的name是字符串。
删除对象的属性
delete obj.name === delete obj['name'] 删除对象的name属性
注意:
删除对象的属性不能用赋值为undefined的方法。
undefined只是让该值为空,属性仍然存在,但值为空
修改或者增加对象的属性
赋值法:该属性不存在则添加该属性,存在则修改该属性
注意:\
obj.name ==== obj['name']
但:obj.name !== obj[name]
obj[name]里的name是变量名,且未定义
批量赋值:Object.assign(对象名,{属性名:值,属性名:值})
let obj = {'name':'李华',age:18}
Object.assign(obj,{'like':'篮球','school':'清华'})
//{name: '李华', age: 18, like: '篮球', school: '清华'}
obj
//{name: '李华', age: 18, like: '篮球', school: '清华'}
判断属性是否在对象中的方法
方法一:属性名 in 对象名
let obj = {'name':'李华',age:18}
'like' in obj
//false
方法二:对象名.hasOwnProperty(属性名)
let obj = {'name':'李华',age:18}
obj.hasOwnProperty('age')
//true
'name' in obj和obj.hasOwnProperty('name') 的区别
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性。所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性。
和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。 即使属性的值是 null 或 undefined,只要属性存在,hasOwnProperty 依旧会返回 true。
'toString' in obj
//true,obj有继承Object的toString方法
obj.hasOwnProperty('toString')
//false,obj继承了该方法,但hasOwnProperty忽略了原型上的方法,只在自身查找
原型
每个对象都有原型
- 原型里存着对象的共有属性
- 比如obj的原型就是一个对象
- obj.proto__存着这个对象的地址
- 这个对象里有toString/constructor等属性
对象的原型也是对象
- 所有对象的原型也有原型
- obj={}的原型即为所有对象的原型
- 这个原型包含所有对象的公共属性,是对象的根
- 但这个原型也有原型,是null