ECMAScript君免精晓之JavaScript——类型

一致、ECMAScript语言中保有的值均暴发一个相应的语言类。ECMAScript语言类型包括Undefined、Null、Boolean、String、Number和Object。

  我们这么来定义类型:对于语言引擎以及开发人士来说,类型是价值的内特征,它定义了价值的一言一行,以要其区别为其他值。

  JS有七种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol,ES6中新增)

  注意:除了对象外,其他统称为“基本项目”。

  我们好就此typeof运算符来查看值的花色,它回到的凡体系的字符串值。例如:

      1. typeof undefined   ===  ”undefined”;
      2. typeof true             ===  ”boolean”;
      3. typeof 42                    ===        “number”;
      4. typeof “42”                 ===         “string”;
      5. typeof { life:42 }          ===         “object”;
      6. typeof Symbol             ===         “symbol”;    
        //ES6挨新在的型

  可是 typeof null === “object”;  
那个是js的一个bug,由来已久(20大多年了)。

  那么大家用符合条件来检测null值的门类

var a=null;
(!a&&typeof a==="object");  //true

  函数是“可调用对象”,实际上function(函数)是object的一个“子类型”,它发生一个间属性[[Call]],该属性使其可以为调用。

  typeof function a(){ /**/ } ===”function”;   //true

     函数不仅是目的,还好有所属性。例如:

  

function a(b,c){
    /*...*/
}
//函数对象的length属性是其声明的参数的个数,那么:
a.length;//2

  无独有偶,数组也是object的一个“子类型”,数组的素以数字来开展索引(而未一般如对象这样通过字符串键值对),其length属性是素的个数。

  typeof [1,2,3] ===”object”;  //true

 二、值与类型

  JavaScript中的变量是从未路的,只发生价才来。变量可以随时有此外项目标价。也就是说语言引擎不要求变量总是有与其起头值同种的价值。

  

var a=42;
typeof a;    //"number"

a=true;
typeof a;    //"boolean"

typeof typeof 42    //"string"

//typeof 42 首先返回字符串“number”,然后typeof “number” 返回 “string”

  undefined和undeclared完全是少数回事。

变量在未持有值的早晚啊undefined。此时typeof 重回“undefined”:

率先看下undefined

var a;
typeof a;    //"undefined"

var b=42;
var c;

//later

b=c;

typeof b;    //"undefined"
typeof c;    //"undefined"

 undefined和undeclared的区别:

var a;

a;  //undefined

b;  //ReferenceError: b is not defined   其实这里的意思是:b is not declared 可是sb浏览器不会说那么清楚,我们需要原谅它。

//然而更让人抓狂的是 typeof 处理undeclared变量的方式。例如:

var a;

typeof a;  //"undefined"

typeof b;  //"undefined"   而且这里没有报错,是因为typeof 有一个特殊的安全防范机制,这里typeof如果能返回undeclared而非undefined的话,多好啊,可惜sb浏览器不会!