ECMAScript 规范解读:类型之 Object Type

首发地址: https://github.com/jeuino/Blo...

前言

 A value is an entity that takes on one of nine types. There are six standard types (Undefined, Null, Boolean, String, Number, and Object) and three internal types called Reference, List, and Completion. Values of type Reference, List, and Completion are used only as intermediate results of expression evaluation and cannot be stored to properties of objects.

ES1 中共定义了九种类型(Types):

  • 六种语言类型(standard types):Undefined, Null, Boolean, String, Number, Object
  • 三种规范类型(internal types):Reference, List, Completion

本篇文章主要介绍六种语言类型中的 Object 类型。

后续会持续更新针对该知识点的 ECMAScript 其他版本与当前版本的改进说明

Object Type

 An Object is an unordered collection of properties. Each property consists of a name, a value and a set of attributes.

ECMAScript 是基于对象的。对象是一个无序属性的集合,每个属性(properties)都包含以下内容:

  • 一个名称
  • 一个值:基本值、对象或者函数
  • 一组属性(attributes):这些属性(attributes)描述了属性(properties)的各种特征。

属性的属性

一个属性(property)可以包含来自以下集合的零个或多个属性(attributes)。

  • ReadOnly: 只读属性。任何执行 ECMAScript 代码试图修改该属性值的行为都是无效的。(但是请注意,在某些情况下,由于底层实现采取的操作,具有 ReadOnly 属性的属性值可能会随时间而变化;因此,ReadOnly 并不意着“一直不变且不能改变的”!)
  • DontEnum:不能枚举。该属性不能通过for-in进行枚举。也就是说该属性不会出现在 for-in 循环中。
  • DontDelete:不能删除。尝试删除该属性的操作将会被忽略。
  • Internal: 内部属性。内部属性是为了实现 JavaScript 引擎用的,因此在 JavaScript 中不能直接访问它们,如何访问这些属性是特定于实现的。

内部属性

下表总结了此规范使用的所有内部属性。

其中可以通过 Object.prototype.toString 方法获取到内置属性[[Class]]的值

尾声

本文并没有深入介绍对象属性(properties)的每个属性(attributes)的含义以及作用,此次只是概述性的介绍了这些内容,目的是让读者对此有个概念,了解对象的属性也是具有属性信息的。以致后续如果遇到相关问题,再深入规范去了解相关属性(attributes)的算法。

持续更新

ES2

只修改了对内置属性[[Class]]的描述信息

指出了 [[Class]] 的值是字符串类型

ES3

新增了三种内置属性:

ES5

敬请期待

你可能感兴趣的:(javascript,ecmascript)