ecmascript 中有5种简单的数据类型,也被称为基本数据类型:undefined、null、boolean、number和string。还有一种复杂的数据类型——object。
undefined 类型
在使用var 声明变量但未对其进行初始化时,这个变量的值就是undefined。如:
var number;document.write(number); //undefined
如果没有声明变量则会出现下面这种错误。如:
document.write(str); //错误
但是用typeof对其进行执行时,不管有没有声明都会返回undefined 值。如:
var num;document.write(typeof num); //undefineddocument.write(typeof str); //undefined
null 类型
使用typeof检测null 时会返回object。如:
var num = null;document.write(typeof num); //object
实际上undefined 值是派生自null 值的,因此他们相等都会返回true。如:
alert(null == undefined); //true
这里要注意的是,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null 值,此举有助于区分null 和 undefined。如:
var num1 = null;var num2;document.write(typeof num1 + + typeof num2); //object undefined
boolean 类型
要将一个值转换为其对应的boolean 值,可以使用转型函数boolean()。如:
var str = helloworld;document.write(boolean(str)); //true
《javascript高级编程设计》一书中的3.4.4中给出了关于各种数据类型及其对应的转换规则表格。大概有以下几种:
数据类型为string 时,任何非空字符串都会转换为true; 数据类型为number 时,除了0 和nan 会被转换为false 之外,其他都会转换为true; 数据类型为object 时,除了null 之外,都会转换为true; 数据类型为undefined 时,n/a 会被转换为true,undefined 会被转换为false;
这里要注意的是,if 语句经常使用自动执行响应的boolean 转换作为条件。如:
var str = helloworld;if (str){ document.write(hellothere);} //hellothere
number 类型
除了可以以十进制表示之外,整数还可以通过八进制或者十六进制的字面值来表示,其中八进制字面值的第一位必须是0,然后是八进制数字序列(0~7)。如:
var num1 = 070; //八进制的56var num2 = 032; //八进制的32var num3 = 079; //错误的八进制(>7)var num4 = 09; //错误的八进制(>7)
十六进制字面值的前两位必须是0x,后面跟任何十六进制数(0~9 及 a~f)。如:
var num1 = 0xa; //十六进制的10var num1 = 0xa; //也是十六进制的10(字母不区分大小写)
浮点数值
这里要注意的是,永远不要比较特定的浮点数值。如:
var a = 0.1;var b = 0.2;if (a + b == 0.3){ document.write(you are right)} //因为0.1 加上0.2 实际上等于0.30000000000000004
数值范围
ecmascript 能够表示的最大和最小数值保存在number.max_value 和number.min_value 之中。要想确定一个数值是不是有穷的,可以使用isfinite()函数。如:
document.write(isfinite(number.max_value + number.max_value)); //false
nan
0 除以0 会返回nan,正数除以0 会返回infinity,复数则会返回-infinity。其次,nan 与任何数值都不相等,包括它本身。另外函数isnan()可以帮助我们确定这个参数是否“不是数值”。如:
document.write(isnan(a)); //true;document.write(isnan(324)); //false;document.write(isnan(true)); //false;document.write(isnan(false)); //false;document.write(isnan(nan)); //true;
数值转换
有三个函数可以把非数值转换为数值:number()、parseint()、parsefloat()。
number()的转换规则如下:
如果是boolean 值,true 和false 会被转换为1 和0。
如果是数字值,则不变。
如果是null 值,则转换为0。
如果是undefined,返回nan。
如果是字符串则遵循下列规则:
如果只有数字,则转换为十进制数值。 如果是浮点格式,则将其转换成对应的浮点数值。同样也会忽略前导零。 如果是十六进制格式则会转换成十进制数。 如果字符串是空的,则会转换成0。 其他情况则会转换为nan。具体看下面的例子:
document.write(number(true)); //1document.write(number(false)); //0document.write(number(789)); //789document.write(number(null)); //0document.write(number(undefined)); //nandocument.write(number(02.0942)); //2.0942document.write(number(0xa)); //10document.write(number()); //0document.write(number(fdsa)); //nan
parseint()的转换规则如下:
如果第一个字符不是数字字符或者符号,parseint()会返回nan。 用parseint()转换空字符串会返回nan。 如果第一个字符是数字字符,它会继续解析第二个字符,直到遇到了一个非数字字符.
下面是具体的例子:
document.write(parseint(fds)); //nandocument.write(parseint()); //nandocument.write(parseint(1111112abc)); //1111112document.write(parseint(-1111112abc)); //-1111112document.write(parseint(+1111112abc)); //-1111112document.write(parseint(0xa)); //10document.write(parseint(0022.00009)); //22document.write(parseint(070)); //ecmascript 3认为是56(八进制), ecmascript 5认为是70(十进制)
另外需要注意的是,ecmascript 5已经不具备解析八进制值的能力了所以为了消除这个问题,可以为这个函数提供第二个参数:转换时使用的基数(多少进制),具体如下:
document.write(parseint(070,10)); //70document.write(parseint(070,8)); //56document.write(parseint(070,16)); //112
多数情况下,最好默认设置成10进制。
parsefloat()的转换规则如下:
与parseint()类似,不同的是字符串第一个小数点是有效的,而从第二个小数点开始包括第二个小数点是无效的。 他不能解析十六进制数值!!! 他只能解析十进制数值!!! 他没有用第二个基数来指定进制的用法。
下面是具体的例子:
document.write(parsefloat(421)); //421document.write(parsefloat(0421.32.1)); //421.32document.write(parsefloat(0xaafd)); //0document.write(parsefloat(070)); //70document.write(parsefloat(070abc)); //70document.write(parsefloat()); //nandocument.write(parsefloat(abc)); //nan
string 类型
要把一个值转换成字符串有两种方式。第一种是使用几乎每个值都有的tostring()方法。如下:
document.write((533).tostring(10)); //533document.write((0xa).tostring(10)); //10document.write((0xa).tostring(2)); //1010document.write((true).tostring(10)); //truedocument.write((false).tostring(10)); //false
另外需要注意的是,null 和 undefined 不能转换。
document.write((null).tostring(10)); //document.write((undefined).tostring(10)); //
如果不知道需要转换的数值是否是null 或者undefined 则应该使用转型函数string(),如果是null 会返回null如果是undefined 会返回undefined。如下:
document.write(string(null)); //nulldocument.write(string(undefined)); //undefined
另外在下一篇文章中再详细介绍object 类型。
以上就是关于javascript数据类型的简单介绍,希望对大家学习javascript数据类型有所帮助。