《JavaScript 高级程序设计》数据类型介绍学习笔记

数据类型

JavaScript中有5中基本数据类型:Undefined, Null, Boolean, Number和String,还有一种复杂数据类型---Object。JavaScript不支持任何创建自定义类型的机制,而所有值都将是上述6种类型之一。

typeof操作符----检测给定变量的数据类型

"undefined"---“该值未定义”

"boolean"-----“该值是布尔值”

"string"--------“该值是字符串”

"number"------“该值是数值”

"object"--------“该值是对象或null”

"function"-------“该值是函数”

var message = "some string";
alert(typeof(message));   //"string"
alert(typeof message);  //"string"
alert(typeof 12);  //"number"

Number类型

最基本的数值字面量格式是十进制整数,除了以十进制表示外,整数还可以通过八进制(以8为基数)或十六进制(以16为基数)的字面值来表示。

其中,八进制字面值的第一位必须是零(0),然后是八进制序列(0~7),如果字面值中的数值超出了范围,那么前导零将被忽略,后面的值被当做十进制的数值解析。

var octalNum1 = 070;  //八进制的56
var octalNum2 = 079; //无效的八进制值---解析为十进制的79
var octalNum3 = 08; //无效的八进制值---解析为十进制的8

十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~F),其中A~F可以是大写也可以是小写。

var hexNum1 = 0xA; //十六进制的10
var hexNum2 = 0x1f; //十六进制的31

浮点数值

在默认情况下,ECMAScript会将那些小数点后面带有6个零以上的数值转换为以e表示法表示的数值(例如,0.0000003会被转换成3e-7)。浮点数的最高精度是17位,但在进行算术计算时远不如整数。例如,0.1+0.2的结果不是0.3,而是0.30000000000000004,这个小小的舍入误差会导致无法测试特定的浮点数值。例如:

if(a+b == 0.3){ //不要做这样的测试
  alert("You got 0.3");
}

因此,永远不要测试某个特定的浮点数值。

数值范围

由于内存限制,ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中,在大多数浏览器中,这个数值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中,在大多数浏览器中,这个值是1.7976931348623157e+308。如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。具体来说,如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个值是正数,则会被转换成Infinity(正无穷)。

要想确定一个数值是不是有穷的(换句话说,是不是位于最小和最大的数之间),可以使用isFinite()函数,这个函数在参数位于最小与最大数值之间时会返回true,如下例所示:

var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false

数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。Number()函数可以用于任何数据类型,而另外连个函数则专门用于把字符串转换为数值。由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用的是parseInt()函数。

parseInt()函数在转换为字符串的时候更多的是看其是否符合数值模式,它会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或负号,parseInt()就会返回NaN。也即用parseInt()转换空字符串会返回NaN(Number()对空字符串返回0)。如果第一个字符串是数字字符,parseInt()会继续解析第二个字符,直至解析完所有字符或遇到了一个非数字字符。例如,“1234blue”会被转换为1234,“22.5”会被转换为22,因为小数点并不是有效的数字字符。

parseIn()能够识别朱各种整数格式(即十进制、八进制、十六进制)。也就是说,如果字符串以“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(十六进制)

为了避免错误的解析,建议无论在什么情况下都明确指定基数---特别是像下面这样处理八进制的时候:

var num1 = parseInt("010"); //8(按八进制解析)
var num2 = parseInt("010", 8); //8(按八进制解析)
var num3 = parseInt("010", 10); //10(按十进制解析)

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

除了第一个小数点有效之外,parseFloat()与parseInt()的 第二个区别在于它始终都会忽略前导的0。parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格式的字符串始终会被转成0。由于parseFloat()只解析十进制值,因此它没有用第二个参数 指定基数的用法。最后还要注意一点,如果字符串包含的是一个可解析为整数的数(没有小数点,或小数点后都是0),parseFLoat()会返回整数。以下是几个典型示例:

var num1 = parseFLoat("1234blue"); //1234(整数)
var num2 = parseFLoat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000











猜你喜欢

转载自blog.csdn.net/qq_36595013/article/details/80272945