JavaScript总共有7种数据类型:
基本数据类型:number,string,boolean
复合数据类型:object(对象,数组,还有一些专用对象如:Date,Error,RegExp)
函数数据类型:function
特殊数据类型:null,undefined
var a = 1;
var b = 'abc';
var c = true;
var d = new Date();
var e = function(){
console.log('This is a function!');
};
var f;
var g = null;
console.log( typeof(a) );//number
console.log( typeof(b) );//string
console.log( typeof(c) );//boolean
console.log( typeof(d) );//object
console.log( typeof(e) );//function
console.log( typeof(f) );//undefined
console.log( typeof(g) );//object
JavaScript中,typeof运算符将报告null值为Object类型,而非null类型,这点潜在的混淆是为了向下兼容
number类型包含2个特殊的值,一个为NaN,另一个为Infinity
NaN:当一个运算产生了未定义的结果或该运算发生错误,则返回一个非数字的特殊值:NaN
var num = 0/0;
console.log(num);//NaN
NaN不和任何数值相等,包括它本身
var a = NaN;
var b = NaN;
console.log(a == b);//false
Infinity:当一个浮点数超过了JavaScript所能表示的最大值时,其结果为一个特殊的无穷大值:Infinity
var a = 9e999999;
console.log(a);//Infinity
null类型只包含一个特殊的值null(通常看做object类型的一个特殊值,表示空对象)
null:表示无值,有别于其他所有值, 如果一个变量的值为null,表示该变量的值不是一个有效的对象,数字,字符串...
undefined类型只包含一个特殊的值undefined
undefined:表示1,未定义的数据 2,定义未赋值的数据 3,和不存在的属性
var a;
console.log(a);//undefined
console.log(Math.abcdef);//undefined
在使用typeof方法判断object类型时,即使Date和Array是两种不同的对象,结果仍然都为object
此时需要使用对象的constructor属性区分具体对象类型
var date = new Date();
console.log(date.constructor);
输出结果为:
function Date(){
[native code]
}
再来看一个例子
var str = "123";
console.log(str.constructor == String);//true
var array = [1,2,3];
console.log(array.constructor == Array);//true
当然也可以使用instanceof关键字
var date = new Date();
console.log(date instanceof Date);//true