数据类型

Undefined

undefined类型只有一个值,即undefined,它无法拥有方法和值。当使用var声明变量但未对其进行初始化时,变量值即为undefined。

1
2
3
4
5
var message;
alert(typeof(message)); //undefined
alert(typeof(msg)); //undefined
alert(message); //undefined
alert(msg); //报错ReferenceError: msg is not defined

对于未声明的变量以及声明但未初始化的变量,typeof操作符检测时都返回undefined。但是,二者有本质上的区别。

未声明的变量时不存在的,因此用alert弹出时,会报错;

声明过的变量时存在的,如果没有初始化,其值为undefined的。

但是两种情况下的变量又有一个共同点,即它们都不能参与真正的计算。

Null

null类型也只有一个值,即null,同样,它也无法拥有方法和值。

null表示空对象指针,因此用typeof操作符检测时将会返回“object”。当定义一个变量时,如果有意用它来保存对象,建议显示的将变量初始化为null.

1
2
var car = null;
alert(typeof(car)); //object

null和undefined都表示值得空缺,两者可以互换。用相等运算符“==”判断,二者是相等的。但是用严格相等运算符“===”,二者是不相等的。

1
2
null == undefined; //true
null === undefined; //false

Boolean类型

布尔类型只有两个字面值:true和false。这两个字面值区分大小写。

各数据类型对应布尔值的转换规则:

undefined,null,0,-0,NaN,""(空字符串)——这些值会转换成false;其他值都会转换成true。这个转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要。

1
2
3
4
var message = "Hello world!";
if(message){
    alert("Value is true");
}

Number类型

1. 整型直接量

10进制:最基本的数字字面量格式,在代码中直接输入。

1
var intNum = 55; //整数

8进制:以0开头,后面跟(0~7)数字序列。

1
2
3
var octalNum1 = 070; //八进制的56
 
var octalNum2 = 079; //无效的八进制,会忽略前导的0,被解析为79

16进制:以0x开头,后面跟任何十进制数字(0~9及A~F)。其中A~F可以小写。

1
var hexNum1 = 0xA; //十六进制的10

Javascript能识别十进制整型直接量和十六进制直接量,但是不完全支持八进制直接量,所以最好不要使用以0开头的整型直接量。

2. 浮点型直接量

浮点型直接量,即该数值中必须含有一个小数点,并且小数点后面必须至少有一位数字。

1
2
3
var floatNum1 = 1.1;
 
var floatNum3 = .1; //即0.1,有效,但不支持

浮点型直接量也可以用科学计数法表示。表示为:前面是一个数值(可以是整数也可以是浮点数),中间是一个大写或小写的e,后面是10的幂中的指数。

1
2
3
var floatNum4 = 3.12e7; //即3.12乘以10的7次方
 
var floatNum5 = 3.12e-7; //即3.12乘以10的负7次方

3. NaN

NaN,即非数值。用于表示一个本来要返回数值的操作未返回数值的情况。

在进行数值计算时:0除以0,无穷大除以无穷大,给负数做开方运算,运算符不是数字或无法转化为数字,这些情况都将返回NaN。

NaN的特性:NaN与任何值都不相等,包括其自身;任何涉及NaN的操作都会返回NaN。

1
2
3
alert(0 / 0); //NaN
alert(NaN / 10); //NaN
alert(NaN == NaN); //false

isNaN()函数,可以接受一个参数,用于检测参数是否“不是数值”。

这个函数在接收到一个值之后,会尝试将这个值转换为数值,如果能转换为数值的值会直接转换为数值,再进行判断。而任何不能被转换为数值的值都会返回true。

1
2
3
4
5
6
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("none")); //true
alert(isNaN(true)); //false. 布尔值,可转换为1
alert(isNaN("true")); //true. 字符串true
alert(isNaN("blue5")); //true. 会被转换为5

String类型

字符串类型,可以用单引号或者双引号来表示。单双引号不能混用,即单引号开头就应该以单引号结尾,双引号开头就应该以双引号结尾。

1
var str1 = "hello'; //语法错误,左右引号必须匹配

字符串直接量可以拆分为数行,但是每一行必须以反斜杠(\)结束。

1
2
3
var test_str = "hello, \
tom!";
alert(test_str); //hello, tom!

注意:在编译时,不能忽略行起始位置的空白字符。"\" 后的空白字符会产生奇怪的错误。虽然大多数脚本引擎支持这种写法,但它不是 ECMAScript 的标准规范。

可以使用 "+" 来连接长字符串,像下面这样:

1
2
var test_str = "hello, "+
               "tom!";

length属性表示字符串长度。

1
2
var test_str = "hello, tom";
alert(test_str.length);

Object

对象可以由new操作符后跟要创建的对象类型的名称来创建。

1
var o = new Object();

关于对象的其他内容,后续课程会详细介绍。

上一节:数据类型的概念

下一节:类型转换