• js内置类型
    js中有七中内置的数据类型,其中有六种基本数据类型,一种复合数据类型.
    1. 基本数据类型
      • 空值(null)
      • 为定义(undefined)
      • 布尔值(boolean)
      • 数字(number)
      • 字符串(string)
      • 符号(symbol)
    2. 复合数据类型
      • 对象(object)
  • 类型检测
    在js中我们可以使用typeof运算符来查看值的类型,它返回的是类型的字符串值。在js中的变量是没有类型的,只有值才有。变量是可以随时持有任何类型的值,在对变量执行typeof操作时,得到的结果并不是该变量的类型,而是该变量持有的值的类型,因为在js中的变量没有类型。

    1
    2
    3
    4
    5
    6
    7
    typeof undefined // "undefined"
    typeof true // "boolean"
    typeof 42 // "number"
    typeof "42" // "string"
    typeof {a:1} // "object"
    typeof Symbol() // "Symbol"
    typeof null // "object"

    ⚠️注意:js中对null的typeof判断是存在bug的。null的typeof正确的返回结果应该是null.这个是js产生的以恶搞由来已久的bug.对null的类型进行正确的检测可以使用以下的方式

    1
    2
    3
    function isNull(param){
    return !param && typeof param === 'object'
    }
    • 函数
      js中的函数是object的一个”子类型”。具体的来说就是函数是一个”可调用对象“,其内部存在一个属性[[call]],该属性使得函数可以被调用。由于函数是object的子类型,所以函数可以拥有属性。
  • undefined和undeclared
    已在作用域中声明但还没有赋值的变量是undefined。相反,还没有在作用域中声明过的变量是undeclared。

    1
    2
    3
    var a;
    a; // undefined
    b; // b is not defined

    typeof在处理undeclared的变量时,是将其处理为undefined。这是一个特殊的安全防范机制