基本数据类型:undefined、null、string、Boolean、number
复杂数据类型:object
object的属性以无序的名称和值对的形式 (name : value) 来定义
鉴于ECMAScript是松散型的,因此需要一种手段来检测给定的变量的数据类型-----typeof就可以负责提供这方面的信息的操作符。
对一个值typeof操作符可能返回下列某个字符串:
"undefined"-----------如果这个值未定义
“boolean”-------------如果这个值是布尔值
"string"----------------如果这个值是字符串
"number"--------------如果这个值是数值
"object"--------------如果这个值是对象或NULL
"function"--------------如果这个值是函数
var message = "some string"; alert(typeof message); //string alert(typeof 95); //number
Undefined类型只有一个值,即特殊的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined
var message; //声明变量但未初始化 alert(typeof message); //undefined alert(message==undefined); //true; alert(typeof (message==undefined));//boolean
包含undefined值的变量与尚未定义的变量是不一样的,以下这个例子可以说明:
var message; //这个变量声明之后没有初始化,默认取重了undefined值 alert(message); //undefined alert(age) ; //报错
而实际上,对未初始化和未声明的变量执行typeof操作符结果都返回undefined值
var message; //这个变量声明之后没有初始化,默认取重了undefined值 alert(typeof message); //undefined alert( typeof age) ; //undefined
Null类型是第二个只有一个值的数据类型,这个特殊的值是NULL,从逻辑角度来看,null值表示一个空对象指针.
使用typeof来检测NULL值时会返回objcect
var car = null; //声明一个变量并初始化为NULL alert(typeof car); //返回object
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了,例如:
if(car != null) { //对car对象执行某些操作 }
实际上,undefined值派生自null,
alert(null==undefined); //true
该类型只有两个值:true和false这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。
需要注意的是:Boolean类型的字面值是区分大小写的,也就是说,True和False(以及其他形式的大小写混合)都不是Boolean值,只是标识符。
虽然Boolean类型的字面值只有两个,但Javascript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),例如:
var mess = "Hello World"; var messBoolean =Boolean(mess); alert(messBoolean); //true
在这个例子中,字符串message被转换成了一个Boolean值,该值被保存在messageAsBoolean变量中。可以对任何数据类型的值调用 Boolean()函数,而且总会返回一个Boolean值。至于返回的这个值是true还是false,取决于要转换值的数据类型及其实际值。下表给出 了各种数据类型及其对象的转换规则。
这些转换规则 对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要,例如:
var message = "Hello World"; if(message){ alert("Value is true"); alert(message); //Hello World }
因为字符串message被自动转换成了对应的Boolean值(true).由于存在这种自动执行的Boolean转换,因此确切地知道在流控制语句中使用的是什么变量至关重要,错误的使用一个对象而不是一个Boolean值,就有可能彻底改变应用程序的流程
在进行算术运算时,所有的八进制和十六进制表示的数值最终将衩转换成十进制数值
所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
浮点数值的最高精度是17位,因此在算数计算时其精度远远不如整数
例如:0.1+0.2的结果不是0.3,而是0.30000000000000004
var a=0.1; var b=0.2; alert(a+b);
结果如图:
var a=0.1; var b=0.2; //alert(a+b); if(a+b==0.3){ alert("结果是0.3"); }else{ alert(a+b); }
结果如上图
由于内在的限制,ECAMScript并不能保存世界上所有的数值。
ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中----在大多数浏览器中,这个值是5e-324;
能够表示的最大数值保存在Number.MAX_VALUE中----在大多数浏览器中,这个值是1.7976931348623157e+308;
var m=Number.MIN_VALUE; alert(m); //最小值 var x=Number.MAX_VALUE; //最大值 alert(x);
如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换为特殊的Infinity值.具体来说,如果这具数值是负数,则会转换成-Infinity(负无穷),
如果这具数值是正数,则会转换成Infinity(正无穷)
如果某次计算的结果得到Infinity(负无穷)或Infinity(正无穷)的值,那么该值将无法继续参与下一次计算,因为Infinity不是能够参与计算的数值.
确定一个数值是不是有空的可以用isFinite()函数,这个函数在参数位于最小与最大数值之间时会返回true
例如:
alert(Infinity); //Infinity alert(typeof Infinity); //number var result =Number.MAX_VALUE + Number.MAX_VALUE; alert(isFinite (result)); //false
得到负无穷和正无穷
alert(Number.NEGATIVE_INFINITY); //负无穷-infinity alert(Number.POSITIVE_INFINITY); //正无穷 infinity
非数值 Not a Number,是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
例如:在其它的编程语言中,任何数值除以0,都会导致错误,从而停止代码执行,但在ECMAScript中,任何值除心0,会返回NaN,因此不会影响其它代码执行。
NaN本身有两个非同寻常的特点。
例如:
alert(NaN/10); //NaN
alert(NaN == NaN); //false
alert(10/0); //正数除以0,返回Infinity alert(-10/0); //负数除以0,返回-Infinity alert(0/0); //只有0除以0才返回NaN
针对 NaN的这2个特点,ECMAScript定义了isNaN()函数.这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收一个值之后,会尝试将这个值转换为数 值。某些不是数值的值会直接转换为数值,例如字符串”10“或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true
例如:
alert(isNaN(NaN)); //true alert(isNaN(10)); //false(10是一个数值) alert(isNaN("10")); //false(可能被转换为数值10) alert(isNaN("blue")); //true(不能被转换为数值) alert(isNaN("bule123")); //ture(不能被转换为数值) alert(isNaN(true)); //false(可能被转换为数值1)
有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。这3个函数对于同样的输入会返回不同的结果。
● 如果是Boolean值,true和false将分别被替换为1和0
● 如果是数字值,只是简单的传入和返回
● 如果是null值,返回0
● 如果是undefined,返回NaN
● 如果是字符串,遵循下列规则:
●如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。
var num1 = Numbe
新闻热点
疑难解答