JS数据类型
JavaScript有5种简单数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂数据类型:Object。
Undefined类型
Undefined类型只有一个值,即undefined,在使用var声明变量但未对其初始化时,该变量的值就是undefined。例:
var x;
console.log(x === undefined); //true
当使用typeof操作符进行数据类型判断时,Undefined类型返回字符串”undefined”。但是还有一种情况下也返回”undefined”:当变量尚未声明,即不存在时,也返回”undefined”。例:
var x;
console.log(typeof x); //undefined
console.log(typeof y); //undefined
Null类型
Null类型也只有一个值:null。null值表示一个空对象指针,故使用typeof操作符检测null值时会返回”object”,例:
var x = null;
console.log(typeof x); //object
对于null和undefined这两个值,它们有这样的关系:
console.log(null == undefined); //true
对用于保存对象的变量,当其尚未赋值时,为其初始化值为null,这样做不仅可以体现null作为空指针对象的惯例,还可以进一步区分undefined和null。
Boolean类型
该类型只有两个字面值:true和false,其区分大小写,即True和False不是Boolean值,只是变量标识符。要将一个值转换为对应的Boolean值,可使用函数Boolean(),在如if语句这样的判断中,会自动执行Boolean转换,举几个返回false的例子:
Boolean(false); //false
Boolean(""); //false
Boolean(0); //false
Boolean(NaN); //false
Boolean(null); //false
Boolean(undefined); //false
Number类型
该类型使用IEEE754格式来表示整型和浮点数值。最基本的数值字面量格式是十进制整数。八进制字面量的第一位必须是0,然后是八进制数字序列0~7,而如果输入无效的八进制数,如:079,则解析为十进制数79,严格模式下八进制字面量无效。十六进制字面值的前两位必须为0x,后跟任意十六进制数字序列0~9和A~F,字母大小写均可。
浮点数中值得注意的一点是其最高精度是17位小数,但在进行算术计算时其精度远不如整数。例:0.1+0.2的结果不是0.3,而是0.30000000000000004!
Number(),parseInt()和parseFloat()三个函数可以把非数值转换为数值,在此不作介绍。
String类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号”“或单引号”表示。
除了null和undefined以外。其他的值都有一个toString()方法,这个方法返回相应值的字符串表现。此外,还可以使用转型函数String()。
Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如:
var o = new Object();
数据类型判断
前面提到过可以使用typeof来判断数据类型,但这个方法并不能准确判断出所有的类型。除此之外,还有一个操作符:instanceof,其用于判断某个对象是什么类型的对象。由此我们可以做一些判断来判断各个数据类型:
//判断String,Boolean,Number和Undefined类型时,使用typeof操作符即可
//以判断String类型为例
function isString(str) {
return typeof str == "string";
}
//判断Object类型
function isObject(obj) {
return obj instanceof Object;
}
//判断Null类型
function isNull(x) {
if(typeof x == "object") {
if(x instanceof Object == false) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}