JavaScript中分为简单数据类型(基本数据类型)和复杂数据类型。
简单数据类型:Undefined 、Null 、Boolean 、Number 、String 。
复杂数据类型 :Object 。
简单数据类型
Undefined
Undefined类型只有一个值,即特殊的undefined,使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。例如:var message;
alert(message == undefined) //true
Null
Null 类型只有一个值,即null,null值表示一个空对象指针,因此typeof操作符检测null值会返回object,在保存对象的变量还没有真正保存对象时,就应该明确的让该变量保存null值。例如:var message = null ;
alert(typeof null); //object
实际上undefined是派生自null值的:
alert(null == undefined) //true
Boolean
该类型只有两个值true和false ,要注意的是true和false是区分大小写的。ECMAScript中所有类型的值都有与这两个Boolean值等价的值,将一个值转化为其对应的Boolean值,可以调用转型函数Boolean(),例如:var message = "hello";
var mesBoolean = Boolean(message);
Number
分为整数和浮点数 。整数 :分为十进制、八进制(以0开头的数字)、十六进制(以0x开头的数字)。
浮点数:数值中必须包含一个小数点,并且小数点后面至少有一个数字。浮点数值的最高精度是17位,进行算数计算时其精度远远不如整数,例如0.1+0.2计算结果不是0.3,因此永远不要测试某个特定的浮点数值。
NaN:非数值,用来表示一个本来要返回数值的操作数未返回数值的情况。
NaN的特点:任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,包括NaN本身。ECMAScript定义了isNaN()函数,该函数接受一个参数帮我们确定这个参数是否“不是数值”。例如:
alert(isNaN(10));//false
alert(isNaN("red"));//true
数值转换:有3个函数可以把非数值转换为数值,number()、parseInt()、parseFloat()。其中number()可以用于任何数据类型,parseInt()和parseFloat()用于把字符串转换为数值。parseFloat()只解析十进制数值,而parseInt()还可以指定第二个参数,表示转换时使用的进制。例如:
var num = parseInt("0xAF",16) //175
String
用于表示字符串,字符串可以由双引号(“”)或单引号(‘’)表示。字符串的长度可以通过 length属性取得。例如:var message = "hello";
alert(message.length);//5
将值转换为字符串有两种方式:
a、数值、布尔值、对象、字符串值都有toString()方法,再调用数值的toString()方法时。该方法还可以传递一个参数:输出数值的基数,默认是十进制,例如:
var num = 10;
alert(num.toString());//"10"
alert(num.toString(2));//“1010”
b、由于toString()方法对null和undefined方法无效,在不确定要转换的值是不是null或undefined的情况下可以使用String()函数。例如:
var value1 = 10;
alert(String(value1));//"10"
复杂数据类型
Object
对象其实就是一组数据和功能的集合,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。 对象可以使用new操作符后跟要创建的对象类型的名称来创建,例如:var o = new Object();
所有引用类型的值都是Object的实例
检测变量的数据类型
基本数据类型采用typeof,typeof操作符可能返回下列某个字符串:
typeof适合基本类型及function检测,遇到null失效
- “undefined”——值未定义
- “boolean”——值是布尔值
- “string”——值是字符串
- “number”——值是数值
- “object”——值是对象或者null
- “function”——值是函数
例如:
var message = "hello";
alert(typeof message);//"string"
复杂数据类型采用instanceof操作符,返回值是false或者true,例如:
alert(person instanceof Object);//变量person是Object吗?
instanceof适合自定义对象,也可以用来检测原生对象,在不同的iframe和window间检测时失效