My Book

typeof----instanceof----toString

typeof一般测试基本类型

    Undefined、null、Boolean、Number、String

    对于应用类型一律返回Object(Function应用类型返回Function)

instanceof一般测试引用类型

    Object Array Date RegExp Function 基本包装类型(Boolean Number String)

实例:

    判断数据类型--返回Boolean

    var obj = [1,2,3];
    console.log(obj instanceof Array)----true

    判断对象是不是另一个的实例

    function Fa(){}
    function Son(){}
    Son.prototype=new Fa();
    var obj=new Son();
    alert("obj是否是Son的实例?  "+(obj instanceof Son));//true
    alert("obj是否是Fa的实例?  "+(obj instanceof Fa));//true

    寄生构造函数模式下,测试o是不是people的实例

    function people(name,age,job){
        o=new Object();
        o.name=name;
        o.age=age;
        o.job=job;
        o.sayName=function(){
                    alert(this.name);
                };
        return o;
     }
     var person=new people("zhang","19","student");
     person.sayName();------zhang
     alert(o instanceof people);---报错找不到o。

问题:在关于类之间通过原型链的方式实现继承的时候,instanceof检测出来的结果不准确

    function Fn(){};
    Fn.prototype = new Array;
    var f = new Fn();
    console.log(f instanceof Array);-------true
    console.log(f instanceof Object);------true
    console.log(f.constructor);------------Array

解决方法--利用Object原型上的toString方法

    var a = Object.prototype.toString.call(f);
    console.log(a)---------Object