javascript 中一共有 5 種基本類型,分别是 string、number、boolean、null 和 undefined 。前 3
種都比較好了解,後面兩種就稍微複雜一點。 null 類型隻有一個值,就是 null ; undefined 類型也隻有一個值,即 undefined 。
null 和 undefined 都可以作為字面量(literal)在 javascript 代碼中直接使用。
null 與對象引用有關系,表示為空或不存在的對象引用。當聲明一個變量卻沒有給它指派的時候,它的值就是 undefined 。
undefined 的值會出現在如下情況:
從一個對象中擷取某個屬性,如果該對象及其 prototype 鍊 中的對象都沒有該屬性的時候,該屬性的值為 undefined 。
一個
function 如果沒有顯式的通過 return 來傳回值給其調用者的話,其傳回值就是 undefined 。有一個特例就是在使用new的時候。
javascript 中的 function 可以聲明任意個形式參數,當該 function
實際被調用的時候,傳入的參數的個數如果小于聲明的形式參數,那麼多餘的形式參數的值為 undefined 。
關于 null 和 undefined 有一些有趣的特性:
如果對值為 null 的變量使用 typeof 操作符的話,得到的結果是 object ;而對 undefined 的值使用 typeof,得到的結果是
undefined 。如 typeof null === "object";typeof undefined === "undefined"
null
== undefined,但是 null !== undefined
if ("" || 0)
對于 if 表達式,大家都不陌生。
javascript 中 if 後面緊跟的表達式的真假值判斷與其它語言有所不同。具體請看表 1。
表 1. javascript 中的真假值
類型 真假值
null 總是為假(false)
undefined
總是為假(false)
boolean 保持真假值不變
number +0,-0 或是 nan 的時候為假,其它值為真
string
空字元串的時候為假,其它值為真
object 總是為真(true)
從表 1中可以看到,在 javascript 中使得 if 判斷為假的值可能有 null、undefined、false、+0、-0、nan
和空字元串("")。
== 與 ===
javascript 中有兩個判斷值是否相等的操作符,== 與 === 。兩者相比,== 會做一定的類型轉換;而 ===
不做類型轉換,所接受的相等條件更加嚴格。
=== 操作符的判斷算法
在使用 === 來判斷兩個值是否相等的時候,如判斷x===y,會首先比較兩個值的類型是否相等,如果不相等的話,直接傳回 false 。接着根據 x
的類型有不同的判斷邏輯。
如果 x 的類型是 undefined 或 null,則傳回 true 。
如果 x 的類型是 number,隻要 x 或 y 中有一個值為
nan,就傳回 false ;如果 x 和 y 的數字值相等,就傳回 true ;如果 x 或 y 中有一個是 +0,另外一個是 -0,則傳回 true
。
如果 x 的類型是 string,當 x 和 y 的字元序列完全相同時傳回 true,否則傳回 false 。
如果 x 的類型是
boolean,當 x 和 y 同為 true 或 false 時傳回 true,否則傳回 false 。
當 x 和 y 引用相同的對象時傳回
true,否則傳回 false 。
== 操作符的判斷算法
在使用 == 來判斷兩個值是否相等的時候,如判斷x==y,當 x 和 y 的類型一樣的時候,判斷邏輯與 === 一樣;如果 x 和 y 的類型不一樣,==
不是簡單的傳回 false,而是會做一定的類型轉換。
如果 x 和 y 中有一個是 null,另外一個是 undefined 的話,傳回 true 。如null == undefined。
如果 x 和
y 中一個的類型是 string,另外一個的類型是 number 的話,會将 string 類型的值轉換成 number 來比較。如3 == "3"。
如果 x 和 y 中一個的類型是 boolean 的話,會将 boolean 類型的值轉換成 number 來比較。如true == 1、true ==
"1"
如果 x 和 y 中一個的類型是 string 或 number,另外一個的類型是 object 的話,會将 object
類型的值轉換成基本類型來比較。如[3,4] == "3,4"
需要注意的是 == 操作符不一定是傳遞的,即從a == b, b == c并不能一定得出a
== c。考慮下面的例子,var str1 = new string("hello"); var str2 = new string("hello");
str1 == "hello"; str2 == "hello",但是str1 != str2。
array
javascript 中的數組(array)和通常的程式設計語言,如 java 或是 c/c++ 中的有很大不同。在 javascript
中的對象就是一個無序的關聯數組,而 array 正是利用 javascript 中對象的這種特性來實作的。在 javascript 中,array
其實就是一個對象,隻不過它的屬性名是整數,另外有許多額外的屬性(如 length)和方法(如 splice)等友善地操作數組。
建立數組
建立一個 array 對象有兩種方式,一種是以數組字面量的方式,另外一種是使用 array 構造器。數組字面量的方式通常為大家所熟知。如var
array1 = [2, 3, 4];。使用 array 構造器有兩種方式,一種是var array2 = new array(1, 2,
3);;另外一種是var array3 = array(1, 2, 3);。這兩種使用方式的是等價的。使用 array
構造器的時候,除了以初始元素作為參數之後,也可以使用數組大小作為參數。如var array4 = new array(3);用來建立一個初始大小為 3
的數組,其中每個元素都是 undefined 。
array 的方法
javascript 中的 array 提供了很多方法。
push和pop在數組的末尾進行操作,使得數組可以作為一個棧來使用。
shift和unshift在數組的首部進行操作。
slice(start,
end)用來取得原始數組的子數組。其中參數start和end都可以是負數。如果是負數的話,實際使用的值是參數的原始值加上數組的長度。如var array =
[2, 3, 4, 5]; array.slice(-2, -1);等價于array.slice(2, 3)。
splice是最複雜的一個方法,它可以同時删除和添加元素。該方法的第一個參數表示要删除的元素的起始位置,第二個參數表示要删除的元素個數,其餘的參
數表示要添加的元素。如代碼var array = [2, 3, 4, 5]; array.splice(1, 2, 6, 7,
8);執行之後,array中的元素為[2, 6, 7, 8, 5]。該方法的傳回被删除的元素。
0、""、nan、null和defined都是假的
。剩下的東西都是真的。
換句話說,零、null、nan和空字元串天生就是假
;而其他的天生就是真 。