美文网首页饥人谷技术博客js
typeof和instanceof的作用和区别

typeof和instanceof的作用和区别

作者: 辉夜乀 | 来源:发表于2017-04-05 00:12 被阅读743次

    JavaScript有三种方法,可以确定一个值到底是什么类型。

    • typeof 运算符
    • instanceof 运算符
    • Object.prototype.toString 方法

    typeof 运算符

    最常用的是 typeof 运算符,返回一个值的数据类型有以下几种结果。

    1. 原始类型
    2. 函数
    3. undefined
    4. object

    1.原始类型

    数值、字符串、布尔值分布返回 numberstringboolean

    typeof 123 // "number"
    typeof '123' // "string"
    typeof false // "boolean"
    

    2.函数

    函数返回function

    function f() {}
    typeof f
    // "function"
    

    3. undefined

    undefined 和没有用 var 声明的变量,用typeof 返回的是 undefined

    typeof undefined
    // "undefined"
    var x
    typeof x
    // "undefined"
    
    y
    // ReferenceError: y is not defined
    typeof y
    // "undefined"
    

    这里y没有用var声明,直接使用就会报错,但是用typeof就不报错,而是返回undefined。
    实际编程中,这个特点通常用在判断语句。

    // 错误的写法
    if (v) {
      // ...
    }
    // ReferenceError: v is not defined
    
    // 正确的写法
    if (typeof v === "undefined") {
      // ...
    }
    

    4.object

    除了以上三种情况,其他情况都返回object

    typeof window // "object"
    typeof {} // "object"
    typeof [] // "object"
    typeof null // "object"
    

    注意

    • 空数组[]的返回值是object,这表示,JavaScript内部,数组本质上是一种特殊的对象。
    • null的返回值是object,这是由于历史原因造成的,1995年JavaScript语言的第一版,所有值都设计成32位,其中最低的3位用来表述数据类型,object对应的值是000。当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。这是typeof null返回object的根本原因。
      为了兼容以前的代码,后来就没法修改了。这并不是说null就属于对象,本质上null是一个类似于undefined的特殊值。

    instanceof 运算符

    instanceof 是判断变量是否为某个对象的实例,返回值为truefalse

    var o = {};
    var a = [];
    
    o instanceof Array // false
    a instanceof Array // true
    a instanceof Object // true
    

    typeof 对数组 [] 和对象 {} 的返回值都是Object,无法区分数组和对象,但是instanceof可以区分。
    注意: 数组Array是对象Object的一个子类,所以 a instanceof Object的返回值是 true

    相关文章

      网友评论

        本文标题:typeof和instanceof的作用和区别

        本文链接:https://www.haomeiwen.com/subject/ddttattx.html