類型系統(tǒng)

2018-07-10 14:39 更新

javascript 類型系統(tǒng)可以分為標準類型和對象類型,進一步標準類型又可以分為原始類型和引用類型,而對象類型又可以分為內(nèi)置對象類型、普通對象類型、自定義對象類型。

標準類型

標準類型共包括了6個分別是:

原始類型(值類型):

  • Undefined undefined
  • Null null
  • Boolean true
  • String 'hello'
  • Number 123

引用類型(對象類型):

  • Object
var obj = {};
<!-- 原始類型變量的包裝類型如下 -->
var bool = new Boolean(true);
var str = new String("hello");
var num = new Number(1);
var obj0 = new Object();

原始類型和引用類型的區(qū)別:

原始類型儲存在棧(Stack)中儲存變量的值,而引用類型在棧中保存的是所引用內(nèi)容儲存在堆(Heap)中的值。類似于指針的概念,引用類型并非儲存變量真實數(shù)值而是地址,所以對已引用類型的復制其實只是復制了相同的地址而非實際的變量值。

Undefined 值:undefined 出現(xiàn)場景:

  • 以聲明為賦值的變量 var obj;
  • 獲取對象不存在的屬性 var obj = {x: 0}; obj.y;
  • 無返回值函數(shù)的執(zhí)行結(jié)果 function f(){}; var obj = f();
  • 函數(shù)參數(shù)沒有傳入 function f(i){console.log(i)}; f();
  • void(expression)

Null 值:null 出現(xiàn)場景:

  • 獲取不存在的對象 document.getElementById('not-exist-element')

Boolean 值:true, false 出現(xiàn)場景:

  • 條件語句導致的系統(tǒng)執(zhí)行的隱式類型轉(zhuǎn)換 if(隱式轉(zhuǎn)換){}
  • 字面量或變量定義 var bool = true;

String 值:字符串 出現(xiàn)場景:

  • var str = 'Hello, world!';

Number 值:整型直接量,八進制直接量(0-),十六進制直接量(0x-),浮點型直接量 出現(xiàn)場景:

  • 1026
  • 3.14
  • 1.2e5
  • 0x10

Object 值:屬性集合 出現(xiàn)場景:

  • var obj = {name: 'Xinyang'};

變量轉(zhuǎn)換表

ValueBooleanNumberString
undefinedfalseNaN"undefined"
nullfalse0"null"
truetrue1"true"
falsefalse0"false"
''false0''
'123'true123'123'
'1a'trueNaN'1a'
0false0"0"
1true1"1"
InfinitytrueInfinity"Infinity"
NaNfalseNaN'NaN'
{}trueNaN"[object Object]"

類型識別

  • typeof
  • Object.prototype.toString
  • constructor
  • instanceof

typeof:

  • 可以是標準類型(Null 除外)
  • 不可識別具體的對象類型(Function 除外)

Object.prototype.toString:

  • 可是識別標準類型及內(nèi)置對象類型(例如,Object, Date, Array)
  • 不能識別自定義對象類型

constructor:

  • 可以識別標準類型(Undefined/Null 除外)
  • 可識別內(nèi)置對象類型
  • 可識別自定義對象類型
function getConstructiorName(obj) {
  return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
}
getConstructiorName([]) === "Array"; // true

instanceof:

  • 不可判別原始類型
  • 可判別內(nèi)置對象類型
  • 可判別自定義對象類型



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號