对象的基本知识
对象的基本操作,我总结了下面一句话来快速记忆。
创建(create)了一个对象,想找找(query)里面的东西,有些需要重新设置(set)一下,有些需要删除(delete),有些需要检测(test)一下质量问题,也有可能你想要挨个看一下,就是枚举(enumerate)一下。
除了名字和值外,每个属性还有一些与之相关的值,可枚举,可配置,可写。
三个相关的对象属性:
- 对象原型prototype指向另外一个对象,本对象的属性继承自这个指向的对象。
- 对象的类,一个标识对象类型的字符串。(这个没理解)
- 对象的扩展标记指明了是否可以向该对象添加新属性。
三类JavaScript对象:
- 内置对象,语言规范本身定义的对象。
- 宿主对象,语言解释器放入宿主环境中的。
- 自定义对象,由运行的js语言创建的对象。
两类属性:
- 自有属性,直接在对象中定义的属性
- 继承属性,在对象原型中定义的属性
创建对象
三种创建方式,对象直接量,new,Object.create()。
1.用对象直接量创建
1 | var obj = { |
对象直接量创建是一个表达式,这个表达式每次创建并初始化一个新对象。
2.通过new创建对象
new运算符创建并初始化一个新对象,new 关键词后跟随一个函数调用。被调用的这个函数被称为构造函数,构造函数用来初始化一个新创建的对象。
3.原型
Object.create()创建,第一个是要继承的原型,第二个是可选参数,用以描述对象的参数,比如可配置,可写,可枚举。
要创建一个没有原型的对象,只需要Object.create()中传入null即可,它将不能继承任何方法。
要创建一个空对象但继承了相应的方法,需要使用对象直接量创建或者传入Object.prototype创建。
属性的查询和设置
hasOwnProperty()用来检测给定的名字是否是对象的自有属性,是的话返回true,不是的话返回false。
hasOwnProperty检测属性是否时对象的自由属性,是的话返回true,否则会返回false。
propertyIsEnumerable()检测属性是否时对象的自有属性且是可以枚举的,否则的话返回false。
in 运算符用来检测某个属性是否在对象中,如果不在,就返回false。
1 | let obj = {x: 1} |
用属性值是否等于undefined来判断。
1 | let obj = {x: 1} |
for in 用来遍历对象中的每一个属性。object.keys返回一个对象中属性名称的集合。