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
 

 

posted @ 2013-02-27 14:39  心意合一  阅读(2566)  评论(0编辑  收藏  举报