WithCoderWithCoderWithCoder

Javascript对象简介

    对象,是Javascript的基本数据类型。

    在Javascript中,对象是一种复合值:它可以将很多值(原始值或者其他对象)聚合在一起,可以通过名字访问这些值。对象也可以看做是属性的无序集合,每个属性都是一个名/值对。属性名是字符串,因此我们可以把对象看成是从字符串到值的映射。

    对象的属性包含名字和值。属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性。值可以是任意Javascript值,或者(在ECMAScript 5中)可以是一个getter或setter函数(或两者都有)。除了名字和值之外,每个属性还有一些与之相关的值,称为“属性特性”(property attribute):

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

    • 可枚举(enumeratable attribute),表明是否可以通过for / in循环返回该属性

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

    在ECMAScript 5之前,通过代码给对象创建的属性都是可写、可枚举的和可配置的。在ECMAScript 5 中则可以对这些特性进行配置。

    然而,对象不仅仅是字符串到值的映射,除了可以保持自身的属性,Javascript对象还可以从一个称为原型的对象继承属性。对象的方法通常是继承的属性。这种“原型式继承”是Javascript的核心特性。   

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

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

    对象是可变的,我们通过引用而非值来操作对象。对象最常见的用法是创建(create)、设置(set)、查找(query)、删除(delete)、检测(test)和枚举(enumerate)它的属性。

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

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

    • 对象的类(class)是一个标识对象类型的“字符串”

    • 对象的扩展标记(extensible flag)指明了(在ECMAScript 5中)是否可以向该对象添加新属性


    在Javascript中,对象可以分为三类

    • 内置的对象(native object)是由ECMAScript规范定义的对象或类。例如,数组、函数、日期和正则表达式都是内置对象

    • 宿主对象(host object)是由Javascript解释器所嵌入的宿主环境(如web浏览器)定义的。客户端Javascript中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的Javascript函数对象,因此,宿主对象也可以看出是内置对象。

    • 自定义对象(user-defined object)是由运行中的Javascript代码创建的对象

    同时,在Javascript中,对象的属性也可以分为两类

    • 自有属性(own property)是直接在对象中定义的属性

    • 继承属性(inherited property)是在对象的原型对象中定义的属性

欢迎分享交流,转载请注明出处:WithCoder » Javascript对象简介