ECMAScript中有5种基本数据类型:Number、String、Boolean、Undefined、Null。
查看类型操作符——typeof
用于检测给定变量的数据类型,它的值包括:”number“、”string“、”boolean“、”undefined“、”object“、和”function“。
特殊的,当调用typeof null会返回“object”。
Number类型
用来表示整数和浮点数,整数可以用十进制,八进制和十六进制表示,八进制的第一位必须是零,然后八进制数字为0~7,如果超过范围,那前导零会被忽略,后面的值当作十进制解析:
var num1 = 070; //八进制的56
var num2 = 079; //无效的八进制数值,解析为79
var num3 = 08; //无效的八进制数值,解析为8
八进制在严格模式下是无效的,会导致js引擎抛出错误
十六进制前两位是0x,后跟09及AF
浮点数
保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机的将浮点数值转换为整数值:
var fnum1 = 1.0; //小数点后面没有数字————解析为1
var fnum2 = 10.0; //整数————解析为10
浮点数的 最高 精度是17位小数,但在进行算数计算时其精精确度远远不如整数。如0.1加0.2的结果不是0.3,而是0.300…0004。所以永远不要测试某个特定的浮点数值。
Infinity
用于代表超出JavaScript处理范围的数值,但Infinity依然是一个数字。js能表示的最小数值是5e-324,最大数值是1.7976931348623157e+308,分别保存在Number.MIN_VALUE和Number.MAX_VALUE中,当超过这个范围就用正负Infinity表示,可以使用isFinite()函数判定,当在最大最小范围之间则返回true。
特殊的:
-
正数除以0为Infinituy,负数除以0为-Infinituy。0除以0为NaN。
-
infinity与任何操作数执行任何算数运算的结果,都是 Infinity
-
将正负Infinity相加,也不会得到0,而是会得到一个叫做NaN(Not A Number)的东西
Infinity - Infinity; //NaN -Infinity + Infinity; //NaN
NaN
属于数字类型,是一种特殊的数字。
-
任何涉及NaN的操作都会返回NaN。
-
NaN与任何值都不相等,包括NaN本身
NaN ==NaN; //false
String类型
在JavaScript中,一对双引号或单引号之间的任何值都会被视为一个字符串。1是数字,“1”则是字符串。
字符串拼接:在字符串之间使用加号是一个字符串拼接操作,即:
var str = "one" + "two"; //"onetwo"
字符串转换
将一个数字字符串用于算术运算中的操作数时,该字符串会 在运算中被当做数字类型来使用。(加法运算不适用)
var str = '1';
str = str * 2;
console.log(str); //2
所以有些时候我们想将数字字符串转换为数字只需将该字符串与1相乘即可。(用parseInt方法更好)。
当转换失败,会得到NaN
console.log(str = "123abc" * 1); //NaN
当我们想将其他类型转换为字符串是,只需将其与空字符串连接即可。
typeof ("" + 1); // string
还可以使用toString()方法,但null和undefined没有此方法,在不确定是不是null和undefined的情况下,可以使用转型函数String(),能够将任何类型的值转换成字符串。
Boolean类型
只包含true和false两种字面值。下表给出各种数据类型及其对应的转换规则。
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
在进行一个非 布尔值上执行逻辑运算,该值会在计算期间会根据以上转换规则被转换为布尔值。
逻辑运算符优先级
!的优先级最高,然后是先&&后||
Undefined类型
在使用var声明变量但未初始化时,这个变量即使undefined。
对未初始化的变量执行typeof操作符会返回undefined值,而对为声明的变量执行typeof操作符同样也会返回undefined的值
Null类型
表示一个空对象指针,用typeof操作符检测null值会返回“object”
当我们对null和undefined执行某种算数运算时,结果截然不同
console.log(1 + undefined); //NaN
console.log(1 + null); //1
特殊的:undefined的值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
console.log(null == undefined); //true