ECMAScript中有5種簡單數據類型(也稱基本數據類型):Undefined,Null,Boolean,Number和String。還有一種複雜數據類型(引用型)Object。ECMAScript不支持任何建立自定義類型的機制,而全部值都是上述6中數據類型之一。(ps:ES6新增了一種數據類型Symbol,這裏不作討論)javascript
值:undefinedjava
出現場景:express
使用var聲明變量未賦值(至關於var test = undefined;
)函數
獲取對象不存在的屬性prototype
無返回值的函數的執行結果指針
函數的參數沒有傳入code
void(expression)對象
類型轉換:ip
- | Boolean | Number | String |
---|---|---|---|
undefined | false | NaN | "undefined" |
值:null。null值表示一個空對象指針,若定義的一個變量準備未來用來保存一個對象,那麼最好將變量初始化爲一個null字符串
出現場景:
var test = null;
null表示調用的對象不存在
注意區分null和undefined的區別?
null == undefined; // true null === undefined; // false
類型轉換
- | Boolean | Number | String |
---|---|---|---|
null | false | 0 | "null" |
值:true or false。
出現場景:
條件語句致使系統執行的隱式裝換
定義
類型轉換
- | number | string |
---|---|---|
true | 1 | "true" |
false | 0 | "false" |
值:由單引號或雙引號括起來的字符序列
出現場景:定義
類型轉換,有兩種方法,String()
和 toString()
- | Boolean | Number |
---|---|---|
"" | false | 0 |
"123" | true | 123 |
"a12" | true | NaN |
值:整數和浮點值
出現場景:
類型轉換,Number()
,parseInt()
和 parseFloat()
。第一個函數能夠應用於任何數據類型,另兩個函數專門用於把字符串轉換成數值
- | Boolean | String |
---|---|---|
0 | false | 0 |
1 | true | 1 |
Infinity | true | "Infinity" |
NaN | false | "NaN" |
值:一組屬性的集合
出現場景:
類型轉換
- | Boolean | Number | String |
---|---|---|---|
{} | true | NaN | "[object Object]" |
能夠識別簡單類型(Null除外)
不能識別具體的對象類型(Function除外)
typeof "darko"; //"string" typeof 123; //"number" typeof true; //"boolean" typeof undefined; //"undefined" typeof null; //"object" typeof {name:"darko"}; //"object" typeof function(){}; // "function" typeof []; // "object" typeof new Date(); //"object"
識別內置對象的類型
不能夠識別簡單類型
識別自定義對象類型
[] instanceof Array; //true /\d/ instanceof RegExp; //true 1 instanceof Number; //false "abc" instanceof String; //false
識別簡單類型(undefined和null除外)
識別內置對象類型
識別自定義對象類型
(1).constructor === Number; // true true.constructor === Boolean; // true [].constructor === Array; // true
能夠簡單類型和內置對象
不能識別自定義類型
function type(obj){ return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); }