×

ECMAScript 基础

ECMAScript 语法ECMAScript 变量ECMAScript 关键字ECMAScript 保留字ECMAScript 原始值和引用值ECMAScript 原始类型ECMAScript 引用类型

ECMAScript 运算符

ECMAScript 位运算符ECMAScript Boolean 运算符ECMAScript 乘性运算符ECMAScript 加性运算符ECMAScript 关系运算符ECMAScript 等性运算符ECMAScript 条件运算符ECMAScript 赋值运算符ECMAScript 逗号运算符

ECMAScript 语句

ECMAScript if 语句ECMAScript 迭代语句ECMAScript 标签语句ECMAScript break & continueECMAScript with 语句ECMAScript switch 语句

ECMAScript 函数

ECMAScript 函数概述ECMAScript arguments 对象ECMAScript Function 对象ECMAScript 闭包(closure)

ECMAScript 对象

ECMAScript 面向对象技术ECMAScript 对象应用ECMAScript 对象类型ECMAScript 对象作用域ECMAScript 定义类或对象ECMAScript 修改对象

ECMAScript 继承

ECMAScript 继承机制实例ECMAScript 继承机制实现

ECMAScript 6 入门

ECMAScript 6 简介ECMAScript 6 let和const命令ECMAScript 6 变量的解构赋值ECMAScript 6 字符串的扩展ECMAScript 6 正则的扩展ECMAScript 6 数值的扩展ECMAScript 6 数组的扩展ECMAScript 6 函数的扩展ECMAScript 6 对象的扩展ECMAScript 6 SymbolECMAScript 6 Proxy和ReflectECMAScript 6 二进制数组ECMAScript 6 Set 和 MapECMAScript 6 Iterator和for...of循环ECMAScript 6 Generator 函数ECMAScript 6 Promise对象ECMAScript 6 异步操作和Async函数ECMAScript 6 ClassECMAScript 6 修饰器(Decorator)ECMAScript 6 ModuleECMAScript 6 编程风格读懂 ECMAScript 规格ECMAScript 6 参考链接

ECMAScript 原始类型


本节介绍了ECMAScript的原始类型。

ECMAScript有5种原始类型(primitive type),即Undefined、Null、Boolean、Number和String。

typeof运算符

typeof运算符有一个参数,即要检查的变量或值。例如:

var sTemp = "test string";
alert (typeof sTemp);    //输出 "string"
alert (typeof 86);    //输出 "number"

对变量或值调用typeof运算符将返回下列值之一:

  • undefined - 如果变量是Undefined类型的
  • boolean - 如果变量是Boolean类型的
  • number - 如果变量是Number类型的
  • string - 如果变量是String类型的
  • object - 如果变量是一种引用类型或Null类型的

注释:您也许会问,为什么typeof运算符对于null值会返回"Object"。这实际上是JavaScript最初实现中的一个错误,然后被ECMAScript沿用了。现在,null被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

Undefined 类型

如前所述,Undefined类型具有唯一的值,即undefined。当声明的变量未初始化时,该变量的默认值是undefined。

var oTemp;

前面一行代码声明变量oTemp,没有初始值。该变量将被赋予值undefined,即undefined类型的字面量。可以用下面的代码段测试该变量的值是否等于undefined:

var oTemp;
alert(oTemp == undefined);

这段代码将显示"true",说明这两个值确实相等。还可以用typeof运算符显示该变量的值是undefined:

var oTemp;
alert(typeof oTemp); //输出 "undefined"

提示:值undefined并不同于未定义的值。但是,typeof运算符并不真正区分这两种值。考虑下面的代码:

var oTemp;

alert(typeof oTemp);  //输出 "undefined"
alert(typeof oTemp2);  //输出 "undefined"

前面的代码对两个变量输出的都是"undefined",即使只有变量oTemp2从未被声明过。如果对oTemp2使用除typeof之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。

例如,下面的代码将引发错误:

var oTemp;
alert(oTemp2 == undefined);

当函数无明确返回值时,返回的也是值"undefined",如下所示:

function testFunc() {
}

alert(testFunc() == undefined);  //输出 "true"

Null 类型

另一种只有一个值的类型是Null,它有唯一专用值null,即它的字面量。值undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等的。

alert(null == undefined);  //输出 "true"

