• javascript typeof 和 instanceof 的区别和联系


    JavaScript 中 typeof和instanceof都可以用来判断一个变量是否为空,或者是什么数据类型的。但它们之间还是有区别的:

    typeof

    typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。

    它返回值是一个字符串,该字符串说明运算数的类型,因此如果想要判断是什么类型则是采用字符串判断的方法(加引号)来判断是否一致。

    typeof 一般只能返回的是基本的数据类型,如下几种:

    number, boolean, string, function, object, undefined
    typeof 123; // 'number'
    typeof NaN; // 'number'
    typeof 'str'; // 'string'
    typeof true; // 'boolean'
    typeof undefined; // 'undefined'
    typeof Math.abs; // 'function'
    typeof null; // 'object'
    typeof []; // 'object'
    typeof {}; // 'object'

    我们可以使用 typeof 来获取一个变量是否存在,如

     if(typeof a!="undefined")
    {
        alert("ok")
    }

    而不要去使用 if(a) 因为如果 a 不存在(undefined)则会出错,而特别注意null的类型是objectArray的类型也是object,如果我们用typeof将无法区分出nullArray和通常意义上的object——{}。这也正是 typeof 的局限性。

    typeof应该注意的问题?
       使用typeof操作符的时候,如果检测对象是函数,那么操作符返回"function" ,如果检测对象是正则表达式的时候,在Safari和Chrome中使用typeof的时候会错误的返回"function",
    而其他的浏览器返回的是object.

    instanceof

    instanceof主要的目的是检测引用类型,可以判断对象是Array,还是RegExp!,并且instanceof 也可以用来判断一个变量是否是某个对象的实例

    (包含检测是否具有继承关系父类子类关系之类的)

    举个例子:

    var a=new Array();
    alert(a instanceof Array); 

    会返回 true,同时

    alert(a instanceof Object);

    也会返回 true;这是因为 Array 是 object 的子类。再如:

    function test(){};
    var a=new test();
    alert(a instanceof test);//true
    alert(a instanceof Function);//false 

    第一个会返回true,这里得注意第二个会返回false。

    一个有趣的现象:

    var a = function test(){};
    alert(a instanceof Function);//true

    这跟声明的对象是是什么对象有关系,在第一个例子中,a是new出来的一个test实例,说明了test创建了一个包装对象a,而包装对象实例化出来的是对象类型(这里是test对象),而不是Function类型,而第二个例子则是通过function声明的一个对象,并不是包装对象,因此它自然就继承了Function,是Function类型的实例。

    instanceof应该注意的问题?
        谈到 instanceof 我们要多插入一个问题,就是 function 的 arguments,我们大家也许都认为 arguments 是一个 Array,但如果使用 instaceof 去测试会发现 arguments 不是一个 Array 对象,尽管看起来很像。还有就是instanceof的语法一定不要写错了 variable instanceof constructor !

    其实typeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型! 还有就是一些另外的细节区别,比如说,在这段代码中

    var a=new Array();
    if (a instanceof Object) 
        alert('Y');
    else 
        alert('N');

    结果得'Y’,但

    if (window instanceof Object)
        alert('Y');
    else 
        alert('N');

    结果得'N'。

    所以,这里的 instanceof 测试的 object 是指 js 语法中的 object,不是指 dom 模型对象。

    而使用 typeof则 会有些区别

    alert(typeof(window)) 会得 object。

  • 相关阅读:
    servlet验证账号密码
    servlet概述
    JAVA WEB开发环境与搭建
    JavaScript简介
    css样式简介
    html简介
    西柚电子邮箱登录页面
    西南石油大学计科院主页
    PHP 简单分页 献给小白
    安装FastDFS
  • 原文地址:https://www.cnblogs.com/pfr-blog/p/6822661.html
Copyright © 2020-2023  润新知