js的构成 - ECMAScript( 欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)

本文介绍了ECMAScript的基本概念,包括其定义、版本、语法及语义,并深入探讨了原始值和引用值的区别,以及类型转换的方法。

ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会。欧洲计算机制造商协会是制定信息传输与通讯的国际化标准组织。
ECMAScript是ECMA制定的标准化脚本语言。
目前JavaScript使用的ECMAScript版本为ECMAScript-262。
ECMAScript被国际化标准组织采纳为ISO/IEC 16262。
ECMAScript 是 js核心的跨终端的 标准。在浏览器(chrome谷歌由V8 js引擎实现,IE由Chakra js引擎实现,Firefox火狐由JägerMonkey js引擎实现 等等),服务端(nodejs由V8 js引擎实现)都可以使用。
这里写图片描述
es 组成部分

  1. js 语法:描述程序看起来是什么样的;
    语法的定义:每一种编程语言都有一系列规则,描述在那种语言中什么样的字符串被认为是有效程序。这些规则定义了这种语言的语法。通过语言的语法规则,我们能把像 y = x + 1 这样可能有效的程序与像 >/;x:1@4 这样毫无意义的字符串区分开。
    js 关键字

    js 保留关键字

    计算机程序的预期用途是被计算机读取,而要读程序就需要语法解析器:这个分析器程序能够读取代表程序的字符串,根据语法规则检查它是否有效,然后把它转换成一个适合被进一步处理的结构化表示。
    总体来讲一个语法解析器应该读入像 y = x + 1 这样的字符串,然后把它转换成抽象语法树( AST)。抽象语法树是源代码的一种表示,去掉了空格之类的无关细节,而只关注程序的分层结构。

  2. js 语义:描述程序的含义。
    考虑程序含义的最实际方法是思考它做了些什么:在运行程序的时候,我们期望发生什么呢?在运行时编程语言中不同的结构都是如何表现的?把它们放到一起组成更大的程序时会是什么效果?
    这是操作语义学( operational semantic)的基础,这种方法为程序在某种机器上的执行定义一些规则,以此来捕捉编程语言的含义。这个机器常常是一种抽象的机器。

  3. 值类型:原始值和引用值
    在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。
    原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
    引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。
    tip:为变量赋值时,ECMAScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。
    js 原始值和引用值的存储
    原始类型
    如前所述,ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。ECMA-262 把术语类型(type)定义为值的一个集合,每种原始类型定义了它包含的值的范围及其字面量表示形式。
    ECMAScript 提供了 typeof 运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。

    1. Undefined 类型:[ undefined ];
    2. Null 类型:[ null ];
      tip: 值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
    3. Boolean 类型:[ true, false ]
    4. Number 类型:
      Number.MAX_VALUE,Number.MIN_VALUE
      Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY
      提供全局方法:isFinite(),isNaN()
    5. String 类型:String 类型的独特之处在于,它是唯一没有固定大小的原始类型。可以用字符串存储 0 或更多的 Unicode 字符,有 16 位整数表示(Unicode 是一种国际字符集,本教程后面将讨论它)。
  4. 类型转换:CMAScript 给开发者提供了大量简单的类型转换方法。
    大部分类型具有进行简单转换的方法,还有几个全局方法可以用于更复杂的转换。无论哪种情况,在 ECMAScript 中,类型转换都是简短的一步操作。
    ECMAScript 的 Boolean 值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
    转换成字符串
    3 种主要的原始类型 Boolean 值、数字和字符串都有 toString() 方法,可以把它们的值转换成字符串。
    转换成数字
    ECMAScript 提供了两种把非数字的原始值转换成数字的方法,即 parseInt() 和 parseFloat()。
    正如您可能想到的,前者把值转换成整数,后者把值转换成浮点数。只有对 String 类型调用这些方法,它们才能正确运行;对其他类型返回的都是 NaN。
    强制类型转换
    您还可以使用强制类型转换(type casting)来处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。

    ECMAScript 中可用的 3 种强制类型转换如下:
    Boolean(value) - 把给定的值转换成 Boolean 型;
    Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
    String(value) - 把给定的值转换成字符串;
    用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。

  5. 引用类型:引用类型通常叫做类(class)。
    引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象。
    ECMAScript含有大量的预定义引用类型。
    1. Object 对象:ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中,所以理解了 Object 对象,就可以更好地理解其他对象。
      Object 属性:
      constructor
      对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
      Prototype(proto
      对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。
      Object 对象还具有几个方法:
      hasOwnProperty(property)
      判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty(“name”))
      IsPrototypeOf(object)
      判断该对象是否为另一个对象的原型。
      PropertyIsEnumerable
      判断给定的属性是否可以用 for…in 语句进行枚举。
      ToString()
      返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
      ValueOf()
      返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
      注释:上面列出的每种属性和方法都会被其他对象覆盖。
    2. Boolean 对象
    3. Number 对象
    4. String 对象
      在 ECMAScript 中,所有对象并非同等创建的。
      一般来说,可以创建并使用的对象有三种:本地对象、内置对象和宿主对象。
    5. 本地对象
      这里写图片描述
    6. 内置对象
      ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
    7. 宿主对象
      所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。
      所有 BOM 和 DOM 对象都是宿主对象。

参考列表:

  1. javascript解释器或引擎分析
  2. JS抽象语法树
  3. 编程语言的语法和语义
  4. JavaScript 高级教程
  5. JavaScript Error 对象 6个子Error对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值