一、对象的基本概念

对象是JS的基本数据类型,对象是一种复合值,它将很多值(原始值或者对象)聚合在一起,可通过名字访问这些值,对象也可看做是属性的无序集合,每个属性都是一个名/值对。对象不仅仅是字符串到值得映射,除了可以保持自由的属性,JS对象还可以从一个从一个称为原型的对象继承属性,对象的方法通常是继承的属性。这种原型式继承是JS的核心特征。

JS对象是动态的,可以新增属性也可以删除属性,但是他们常用来模拟静态对象以及静态类语言中的“结构体”。

除了字符串,数字,true,false,null和undefined之外,JS中的值都是对象。尽管字符串,数字和布尔值不是对象,但他们的行为和不可变对象非常相似。

对象是可变的。通过引用而非值来操作对象。如果变量x是指向一个对象的引用,那么执行代码var y = x;变量y也是值向同一个对象的引用,而不是这个对象的副本。通过执行变量y修改这个对象同样会对变量y造成影响。

对象常见的方法是创建,设置,查找,删除,检测和枚举他的属性。

属性包括名字和值。属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性,举个栗子:

 

var a = {
    'action': 'mone',
    'name': 'lisa',
    'name': 'sunny'
}
console.log(a)
//action: "mone"
//name: "sunny"

 但是值可以是任意JS的值,或者可以是一个getter()或者setter()函数(或者两者都有)。除了名字和值之外,每个属性还有一些与之相关的值,称之为‘属性特性’:

可写(writable attribute): 表明是否可以设置该属性的值。

可枚举(enumerable attribute): 表明是否可以通过for/in循环返回该属性。

可配置(configurable attribute):表明是否可以删除或修改该属性。

除了包含属性之外,每个对象还拥有三个相关的对象特性:

1 对象的原型(prototype)指向另外一个对象,本对象的属性继承自它的原型对象。

2 对象的类(class)是一个标识对象类型的字符串。

3 对象的扩展标记指明了在ECMAScript5中是否可以向该对象添加新属性。

最后用以下术语来对三类JS中对象和两类属性作区分:

1 内置对象是由ECMAScript规范定义的对象或类。比如数组,函数,日期,和正则都是内置对象。

2 宿主对象是由JS解释器所嵌入的宿主环境定义的。客户端JS中表示网页结构的HTMLElement对象

 

 posted on 2019-07-23 09:33  violetlvy  阅读(113)  评论(0编辑  收藏  举报