ES5概述(ECMAScript262/5.1)

本文参考:ES5概述

ECMAScript 是基于对象的:

基本语言和宿主设施都由对象提供,ECMAScript 程序是一组可通信的对象。ECMAScript 对象是属性的集合,每个属性有零个或多个 特性,以及属性的使用方式。例如,当设置一个属性的Writable 特性为 false 时,任何试图更改此属性值的 ECMAScript 代码的都会执行失败。

  1. 属性是一个容器,它可以存放其他 对象、原始值、函数。
  2. 原始值是以下内置类型之一的成员:Undefined、Null、Boolean、Number、String;原始值可以直接表示语言实现的最底层数据;对象是剩下的内置类型 Object 的成员,对象是属性的集合,并有一个原型对象。原型可以是空值。
  3. 函数是可调用的对象。
  4. 方法是通过属性与对象关联的函数。
  5. 构造器:创建和初始化对象的函数对象。 注: 构造器的“prototype”属性值是一个原型对象,它用来实现继承和共享属性。
  6. 原型:为其他对象提供共享属性的对象。注: 当构造器创建一个对象时,为了解决对象的属性引用,该对象会隐式引用构造器的“prototype”属性。通过程序表达式 constructor.prototype 可以引用到构造器的“prototype”属性。并且,添加到对象原型里的属性会通过继承的方式与所有共享此原型的对象共享。另外,可使用 Object.create 内置函数,通过明确指定原型来创建一个新对象。
  7. 内置对象:由 ECMAScript 实现提供,独立于宿主环境的对象,ECMAScript 程序开始执行时就存在。注: 标准的内置对象由本规范定义,ECMAScript 实现可以指定和定义其他的。所有内置对象都是原生对象。内置构造器是个内置对象,同时也是个构造器。
  8. 宿主对象:由宿主环境提供的对象,用于完善 ECMAScript 执行环境。注: 任何不是原生对象的对象就是宿主对象。
  9. 其它:
    undefined值:说明一个变量没有被分配值的一个原始值
    Undefined 类型:undefined 值是 Undefined 类型绝无仅有的一个值。
    null 值:代表对象值故意留空的一个原始值。
    Null 类型:null 值是 Null 类型绝无仅有的一个值。
    Boolean 值:Boolean 类型的成员。 注: 只有两个 Boolean 值,true 和 false 。
    Boolean 类型:由原始值 true 和 false 组成的类型。
    Boolean 对象:Object 类型的成员,它是标准内置构造器 Boolean 的实例。注: 通过使用 new 表达式,以一个 Boolean 值作为参数调用 Boolean 构造器来创建 Boolean 对象。由此产生的对象包含一个值为此 Boolean 值的内部属性。Boolean 对象可以强制转换为 Boolean 值。
    String 值:原始值,它是零个或多个16位无符号整数组成的有限有序序列。注: String 值是 String 类型的成员。通常序列中的每个整数值代表 UTF-16 文本的单个16位单元。然而,对于其值,ECMAScript 只要求必须是16位无符号整数,除此之外没有任何限制或要求。
    String 类型:所有可能的 String 值的集合。
    String 对象:Object 类型的成员,它是标准内置构造器 String 的实例。
    注: 通过使用 new 表达式,以一个 String 值为参数调用 String 构造器来创建 String 对象。由此产生的对象包含一个值为此 String 值的内部属性。将 String 构造器作为一个函数来调用,可将一个 String 对象强制转换为一个 String 值(15.5.1)。
    Number 值:原始值,对应一个64位双精度二进制 IEEE754 值。
    注: Number 值是 Number 类型的成员,是一个数字的明确表示法 。
    Number 类型:所有可能的数字值的集合,包括特殊的“Not-a-Number”(NaN) 值、正无穷、负无穷。
    Number 对象:对象类型的成员,它是标准内置构造器 Number 的一个实例。注: 通过使用 new 表达式,以一个数字值为参数调用 Number 构造器来创建数字对象。由此产生的对象包含一个值为此数字值的内部属性。将 Number 构造器作为一个函数来调用,可将一个 Number 对象强制转换为一个数字值(15.7.1)。
    Infinity:正无穷 Number 值。
    NaN:值为 IEEE 754“Not-a-Number”的 Number 值。
    函数:Object 类型的成员,标准内置构造器 Function 的一个实例,并且可作为子程序被调用。注: 函数除了拥有命名的属性,还包含可执行代码、状态,用来确定被调用时的行为。函数的代码不限于 ECMAScript。
    内置函数属于函数的内置对象。 注: 如 parseInt 和 Math.exp 就是内置函数。一个实现可以提供本规范没有描述的依赖于实现的内置函数。
    属性:一个名称和一个值之间的关联;属性本身是对象的一部分。 注: 根据属性形式的不同,其值可以直接表现为一个数据值(原始值、对象、函数对象)或间接地通过一对访问器函数来表现。
    方法:作为属性值的函数。注: 当一个函数被作为一个对象的方法调用时,此对象将作为 this 值传递给函数。
    内置方法:属于内置函数的方法。注: 标准内置方法由本规范定义,一个 ECMAScript 实现可指定,提供其他额外的内置方法。
    特性:用于定义属性的一些特征的内部值。
    自身属性:对象直接拥有的属性。
    继承属性:不是对象的自身属性,但是对象原型的属性(可以是自身或继承的)。

