JavaScript基礎入門教程(一)
js的數據類型
雖然js屬於弱類型語言,但其總共有6種數據類型。弱類型的意思是定義的變量沒有類型的區分,比如先執行 var num=123; 定義了一變量num存儲整數,可接下來執行 num="hello world"; 將字符串賦值給num變量並不會報錯,是合法的。
js的弱類型相對於強類型的語言來說看起來好像很好用,其實也不盡然,下面列舉了一些字符串和整數進行操作時候的一些因為js的弱類型帶來的問題。
32 + 32 // 結果是 64 "32" + 32 // 結果是 "3232" "32" - 32 // 結果是 0
/*
值得一提的是基於上面的一些問題,這裏出現了兩個類型轉換技巧
字符串轉整數:num - 0;
整數轉字符串:num + ‘‘;
*/
js中的六種數據類型
原始類型:①number;②string;③boolean;④null;⑤undefined
對象類型:①object(Function,Array,Date等都是object類型)
js的隱式轉換
因為js是弱類型,所以存在大量的隱式轉換,其中下面的結果都是true
"1.23" == 1.23 //嘗試將字符串轉換為數字再比較 0 == false //將boolean值轉換為數字再比較,其中false轉為0,true轉為1,
//所以1==true返回true,但是2==true返回false null == undefined new Object() == newObject() [1,2] == [1,2]
//如果是object==string|number會嘗試將對象轉換為基本類型 比如:new String(‘hi‘) == ‘hi‘ 會
//返回true,其它情況會返回false。
這樣一來就有人會問,那怎麽保證 1.23 等於1.23 而不等於 "1.23" 呢?這個就引出了js中的一個新的運算符 === 嚴格等於運算符,這個運算符會先判斷等號兩邊的類型是否相同,不同就直接返回false。如果類型相同且滿足一下原則會返回true:
①數值滿足值相等
②字符串滿足長度和字符均相等
③null === null
④undefined === undefined
此外還有兩個東西NaN和object,其中NaN和任何東西比較都是false,包括它自己,即NaN===NaN也返回false,而object是引用比較,只有是同一個對象才返回true。
js包裝類型
如上圖所示,雖然前面講過string(不是String)屬於基本類型,但是其依然有屬性length,這看起來似乎有對象的影子,這其實是js的包裝起的作用,每次在使用string、number等類型的變量時,js會自動對這些變量進行包裝,創建出一個臨時對象出來,圖上所示在執行str.length時js偷偷執行new String(str).length了。
js類型檢測
1、使用typeof檢測類型
typeof 100 //返回 "number" typeof true //返回 "boolean" typeof function //返回 "function" typeof (undefined) //返回 "undefined" typeof new Object() //返回 "object" typeof [1,2] //返回 "object" typeof NaN //返回 "number" typeof null //返回 "object"
2、使用instanceof判斷對象類型(格式:對象 instanceof 函數構造器)
[1,2] instanceof Array //返回true new Object() instanceof Array //返回false
3、使用Object.prototype.toString
Object.prototype.toString.apply([]); //返回 "[object Array]" Object.prototype.toString.apply(function(){}); //返回 "[object Function]" Object.prototype.toString.apply(null); //返回 "[object Null]" Object.prototype.toString.apply(undefined); //返回 "[object Undefined]"
JavaScript基礎入門教程(一)