首页 > 代码库 > js高级程序设计--数据类型

js高级程序设计--数据类型

ECMAScript 中有 5 种简单数据类型(也称为基本数据类型): Undefined 、 Null 、 Boolean 、 Number、string和object、symbols;
typeof判断返回的数据类型Undefined 、 Boolean 、 Number、string、object(如果这个值是对象或null)、function;

注意:typeof 是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必需的;

null

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。这样一来,只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用

实际上, undefined 值是派生自 null 值的,因此 ECMA-262规定对它们的相等性测试要返回 true 

alert(null == undefined); //true

Boolean

数据类型                     转换为true的值                 转换为false的值
Boolean                             true                             false
String                        任何非空字符串 ""               (空字符串)

Number                任何非零数字值(包括无穷大)       0和 NaN 

Object                           任何对象                              null

Undefined                                                          undefined

Number

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此 ECMAScript会不失时机地将浮点数值转换为整数值

显然,如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存。同样地,如果浮点数值本身表示的就是一个整数(如 1.0),那么该值也会被转换为整数

NaN ,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

NaN 本身有两个非同寻常的特点

1、任何涉及 NaN 的操作(例如 NaN /10)都会返回 NaN ,这个特点在多步计算中有可能导致问题;

2、 NaN 与任何值都不相等,包括 NaN 本身;

针对 NaN 的这两个特点,ECMAScript 定义了 isNaN() 函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。 isNaN() 在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串 "10" 或 Boolean 值。而任何不能被转换为数值的值都会导致这个函数返回 true,总之就是讨厌数字;

数值转换

Number() 函数的转换规则如下

? 如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。
? 如果是数字值,只是简单的传入和返回。
? 如果是 null 值,返回 0。
? 如果是 undefined ,返回 NaN 。
? 如果是字符串,遵循下列规则:

如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即 "1"会变成 1, "123" 会变成 123,而 "011" 会变成 11(注意:前导的零被忽略了);

 如果字符串中包含有效的浮点格式,如 "1.1" ,则将其转换为对应的浮点数值(同样,也会忽略前导零);

 如果字符串中包含有效的十六进制格式,例如 "0xf" ,则将其转换为相同大小的十进制整数值;

如果字符串是空的(不包含任何字符),则将其转换为 0;

如果字符串中包含除上述格式之外的字符,则将其转换为 NaN 。

如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN ,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。

parseInt();

parseInt() 函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN ;也就是说,用 parseInt() 转换空字符串会返回 NaN ( Number() 对空字符返回 0)。如果第一个字符是数字字符, parseInt() 会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如, "1234blue" 会被转换为 1234,因为 "blue" 会被完全忽略。类似地, "22.5"会被转换为 22,因为小数点并不是有效的数字字符。如果字符串中的第一个字符是数字字符, parseInt() 也能够识别出各种整数格式(即前面讨论的十进制、八进制和十六进制数)。也就是说,如果字符串以 "0x" 开头且后跟数字字符,就会将其当作一个十六进制整数;如果字符串以 "0" 开头且后跟数字字符,则会将其当作一个八进制数来解析。

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(十六进制数)

paresFloat();

parseFloat() 也是从第一个字符(位置 0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,"22.34.5" 将会被转换为 22.34。

parseFloat() 只解析十进制值,因此它没有用第二个参数指定基数的用法;

如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零), parseFloat() 会返回整数;

String 类型

 

js高级程序设计--数据类型