数据类型
Undefined
undefined类型只有一个值,即undefined,它无法拥有方法和值。当使用var声明变量但未对其进行初始化时,变量值即为undefined。
1 2 3 4 5 | var message;alert(typeof(message)); //undefinedalert(typeof(msg)); //undefinedalert(message); //undefinedalert(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; //truenull === 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; //八进制的56var 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); //NaNalert(NaN / 10); //NaNalert(NaN == NaN); //false |
isNaN()函数,可以接受一个参数,用于检测参数是否“不是数值”。
这个函数在接收到一个值之后,会尝试将这个值转换为数值,如果能转换为数值的值会直接转换为数值,再进行判断。而任何不能被转换为数值的值都会返回true。
1 2 3 4 5 6 | alert(isNaN(NaN)); //truealert(isNaN(10)); //falsealert(isNaN("none")); //truealert(isNaN(true)); //false. 布尔值,可转换为1alert(isNaN("true")); //true. 字符串truealert(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(); |
关于对象的其他内容,后续课程会详细介绍。