日期:2014-05-16  浏览次数:20386 次

JavaScript中的类型检验

JavaScript中的常见类型: ?number string boolean ?object ?null ?undefined.

?

判断一个变量的类型可以使用的方法:

?

1. ?typeof方法 :?? 可以判断 ?number ?string ?boolean ? object ?function undefined 但是对于具体的Object类无法细分是Array还是Date,以及自定义的对象类型。

?

实例代码展示:

?

var str = [];
typeof str == "object"; //true
???

?

2. ?instanceOf ?这个可以判断变量的具体对象类型 但是根据他的含义对于继承关系的无法区别开。

?

示例代码展示:

?

var person  = function(name){this.name =name};
var author = function(name,age){thia.name=name;this.age = age};
author.prototype = new person();
alert(new author() instanceof person)  //TRUE
?

?

3. ?constructor属性??

?? ? ?什么事constructor属性 : 来历 ?和prototype的关系 ??

??javascript在创建一个函数F是会给函数添加一个prototype的引用执行一个原型对象,而这个对象有一个属性 ? ? ? ? ? ? ? ? ? constructor指向这个函数。这样就形成了循环引用。而利用这个函数创建出来的对象并没有constructor属性,只 ? ? ? ? ? ? 是它的prototype指向了F.prototype.

?? ? ?constructor属性存在的问题

??对于不同的iframe相同的类型也会指向不同的构造函数。

?

4. ? 鸭式辨型

思想: 如果一直动物既会鸭子的走路 又会鸭叫 就认为它是鸭子。

?

实例代码:

?

isArray : function(object){
    if(typeof object == "object"&& "splice" in object&&"join" in object){
         return true;
    }
    return false;
}

?

?? ? ? ? 缺点: ?但是如果一个对象恰好有这些属性就会判断错误。

?

??? 示例代码:

?

var people = new People();
people.prototype = {
   splice : function(){},
   join    : function(){}
};
?

?

?

5. ?toString 这个方法是Object中的原生方法

?

例如: ?var time = ["wang","cheng"];

?? ?alert(Object.prototype.toString.call(time)); // 【object ?Array】

?

?