一、前言:
JavaScript中變量似乎很簡單,因為它聲明變量只需要一個“var”就可以,不像其他編程語言嚴格區分了數據類型(int/double/char/boolean...)。這樣做也是有好處的,變量可以被賦予任何類型的值,同樣也可以給這個變量重新賦予不同類型的值。並不是“一定終身”。
可是,JavaScript並沒有避開數據類型,只是在聲明時統一使用無類型(untyped)的“var”關鍵字而已,它的數據類型是根據所賦值的類型來確定的。
var x = 1; //number類型
var x = 0.1; //number類型,JS不區分整數值和浮點數值
var x = "hello world"; //由雙引號內文本構成字符串
var x = 'javascript'; //單引號內文本同樣可以構成字符串
var x = true; //true和false作為布爾值
var x = null; var x = undefined; //null和undefined很相似,是特殊的類型
二、正文:
下面對不同的數據類型進行說明
數據類型分類 | 說明 | 詳細分類 |
原始類型 |
比如:var a = 1, b = 1; a == b; //true |
數字(number) |
字符串(string) | ||
布爾值(boolean) | ||
null | ||
undefined | ||
對象類型 |
比如:var a = [], b = []; a == b; //false,只有在引用相同時,兩個只才會相等 |
特殊對象--數組(array) |
特殊對象--函數(function) | ||
object類型 |
1.“==”和“===”,即相等和全等
類型 | 例子 | |
相等(“==”) | false == 0 | 使用相等(“==”)符號時,會自動轉換符號兩邊的數據類型再進行比較,容易出錯。 |
全等(“===”) | false === 0 | 使用全等符號時,不會自動轉換數據類型,所有該符號也對數據類型進行了比較。 |
false == 0 //true false === 0 //false
2.null和undefined的區別
undefined表示系統級的、出乎意料的或類似錯誤的值的空缺;表示缺少值,此處應該有值,但沒有定義。例如:var a; a就會顯示undefined
null表示程序級的、正常的或在意料之中的值的空缺; 一般多使用null。
undefined null
0
-0 NaN "" //空字符串
以上這些值在布爾值轉換中,會轉換成false。但是這並不足以讓你認為他們與false是相等的:
undefined == true //false
undefined == false //false
undefined == null //true
undefined === null //false
null == false //false
null == true //false
"" == false //true
"" == true //false
0 == false //true
0 == true //false
-0 == false //true
-0 == true //false
NaN == false //false
NaN == true //false
NaN == NaN //false NaN與任何值都不相等,包括它自身
3.Infinity和NaN
類型 | 相同點 | 例子 | 說明 |
Infinity | 都是Number類型 | 2/0 | 表示無限大,超過JS的number所能夠表示的最大值。 |
NaN | 0/0 | 表示not a number,無法計算的結果。 |
//NaN是一個特殊的number,與其他所有值都不相等,包括它自身 NaN === NaN //false
//唯一識別NaN的方法 isNaN(NaN) //true
4.JS的typeof的用法,可以把數據類型當作字符串返回
1 | 2 | 3 | 4 | 5 | 6 | |
typeof的運算參數: | 數字 | 字符串 | 布爾值 | 對象、數組和null | 函數 | 運算數未定義 |
例子: | typeof(123) | typeof("123") | typeof(true) | typeof([]) | typeof(function(){}) | typeof(arr) |
返回值: | "number" | "string" | "boolean" | "object" | "function" | "undefined" |
//typeof的括號可以不用,直接在后面跟需要測試的內容
var a; typeof a; //"undefined"
var cc = {a:123}; typeof cc; //"object"
typeof null; //"object"
說明:
- 用途:可以使用typeof來判斷一個變量是否存在,如:if(typeof a != "undefined")
而不可使用:if(a),因為如果a不存在會報錯(未聲明),使用typeof則可以避免這個問題。 - 局限:對於array、null和對象,typeof一律返回object。對此可以通過instanceof來區分。
5.JS的instanceof,判斷一個變量是否是某個對象的實例
var a = new Array(); a instanceof Array //true
a instanceof Object //true
// 判斷 foo 是否是 Foo 類的實例 , 並且是否是其父類型的實例
function Aoo(){} function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型繼承
var foo = new Foo(); console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true
- instanceof 運算符判斷一個對象是否是另一個對象的實例。返回true或false
- instanceof 運算符用來檢測 constructor.prototype 是否存在於參數 obj 的原型鏈上(或者說:檢測obj的原型鏈上是否存在constructor.prototype )