ECMAScript 中有 6 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String、Symbol (new in ES 6,表示独一无二的值)。还有一种复杂数据类型-Object,Object 本质上是由一组无序的名值对组成的。

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。我们称这些类型的值为“原始值”。
如:JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变

typeof 操作符

对一个值使用 typeof 操作符可能返回下列某个字符串:

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

Undefined 类型

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

Null 类型

从逻辑角度看,null 值表示一个空对象指针,这也正是 typeof 操作符检测 null 时返回”object”的原因

Boolean 类型

布尔表示一个逻辑实体,可以有两个值:true 和 false

Number 类型

八进制,第一位必须是 0,然后是八进制数字序列(0 ~ 7)。如果字面值中的数值超出了范围,那么前导 0 将被忽略,后面的数值将被当作十进制数值解析。八进制字面量在严格模式下是无效的

1
2
3
var octalNum1 = 070; // 八进制的56
var octalNum2 = 079; // 无效的八进制数值——解析为79
var octalNum3 = 08; // 无效的八进制数值——解析为8

十六进制字面值的前两位必须是 0x,后跟任何十六进制数字(0 ~ 9 及 A ~ F)。其中,字母 A ~ F 可以大写,也可以小写。

1
2
var hexNum1 = 0xa; // 十六进制的10
var hexNum2 = 0x1f; // 十六进制的31

数值范围

由于内存的限制,ECMAScript 并不能保存世界上的所有数值,能够表示的最小数值保存在 Number.MIN_VALUE 中——在大多数浏览器中,这个值是 5e-324;能够表示的最大数值保存在 Number.MAX_VALUE 中——在大多数浏览器中,这个值是 1.7976931348623157e+308。如果某次计算的结果得到了超出 JavaScript 数值范围的值,那么这个数值会被自动转换为特殊的 Infinity(正无穷) 值(如果为负无穷大-Infinity)。

NaN

NaN,即非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。
isNaN()函数,用来判断这个参数是否“不是数值”

1
2
3
4
5
alert(isNaN(NaN)); // true
alert(isNaN(10)); // false(10是一个数值)
alert(isNaN("10")); // false(可以被转换成数值10)
alert(isNaN("blur")); // true(不能转换成数值)
alert(isNaN(true)); // false(可以被转换成数值1)

String 类型

字符串可以由双引号(”)或单引号(’)表示

字符字面量

字面量 含义
\n 换行
\t 制表
\b 退格
\r 回车
\f 进纸
\ 斜杠
\’ 单引号(’)
\” 双引号(”)
\xnn 以十六进制代码 nn 表示一个字符(其中 n 为 0 ~ F)。例如:\x41 表示”A”
\unnnn 以十六进制代码 nnnn 表示一个 Unicode 字符(其中 n 为 0 ~ F)。例如:\u03a3 表示希腊字符 Σ