Undefined
Undefined只有一个特殊值,即undefind,在使用var申明变量但没有对其赋值时,这个变量值就是undefined,例如:
var message;
message == undefined // true
Null
Null是JS中第二个只有一个值的数据类型,其值为null。null值表示一个空对象指针,使用typeof检测会返回object,例如:
var car = null;
typeof car // 'object'
undefined派生自null,所以null == undefined会返回true。
Boolean
布尔类型返回两个值,即true和false
数据类型与布尔值之间的转换
| 数据类型 | 转换为true值 | 转换为false值 |
|---|---|---|
| Boolean | true | false |
| String | 任何非空字符串 | "" (空字符串) |
| Number | 任何非零数值(包括无穷大) | 0和NaN |
| Object | 任何对象 | null |
| Undefined | 不适用 | undefined |
Number
使用number类型来表示正数与浮点数。number类型除了可以表示10进制数外,还可以表示8进制,16进制等。
JS中可以保存+0和-0。+0 == -0 // true
- 浮点数 & 科学计数法
浮点数保存需要的内存,是正数值的2倍。所以JS中不符合浮点数规则的数会自动被转换为正数
var float1 = 1. // 将被解析为整数 1
var float2 = 10.00 // 将被解析为整数 10
对于极大或者极小的数,可以使用e科学计数法表示
var float2 = 3.14e7 // 表示 3.14*10的7次方
var float2 = 3.14e-7 // 表示 3.14*10的-7次方
浮点数的最高精度是17位,但是做数学运算的时候,其精度远远不及整数
var a = 0.1+0.2 // 并不是输出0.3 而是 0.30000000000004
所以,最好不要用浮点数做运算和做判断。
JS中能够表达的最大的值,保存在Number.MAX_VALUE,表达的最小的值,保存在Number.MIN_VALUE中。
Number.MAX_VALU // 1.7976931348623157e+308
Number.MIN_VALUE //5e-324
如果某次运算超出了JS的数值计算范围,则会返回Infinity,负数为-Infinity(负无穷),正数为Infinity(正无穷),可以使用isFinite()函数检测是不是位于最大值和最小值之间,该函数返回布尔值
- NaN & isNaN
NaN表示非数值。这个值表示一个要返回数值的操作并未返回数值。任何与NaN的操作,都会返回NaN,比如NaN/10 // NaN,NaN不与任何值相等,包括它自己,NaN == NaN // false
isNaN函数,帮助我们确定这个参数是否'不是一个数值',任何不能被转换为数值的值,都会导致这个函数返回true
isNaN(NaN) // true
isNaN(10) // false 10是一个数
isNaN('10') // false 可以被转换为number
isNaN('blue') // true 不能被转换为number
isNaN(true) // false 可以被转换为数值 1
尽管有点儿不可思议,但
isNaN()确实也适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转 换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。 而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。
- 数值转换
Number() parseInt() parseFloat()
Number可以用于任何数据类型,另外两个则专门用于把字符串转成数字,这3个函数对同样的输入会返回不同的结果。
Number()函数的转换规则如下。
- 如果是
Boolean值true和false将分别被转换为1和0。 - 如果是数字值,只是简单的传入和返回。
- 如果是
null值,返回0。 - 如果是
undefined,返回NaN。 - 如果是字符串,遵循下列规则:
1、如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
2 、如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);
3 、如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
4 、如果字符串是空的(不包含任何字符),则将其转换为 0;
5 、如果字符串中包含除上述格式之外的字符,则将其转换为NaN。 - 如果是对象,则调用对象的
valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
字符串"Hello world!"会被转换为NaN,因为其中不包含任何有意义的数字值。空字符串
会被转换为 0。字符串"000011"会被转换为 11,因为忽略了其前导的零。最后,true值被转换为 1。
parseInt()忽略字符串的空格,找到第一个非空字符串,如果第一个字符不是数字字符或者符号,则返回NaN。用parseInt()转换空字符串会返回 NaN(Number()对空字符返回0)。如果遇到非数字字符,则停止解析。同时parseInt也能够字符解析8进制(ES3 ES5不具备解析8进制的能力),16进制等。
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
同时,parseInt可以传入第二个参数,具体按照什么进制来转换
var n1 = parseInt(70,10) // 按照10进制解析
var n2 = parseInt(70,8) // 按照8进制解析
parseFloat与parseInt差不多,只是parseFloat只能解析10进制的数,所以没有第二个参数。
String
- toString方法
Number、Boolean、Object和String值(没错,每个字符串也都有一个 toString()方法,该方法返回字 符串的一个副本)都有toString()方法。但null和undefined值没有这个方法。Number调用toString可以传递参数,即需要转换的字符基数。默认按照10进制输出
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // 2进制 "1010"
alert(num.toString(8)); // 8进制 "12"
alert(num.toString(10)); // 10进制 "10"
alert(num.toString(16)); // 16进制 "a"
- String方法
String函数转换规则
1 、 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
2 、 如果值为null,则返回'null'
3 、 如果值为undefined,则返回'undefined'
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"
Object
Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
Object的每个实例都具有下列属性和方法。
-
constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是Object()。 -
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty("name"))。 -
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型 -
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符=串形式指定。 -
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。 -
toString():返回对象的字符串表示。 -
valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。