ECMAScript 規範地址:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdfjavascript
有過WEB前端開發經驗的朋友都知道JavaScript是一種弱類型的語言,定義變量時無需指定變量類型,任一類型的值均可以賦值給該變量。正確的理解每一種數據類型,在適當的時候進行類型轉換對咱們編程是頗有幫助的。html
例如咱們有一個多於兩位的整數,拋開位數無論,咱們要獲取從左到右數第二位數字,這時候將整數轉換爲string是比較方便的。前端
var num = 1234566;
var strNum = num + "";
alert(strNum[1]);//值爲2
這樣的例子不少,筆者不作過多介紹。JavaScript總共定義了七種內置類型,分別以下:java
接下來咱們使用typeof操做符,來檢查給定的值屬於哪一種類型,typeof操做符會返回該值的類型字符串。正則表達式
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>exam_2</title>
</head>
<body>
<div>
<script type="text/javascript"> document.writeln(typeof "hello world!"); document.writeln("<br/>"); document.writeln(typeof 123.1); document.writeln("<br/>"); document.writeln(typeof Symbol()); document.writeln("<br/>"); document.writeln(typeof [1,2,3]); document.writeln("<br/>"); document.writeln(typeof {name:"Rongbo_J",age:23}); document.writeln("<br/>"); document.writeln(typeof /^[1-9]$/); document.writeln("<br/>"); document.writeln(typeof true); document.writeln("<br/>"); document.writeln(typeof undefined); document.writeln("<br/>"); </script>
</div>
</body>
</html>
在瀏覽器中運行能夠看到輸出的類型字符串:編程
JS中的字符串屬於string類型,數值(不區分整數和浮點數)都屬於number類型,symbol類型爲ECMAScript6.0規範新增,經過Symbol()調用產生。數組、對象、正則表達式都屬於object類型,ture/false兩個值屬於boolean類型。undefined表示變量值未指定或變量未聲明,單獨屬於一個類型undefined。數組
此外這裏有一些特例:瀏覽器
document.writeln(typeof null);//輸出object
null和undefined相似,一個值做爲一個類型,咱們使用typeof null 應該返回」null」字符串纔對,那這裏爲何會返回」object」呢?markdown
你可能不知道其實這是JavaScript最初設計上的一個Bug,有不少已經存在的WEB系統都使用相似下面的代碼來檢測null值:函數
var a = null;
if(!a && typeof a == "object"){};
若是修復了這個bug,將會致使現存的WEB系統出現更多的Bug,因此這個bug一直持續了近20年,並且之後也不可能會修復。
再來看一個例子:
var func = function(){
};
document.writeln(typeof func);//頁面輸出function
document.writeln("<br/>");
這裏咱們定義一個函數,使用typeof操做符獲取類型字符串,頁面輸出function。讀者可能很容易認爲function也是JS頂層的內置類型。實際上ECMAScript規範中提到,function類型屬於object的」子類型」。
爲了證實這個結論,咱們能夠這樣寫代碼:
<script type="text/javascript"> alert(function(){}.length); </script>
能夠看到,語法上沒有任何問題:
最後再來談談typeof操做符,下面這段代碼再常見不過了:
var a = 20;
typeof a;
一些書籍中說typeof操做符用來獲取變量的類型,其實這種說法不是很準確,JavaScript的變量是沒有類型這個概念的,類型是和變量的值相關的。
上面的代碼實際上等價於:
typeof 20;
準確的描述應該是:typeof操做符用來獲取變量的值的類型。