zoukankan      html  css  js  c++  java
  • typeof作用

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

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

    typeof运算符可以返回一个值的数据类型

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

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

    函数返回function

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

    undefined返回undefined

    typeof undefined
    // "undefined"
    

    利用这一点,typeof可以用来检查一个没有声明的变量,而不报错。

    v
    // ReferenceError: v is not defined
    
    typeof v
    // "undefined"
    

    上面代码中,变量v没有用var命令声明,直接使用就会报错。但是,放在typeof后面,就不报错了,而是返回undefined

    实际编程中,这个特点通常用在判断语句。

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

    对象返回object

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

    上面代码中,空数组([])的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。这里顺便提一下,instanceof运算符可以区分数组和对象。instanceof运算符的详细解释,请见《面向对象编程》一章。

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

    null返回object

    typeof null // "object"
    

    null的类型是object,这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。

    原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判
    断为 object 类型, null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“ object ”。

     这个bug是第一版Javascript留下来的。在这个版本,数值是以32字节存储的,由标志位(1~3个字节)和数值组成。标志位存储的是低位的数据。这里有五种标志位:
    • 000:对象,数据是对象的应用。
    • 1:整型,数据是31位带符号整数。
    • 010:双精度类型,数据是双精度数字。
    • 100:字符串,数据是字符串。
    • 110:布尔类型,数据是布尔值。
        最低位有一位,那么标志位只有一个1字节长度;或者是零位,标志位有3个字节长度,多出两个了字节,一共多出四种类型。
  • 相关阅读:
    Ubuntu 11.04 安装后要做的20件事情
    Net 服务命令行参考之一
    Openerp约束句型
    Ubuntu进入Shell
    postgreSql基础命令及linux下postgreSql命令
    解决中文乱码的问题
    An error occured while handling a json request
    Java Socket编程
    CentOS 7 中 Docker 的安装和卸载
    Spring Boot整合shiro-登录认证和权限管理
  • 原文地址:https://www.cnblogs.com/yanggeya/p/9578049.html
Copyright © 2011-2022 走看看