ECMAScript 定义了一组内置对象,完善了 ECMAScript 实体的定义。

这些内置对象包括 全局对象、Object对象、Function对象、Array对象、String对象、Boolean对象、Number对象、Math对象、Date对象、RegExp对象、JSON对象 和 Error对象:Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

ECMAScript 中还定义一组内置运算符。

ECMAScript 运算符包括 一元运算符、乘法运算符、加法运算符、位移运算符、关系运算符、等值运算符、二元按位运算符、二元逻辑运算符、赋值运算符、逗号运算符。

ECMAScript 的语法是松散的,使其能够作为一个易于使用的脚本语言。

例如,一个变量不需要有类型声明,属性也不需要与类型关联,定义的函数也不需要声明在函数调用语句的前面

对象

ECMAScript 不使用诸如 C++、Smalltalk、Java 中的类。相反,对象可以通过各种方式创建,包括字面量符号、构造器 创建对象然后运行代码初始化其全部或部分属性值,并为这些属性分配初始值。每个构造器是一个拥有名为“prototype”属性的函数。此属性用于实现 原型继承 和 属性共享。构造器通过 new 表达式创建对象:例如,new Date(2009,11) 创建一个新 Date 对象。不使用 new 调用一个构造器的结果,依赖构造器本身。例如,Date() 产生一个表示当前日期时间的字符串,而不是一个对象

每个由构造器创建的对象都有一个隐式引用(叫做对象的原型)链接到构造器的“prototype”属性值 。再者,原型可能有一个非空隐式引用链接到它自己的原型,以此类推,这叫做 原型链。当一个引用被连接到对象的属性上时,引用会指向原型链中包含此属性名的第一个对象对应的属性。换句话说,首先检查对象直接的同名属性,如果对象包含同名的属性,引用即指向此属性,如果该对象不包含同名的属性,则下一步检查对象的原型,以此类推。

在 ECMAScript 中,对象拥有状态和方法,并且结构,行为,状态全都可继承。所有不直接包含原型中包含的特定属性的对象会共享此属性及属性值。对象与原型的关系图 说明了这一点:

