zoukankan      html  css  js  c++  java
  • 浅谈JS中的typeof和instanceof的区别

    JS中的typeof和instanceof常用来判断一个变量是否为空,或者是什么类型。

    typeof

    typeof运算符返回一个用来表示表达式的数据类型的字符串。

    typeof一般返回以下几个字符串:

    "number", "string","boolean","object","function","undefined"

    对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

    我们可以使用typeof来判断一个变量是否存在,if(typeof a!= "undefined"), 而不要去使用if(a),因为a不存在(未声明)会报错。

    instanceof

    instanceof用来检测某个对象是不是另一个对象的实例。

    官方的话:该运算发用来测试一个对象在其原型链中是否存在一个构造函数prototype属性

    var a = new Array();
    
    console.log(a instanceof Array);    // 会返回 true
    console.log(a instanceof Object);    // 也会返回 true
    
    因为Array是object 的子类
    function Foo(){}
    Foo.prototype = new Aoo();  // 原型继承
    var foo = new Foo();
    console.log(foo instanceof Foo)  //true
    console.log(foo instanceof Aoo)  //true
    
    instanceof不仅可以判断一层继承关系,也可以判断多层继承关系
    var a = new Array();
    if(a instanceof Object)              // 返回true
    if(window instanceof Object)    // 返回false
    
    typeof(window)  //会得到object
    
    需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false
    var a = new Array();
    if(a instanceof Object)              // 返回true
    if(window instanceof Object)    // 返回false
    
    typeof(window)  //会得到object
    
    需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false
  • 相关阅读:
    中断一个telnet连接
    QQ提示应用程序并行配置不正确,绿色版QQ不能运行解决方法
    新劳动合同法今起实施 正式工与派遣工同工同酬
    最详细的装修施工顺序
    最好的前端hacking备忘录——集锦
    基于vue配置axios
    Vue 实现loading进度条
    Vue 实现countDown倒计时
    使用mongoose操作mongodb数据库
    Vue项目之IE下打开页面是空白
  • 原文地址:https://www.cnblogs.com/mikeCao/p/9271346.html
Copyright © 2011-2022 走看看