js中的NaN、Infinity、null和undefined
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