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对象,尽管看起来很像。(这个待验证)

  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/bigdesign/p/4003688.html
Copyright © 2011-2022 走看看