zoukankan      html  css  js  c++  java
  • JS中 typeof 与 instanceof 的区别

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的:
    typeof
    是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
    它返回值是一个字符串,该字符串说明运算数的类型。
    typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。(Array,Null 均返回 object ,无法判断这些类型)
    例子:

    typeof(1): number
    typeof(NaN): number
    typeof(Number.MIN_VALUE): number
    typeof(Infinity): number
    typeof("123"): string
    typeof(true): boolean
    typeof(window): object
    typeof(Array()): object
    typeof(function(){}): function
    typeof(document): object
    typeof(null): object
    typeof(eval): function
    typeof(Date): function
    typeof(sss): undefined
    typeof(undefined): undefined

    我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){ alert("ok") },而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,
    对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
    如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。

    instanceof 用于判断一个对象是否是某个类或者它的子类的一个实例,instanceof通过返回一个布尔值来指出。
    如果判断对象是直接赋值的string number undefined类型变量 ,可能无法输出结果。

    <script>
    var a = new Number(9);
    var b = 9;
    var c = 'hello'
    var d = ['hello','hi']
    var e = {'name':'joyo','age':18};
    var f = function(){};
    var g = 0;
    var h = ''; // 当值为空或者 undefined 时 ,用 instanceof 无法判断 ,可以用 typeof 
    document.write(a instanceof Number ) // ture
    document.write(b instanceof Number ) // false 直接赋值的 Number 变量 false * (如果是用new申明的结果为 true ,下同)
    document.write(c instanceof String) // false 直接赋值的 string 变量 false *
    document.write(d instanceof Array) // true 直接赋值的 Array 变量 true
    document.write(e instanceof Object) // true 直接赋值的 Object 变量 true
    document.write(f instanceof Function) // true 直接赋值的 Function 变量 true
    document.write(g instanceof Boolean) // false 直接赋值的 Boolean 变量 false * 
    </script>

    用法一:

    <script>
    var a=new Array();
    document.write(a instanceof Array); // true
    document.write(a instanceof Object); // true Array是object的子类。
    </script>

    用法二:
    再如:

    <script>
    function test(){}; 
    var a = new test();
    document.write(a instanceof test) // true
    </script>

    用法三:

    <script>
    if(window instanceof Object)
    alert('Y');
    else
    alert('N') // 输出 Y 说明 window 也是一个对象的一个实例
    alert(typeof(window)) // 输出 object
    </script>

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

  • 相关阅读:
    SSIS常用的包—XML任务,SQL分析服务执行DDL和Processing任务
    SQL点滴7—使用SQL Server的attach功能出现错误及解决方法
    SSIS中的容器和数据流—数据目的
    SQL点滴8—the account is currently locked out. The system administrator can unlock it.
    SSIS常用的包—WMI数据读取任务和WMI事件监听任务
    Microsoft SQL Server Integration Service文章总结
    SSIS常用的包—Web服务任务
    SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用
    SSIS中的容器和数据流—数据源
    YUI Grids实现自定义宽度的Template
  • 原文地址:https://www.cnblogs.com/bigdesign/p/4003688.html
Copyright © 2011-2022 走看看