js总共有7种数据类型:
基本数据类型:number,string,boolean
复合数据类型:object(对象,数组,还有一些专用对象如:Date,Error,RegExp)
函数数据类型:function
特殊数据类型:undefined,null
var a = 1;
var b = 'abd';
var c = true;
var d = new Date();
var e = function f(){alert(123);};
var f;
var g = null;
alert(typeof(a)+';'+typeof(b)+';'+typeof(c)+';'+typeof(d)+';'+typeof(e)+';'+typeof(f)+';'+typeof(g));
结果为:
number;string;boolean;object;function;undefined;object
Jscript中,typeof运算符将报告null值为Object类型,而非类型null。这点潜在的混淆是为了向下兼容。
number类型包含2个特殊的值,一个为NaN,另一个为Infinity
NaN:当一个运算产生了未定义的结果或该运算发生错误,则返回一个非数字的特殊值,js输出为NaN
var a = 0/0;
alert(a);
结果即为:NaN
NaN不和任何数值相等,包括它本身
var a = NaN;
if(a!=a){
alert('!=');
}
结果为:!=
Infinity:当一个浮点数超过了js所能表示的最大值时,其结果为一个特殊的无穷大值,js将它输出为Infinity
var a = 9e99999999999999999999999999999999;
alert(a);
结果即为:Infinity
null类型只包含一个特殊的值null(通常看做object的一个特殊值,表示空对象)
null:表示无值,有别于其他所有值, 如果一个变量的值为null,表示该变量的值不是一个有效的对象,数字,字符串...
undefined类型只包含一个特殊的值undefined
undefined:表示1,未定义的数据 2,定义未赋值的数据 3,和不存在的属性
var a;
alert(a);
alert(Math.abcdef);
2次的弹出结果都为:undefined
在使用typeof方法判断object类型时,即使Date和Array是两种不同的对象,结果仍然都为object
通过对象的constructor属性可以更好的区分不同的对象类型
constructor 属性
表示创建对象的函数。
object.constructor
必需的 object是对象或函数的名称。
说明
constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。
举例:
function People(name){
this.name = name;
}
var p = new People("123");
alert(p.constructor);
显示结果为:
function People(name){
this.name = name;
}
可见对象的constructor属性保存了一个创建该对象的特定函数的引用
var str = "123";
alert(str.constructor == String);
var array = [1,2,3];
alert(array.constructor == Array);
2次的结果都为true