CF 是一个构造器(也是一个对象)。五个对象已用 new 表达式创建 : cf1、cf2、cf3、cf4、cf5。每个对象都有名为 q1 和 q2 的属性。虚线表示隐式原型关系;例如:cf3 的原型是 CFp。构造器 CF 自己有名为 P1 和 P2 的两个属性,这对 CFp、cf1、cf2、cf3、cf4、cf5 是不可见的。CFp 中名为 CFP1 的属性和任何在 CFp 的隐式原型链中能找到且不名为 q1、q2、CFP1 的属性都被 cf1、cf2、cf3、cf4、cf5 所共享(但不被 CF 共享)。请注意 CF 和 CFp 之间没有隐式原型链接。
不同于基于类的对象语言,属性可以通过赋值的方式动态添加给对象。也就是说,构造器并不是非要对构造的对象的全部或任何属性命名或赋值。上图中,可以给 CFp 添加新属性值的方式为 cf1、cf2、cf3、cf4、cf5 添加一个新的共享属性。

ECMAScript 的严格模式变体

ECMAScript 语言认为存在部分希望限制语言中某些功能的用户。他们这样做可能是为了安全考虑,规避那些他们认为容易出错的功能,从而获得更强的错误检查,或者其他原因。为了支持这种可能的情况,ECMAScript 定义了语言的严格变体。语言的严格变体,排除了 ECMAScript 语言中某些特定的句法和语义特征,还修改了某些功能的详细语义。严格变体还指定了额外一些必须抛出错误异常报告的错误条件,而在非严格的语言模式下这些条件不属于错误。
ECMAScript 的严格变体通常被称为语言的 严格模式。严格模式选择使用 ECMAScript 严格模式的语法和语义,明确地适用于个别 ECMAScript 代码单元级别。由于严格模式适用于选择的语法代码单元级别,严格模式只会在这个代码单元内施加带有局部效果的限制。严格模式不在语义层面限制或修改任何必须在多个代码单元运行的 ECMAScript 代码。一个 ECMAScript 程序可由严格模式和非严格模式的代码单元组成。在这种情况下,严格的模式只适用于严格模式代码单元内实际执行的代码。

ES5概述(ECMAScript262/5.1)的更多相关文章

  1. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)

    写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...

  2. ES5 数组方法map

    概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经 ...

  3. javascript ES5 Object对象

    原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...

  4. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

  5. Java笔记:Java集合概述和Set集合

    本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...

  6. 第九十六节,JavaScript概述

    JavaScript概述 学习要点: 1.什么是JavaScript 2.JavaScript特点 3.JavaScript历史 4.JavaScript核心 5.开发工具集 JavaScript诞生 ...

  7. 《JS权威指南学习总结--7.9 ES5中的数组方法》

    内容要点: ES5中定义了9个新的数组方法来遍历.映射.过滤.检测.简化和搜索数组. 概述:首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一个元素)调用一次该函数. 如果是稀疏数组 ...

  8. javaScript(1)---概述

    javaScript(1)---概述 学习要点: 1.什么是JavaScript 2.JavaScript特点 3.JavaScript历史 4.JavaScript核心 JavaScript诞生于1 ...

  9. 前端常用技术概述--Less、typescript与webpack

    前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Less.Sass.Stylus 等,js的超集有Typescript等. ...

随机推荐

  1. CentOS 7 上部署Mono 4 和Jexus 5.6

    概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus. mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net mvc 4 应用.这篇文章是描述如何在 ...

  2. 【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d14047603a5bf1242ad01b 导语 内存泄漏问题大约是An ...

  3. 基于Kubernetes在AWS上部署Kafka时遇到的一些问题

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 交代一下背景:我们的后台系统是一套使用Kafka消息队列的数据处理管线 ...

  4. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  5. Thinking in Unity3D:渲染管线中的Rendering Path

      关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...

  6. 如何用 MEF 扩展应用程序

    最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...

  7. python装饰器

    今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...

  8. Java基础之IO流

    很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作

    系列目录 最近比较忙,系统难度独步增加,文章的发布速度明显比以前慢了. 由于我们已经跑通了整个系统,所有东西都回到了简单,接下来我们做模块制作也就是操作SysModule表. 首先我们来回顾一下之前的 ...

  10. 深入浅出JavaScript之this

    JavaScript中的this比较灵活,根据在不同环境下,或者同一个函数在不同方式调用下,this都有可能是不同的.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面是我的学习笔记 ...