尽管这两个值相等,但它们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象(在讨论typeof运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null。

Boolean 类型

Boolean类型是ECMAScript中最常用的类型之一。它有两个值true和false (即两个Boolean字面量)。

即使false不等于0,0也可以在必要时被转换成false,这样在Boolean语句中使用两者都是安全的。

var bFound = true;
var bLost = false;

Number 类型

ECMA-262中定义的最特殊的类型是Number类型。这种类型既可以表示32位的整数,还可以表示64位的浮点数。

直接输入的(而不是从另一个变量访问的)任何数字都被看做Number类型的字面量。例如,下面的代码声明了存放整数值的变量,它的值由字面量86定义:

var iNum = 86;

八进制数和十六进制数

整数也可以被表示为八进制(以8为底)或十六进制(以16为底)的字面量。八进制字面量的首数字必须是0,其后的数字可以是任何八进制数字(0-7),如下面的代码所示:

var iNum = 070;  //070 等于十进制的 56

要创建十六进制的字面量,首位数字必须为0,后面接字母x,然后是任意的十六进制数字(0到9和A到F)。这些字母可以是大写的,也可以是小写的。例如:

var iNum = 0x1f;  //0x1f 等于十进制的 31
var iNum = 0xAB;  //0xAB 等于十进制的 171

提示:尽管所有整数都可以表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果。

浮点数

要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用1.0而不是1)。这被看作浮点数字面量。例如:

var fNum = 5.0;

对于浮点字面量的有趣之处在于,用它进行计算前,真正存储的是字符串。

科学计数法

对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加e(或 E),后面加乘以10的倍数。例如:

var fNum = 5.618e7

该符号表示的是数56180000。把科学计数法转化成计算式就可以得到该值:5.618 x 107

也可以用科学计数法表示非常小的数,例如0.00000000000000008可以表示为8e-17(这里,10被升到-17次冥,意味着需要被10除17次)。ECMAScript默认把具有6个或6个以上前导0的浮点数转换成科学计数法。

提示:也可用64位IEEE 754形式存储浮点值,这意味着十进制值最多可以有17个十进制位。17位之后的值将被裁去,从而造成一些小的数学误差。

特殊的 Number 值

几个特殊值也被定义为Number类型。前两个是Number.MAX_VALUE和Number.MIN_VALUE,它们定义了Number值集合的外边界。所有ECMAScript数都必须在这两个值之间。不过计算生成的数值结果可以不落在这两个值之间。

当计算生成的数大于 Number.MAX_VALUE 时,它将被赋予值Number.POSITIVE_INFINITY,意味着不再有数字值。同样,生成的数值小于Number.MIN_VALUE 的计算也会被赋予值Number.NEGATIVE_INFINITY,也意味着不再有数字值。如果计算返回的是无穷大值,那么生成的结果不能再用于其他计算。

事实上,有专门的值表示无穷大,(如你猜到的)即Infinity。Number.POSITIVE_INFINITY的值为Infinity。Number.NEGATIVE_INFINITY的值为-Infinity。

由于无穷大数可以是正数也可以是负数,所以可用一个方法判断一个数是否是有穷的(而不是单独测试每个无穷数)。可以对任何数调用isFinite()方法,以确保该数不是无穷大。例如:

var iResult = iNum * some_really_large_number;

if (isFinite(iResult))
 {
    alert("finite");
}

else {
    alert("infinite");
}

最后一个特殊值是NaN,表示非数(Not a Number)。NaN是个奇怪的特殊值。一般说来,这种情况发生在类型(String、Boolean 等)转换失败时。例如,要把单词 blue转换成数值就会失败,因为没有与之等价的数值。与无穷大一样,NaN也不能用于算术计算。NaN的另一个奇特之处在于,它与自身不相等,这意味着下面的代码将返回false:

alert(NaN == NaN);  //输出 "false"

出于这个原因,不推荐使用NaN值本身。函数isNaN()会做得相当好:

alert(isNaN("blue"));  //输出 "true"
alert(isNaN("666"));  //输出 "false"

String 类型

String类型的独特之处在于,它是唯一没有固定大小的原始类型。可以用字符串存储0或更多的Unicode字符,有16位整数表示(Unicode是一种国际字符集,在本教程的后续章节将讨论它)。

字符串中每个字符都有特定的位置,首字符从位置0开始,第二个字符在位置1,依此类推。这意味着字符串中的最后一个字符的位置一定是字符串的长度减1:

字符串的长度和字符的位置

字符串字面量是由双引号(")或单引号(')声明的。而Java则是用双引号声明字符串,用单引号声明字符。但是由于ECMAScript没有字符类型,所以可使用这两种表示法中的任何一种。例如,下面的两行代码都有效:

var sColor1 = "red";
var sColor2 = 'red';

String类型还包括几种字符字面量,Java、C和Perl的开发者应该对此非常熟悉。

下面列出了ECMAScript的字符字面量:

字面量 含义
n 换行
t 制表符
空格
r 回车
f 换页符
\ 反斜杠
' 单引号
" 双引号
nnn 八进制代码nnn表示的字符(n是0到7中的一个八进制数字)
xnn 十六进制代码nn表示的字符(n是0到F中的一个十六进制数字)
unnnn 十六进制代码nnnn表示的Unicode字符(n是0到F中的一个十六进制数字)

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)