javaScript对象的学习

对象的基本知识

对象的基本操作,我总结了下面一句话来快速记忆。

创建(create)了一个对象,想找找(query)里面的东西,有些需要重新设置(set)一下,有些需要删除(delete),有些需要检测(test)一下质量问题,也有可能你想要挨个看一下,就是枚举(enumerate)一下。

除了名字和值外,每个属性还有一些与之相关的值,可枚举,可配置,可写。

三个相关的对象属性:

  • 对象原型prototype指向另外一个对象,本对象的属性继承自这个指向的对象。
  • 对象的类,一个标识对象类型的字符串。(这个没理解)
  • 对象的扩展标记指明了是否可以向该对象添加新属性。

三类JavaScript对象:

  • 内置对象,语言规范本身定义的对象。
  • 宿主对象,语言解释器放入宿主环境中的。
  • 自定义对象,由运行的js语言创建的对象。

两类属性:

  • 自有属性,直接在对象中定义的属性
  • 继承属性,在对象原型中定义的属性

创建对象

三种创建方式,对象直接量,new,Object.create()。

1.用对象直接量创建

1
2
3
4
var obj = {
key1 = value1,
key2 = value2
}

对象直接量创建是一个表达式,这个表达式每次创建并初始化一个新对象。

2.通过new创建对象

new运算符创建并初始化一个新对象,new 关键词后跟随一个函数调用。被调用的这个函数被称为构造函数,构造函数用来初始化一个新创建的对象。

3.原型

Object.create()创建,第一个是要继承的原型,第二个是可选参数,用以描述对象的参数,比如可配置,可写,可枚举。

要创建一个没有原型的对象,只需要Object.create()中传入null即可,它将不能继承任何方法。

要创建一个空对象但继承了相应的方法,需要使用对象直接量创建或者传入Object.prototype创建。

属性的查询和设置

hasOwnProperty()用来检测给定的名字是否是对象的自有属性,是的话返回true,不是的话返回false。

hasOwnProperty检测属性是否时对象的自由属性,是的话返回true,否则会返回false。

propertyIsEnumerable()检测属性是否时对象的自有属性且是可以枚举的,否则的话返回false。

in 运算符用来检测某个属性是否在对象中,如果不在,就返回false。

1
2
let obj = {x: 1}
'x' in obj // true

用属性值是否等于undefined来判断。

1
2
3
let obj = {x: 1}
obj.x === undefined // false。有x属性
obj.y === undefined // true。没有y属性。

for in 用来遍历对象中的每一个属性。object.keys返回一个对象中属性名称的集合。