JavaScript实现

一个完整的JavaScript实现应该由下列三个不同的部分组成:

  1. 核心(ECMAScript)

  2. 文档对象模型(DOM)

  3. 浏览器对象模型(BOM)

基本概念

语法

区分大小写

变量名 test 和变量名 Test 分别表示两个不同的变量,而函数名不能使用 typeof,因为它是一个关键字,但 typeOf 则完全可以是一个有效的函数名。

标识符

所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。

标识符可以是按照下列格式规则组合起来的一或多个字符:

  • 第一个字符必须是一个字母、下划线(_)或一个美元符号($)

  • 其他字符可以是字母、下划线、美元符号或数字

  • 不能把关键字、保留字、truefalsenull 用作标识符

关键字和保留字

以下就是 ECMAScript的全部关键字(具有特定用途):

break do instanceof typeof case else new var catch finally return void continue for switch while debugger* function this with default if throw delete in try

第 5 版在非严格模式全部保留字(不能用作标识符):

class enum extends super const export import

变量

定义变量时要使用 var 操作符(注意 var 是一个关键字),后跟变量名(即一个标识符),如:var message; 如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁。可以使用一条语句定义多个变量,把每个变量(初始化或不初始化均可)用逗号分隔开即可。

数据类型

基本数据类型:Undefined、Null、Boolean、Number和 String。

还有 1种复杂数据类型——Object(本质上是由一组无序的名值对组成的)。

typeof操作符

对一个值使用 typeof (检测给定变量的数据类型)操作符可能返回下列某个字符串:

  • undefined”——如果这个值未定义;
  • “boolean”——如果这个值是布尔值;
  • “string”——如果这个值是字符串;
  • “number”——如果这个值是数值;
  • “object”——如果这个值是对象或 null;
  • “function”——如果这个值是函数。

Undefined类型

在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined。

Null类型

从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回”object”的原因。如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。

Boolean类型

该类型只有两个字面值:true 和 false。这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。

需要注意的是,Boolean 类型的字面值 true 和 false 是区分大小写的。也就是说,True 和 False(以及其他的混合大小写形式)都不是 Boolean 值,只是标识符

虽然 Boolean 类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。要将一个值转换为其对应的 Boolean 值,可以调用转型函数 Boolean()。

Number类型

  1. 浮点数值(该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字)

  2. 数值范围(要想确定一个数值是不是有穷的,可以使用 isFinite()函数。这个函数在参数位于最小与最大数值之间时会返回 true)

  3. NaN(即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了))

  4. 数值转换(有 3 个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。第一个函数,即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值)

toString与String的区别

  1. toString()方法;数值、字符串、对象、布尔;都有toString方法;这个方法唯一能做的就是返回相应的字符串;其中null和undefined没有toString()方法。
  2. String()属于强制转换, null转换的结果为null;undefined转换的结果为undefined;其余的如果有toString()方法,即调用该方法,返回相应的结果;