JavaScript 語言的每一個值,都屬于某一種數(shù)據(jù)類型试幽。JavaScript 的數(shù)據(jù)類型,共有六種卦碾。(ps:ES6 又新增了第七種 Symbol 類型的值)
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如”Hello World”)
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在铺坞,即此處目前沒有任何值
- null:表示空缺,即此處應(yīng)該有一個值洲胖,但目前為空
- 對象(object):各種值組成的集合
- (ES6 又新增了第七種 Symbol 類型的值)
typeof運算符
JavaScript有三種方法济榨,可以確定一個值到底是什么類型。
- typeof運算符
- instanceof運算符
- Object.prototype.toString方法
typeof運算符可以返回一個值的數(shù)據(jù)類型绿映,可能有以下結(jié)果擒滑。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
數(shù)值、字符串叉弦、布爾值分別返回number丐一、string、boolean淹冰。
所以:函數(shù)返回function库车;undefined返回undefined;也可以用typeof檢查一個沒有聲明的變量而不會報錯樱拴。
function f() {}
typeof f
// "function"
typeof undefined
// "undefined"
v
// ReferenceError: v is not defined
typeof v
// "undefined"
而除此以外柠衍,其他情況都返回object
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object" //null的類型也是object洋满,本質(zhì)上null是一個類似于undefined的特殊值。
既然typeof對數(shù)組(array)和對象(object)的顯示結(jié)果都是object珍坊,那么怎么區(qū)分它們呢牺勾?instanceof運算符可以做到。
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true
對于null和undefined的區(qū)別
null表示空值阵漏,即該處的值現(xiàn)在為空禽最。調(diào)用函數(shù)時,某個參數(shù)未設(shè)置任何值袱饭,這時就可以傳入null川无。
undefined表示“未定義”,下面是返回undefined的典型場景虑乖。
// 變量聲明了懦趋,但沒有賦值
var i;
i // undefined
// 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供疹味,該參數(shù)等于undefined
function f(x) {
return x;
}
f() // undefined
// 對象沒有賦值的屬性
var o = new Object();
o.p // undefined
// 函數(shù)沒有返回值時仅叫,默認(rèn)返回undefined
function f() {}
f() // undefined
布爾值
布爾值代表“真”和“假”兩個狀態(tài)〔谵啵“真”用關(guān)鍵字true表示诫咱,“假”用關(guān)鍵字false表示。布爾值只有這兩個值洪灯。
下列運算符會返回布爾值:
- 兩元邏輯運算符: && (And)坎缭,|| (Or)
- 前置邏輯運算符: ! (Not)
- 相等運算符:===,!==签钩,==掏呼,!=
- 比較運算符:>,>=铅檩,<憎夷,<=
如果JavaScript預(yù)期某個位置應(yīng)該是布爾值,會將該位置上現(xiàn)有的值自動轉(zhuǎn)為布爾值昧旨。轉(zhuǎn)換規(guī)則是除了下面六個值被轉(zhuǎn)為false拾给,其他值都視為true。
undefined兔沃;null蒋得;false;0粘拾;NaN窄锅;“ ”或‘ ’(空字符串)