zoukankan      html  css  js  c++  java
  • JS中的instanceof和typeof

    对于instanceof和typeof,以前看到过,但是只对typeof用到的相对更多一些,最近看js的设计模式,很多用到了instanceof,突然觉得它们两个有些相似但也应该有它们区别,然后网上看了一些文章,对它们之间的关系有了一些的了解。

    instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。

    typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number、boolean、

    、string、function、object、undefined。我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array、Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

    如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。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。

    谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。

           下面是我的一个非常简单的测试页面,大家可以调试一下,在加深印象的同时也可以看结论是不是正确的:

           <!DOCTYPE html PUBLIC "-//W//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>instanceof</title>

    </head>

    <body>

    <hr /><br />

    <p style="color:#F00">

    如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。<br />

    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。<br />

    谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。<br />

    </p>

    <hr />

    <script type="text/javascript">

    function a(){

           this.a="a";

           this.b="b";

           alert(typeof(arguments)); //Object

           alert(arguments instanceof Object); //true

           alert(arguments instanceof Array); //false

    }

    var test=new a();

    alert(test instanceof a); //true

    alert(typeof(test)); //Object

    </script>

    </body>

    </html>

    引用自 http://hi.baidu.com/pryzjvvpkkbhjyq/item/440fb91cda5cb90b8ebde43f

    前端小菜。。。
    努力成为大菜!
  • 相关阅读:
    zookeeper安装教程
    CentOS7服务管理(重启,停止,自动启动命令)
    redis配置文件详解
    阿里云 CentOS7安装redis4.0.9并开启远程访问
    rpm命令
    wget命令
    yum命令
    maven项目debug调试不能够进入源码问题解决
    8-字符串
    7-数组
  • 原文地址:https://www.cnblogs.com/chengj/p/3636110.html
Copyright © 2011-2022 走看看