ECMAScript值類型分爲原始類型和引用類型。函數
ECMAScript原始類型(primitive type)有5種:Undefined、Null、Boolean、Number 和 String。測試
typeof 運算符有一個參數,即要檢查的變量或值。例如:spa
var sTemp = "test string"; alert (typeof sTemp); //輸出 "string" alert (typeof 86); //輸出 "number"
對變量或值調用 typeof 運算符將返回下列值之一:code
註釋:您也許會問,爲何 typeof 運算符對於 null 值會返回 "Object"。這其實是 JavaScript 最初實現中的一個錯誤,而後被 ECMAScript 沿用了。如今,null 被認爲是對象的佔位符,從而解釋了這一矛盾,但從技術上來講,它仍然是原始值。對象
如前所述,Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined。教程
var oTemp;
提示:值 undefined 並不一樣於未定義的值。可是,typeof 運算符並不真正區分這兩種值。考慮下面的代碼:ip
var oTemp; alert(typeof oTemp); //輸出 "undefined" alert(typeof oTemp2); //輸出 "undefined"
前面的代碼對兩個變量輸出的都是 "undefined",即便只有變量 oTemp2 從未被聲明過。若是對 oTemp2 使用除 typeof 以外的其餘運算符的話,會引發錯誤,由於其餘運算符只能用於已聲明的變量上。字符串
例如,下面的代碼將引起錯誤:string
var oTemp; alert(oTemp2 == undefined);
當函數無明確返回值時,返回的也是值 "undefined",以下所示:it
function testFunc() { } alert(testFunc() == undefined); //輸出 "true"
幾個特殊值也被定義爲 Number 類型。前兩個是 Number.MAX_VALUE 和 Number.MIN_VALUE,它們定義了 Number 值集合的外邊界。全部 ECMAScript 數都必須在這兩個值之間。不過計算生成的數值結果能夠不落在這兩個值之間。
當計算生成的數大於 Number.MAX_VALUE 時,它將被賦予值 Number.POSITIVE_INFINITY,意味着再也不有數字值。一樣,生成的數值小於 Number.MIN_VALUE 的計算也會被賦予值 Number.NEGATIVE_INFINITY,也意味着再也不有數字值。若是計算返回的是無窮大值,那麼生成的結果不能再用於其餘計算。
事實上,有專門的值表示無窮大,(如你猜到的)即 Infinity。Number.POSITIVE_INFINITY 的值爲 Infinity。Number.NEGATIVE_INFINITY 的值爲 -Infinity。
因爲無窮大數能夠是正數也能夠是負數,因此可用一個方法判斷一個數是不是有窮的(而不是單獨測試每一個無窮數)。能夠對任何數調用 isFinite() 方法,以確保該數不是無窮大。例如:
var iResult = iNum * some_really_large_number; { alert("finite"); } else { alert("infinite"); }if (isFinite(iResult))
最後一個特殊值是 NaN,表示非數(Not a Number)。NaN 是個奇怪的特殊值。通常說來,這種狀況發生在類型(String、Boolean 等)轉換失敗時。例如,要把單詞 blue 轉換成數值就會失敗,由於沒有與之等價的數值。與無窮大同樣,NaN 也不能用於算術計算。NaN 的另外一個奇特之處在於,它與自身不相等,這意味着下面的代碼將返回 false:
alert(NaN == NaN); //輸出 "false"
出於這個緣由,不推薦使用 NaN 值自己。函數 isNaN() 會作得至關好:
alert(isNaN("blue")); //輸出 "true" alert(isNaN("666")); //輸出 "false"
String 類型的獨特之處在於,它是惟一沒有固定大小的原始類型。能夠用字符串存儲 0 或更多的 Unicode 字符,有 16 位整數表示(Unicode 是一種國際字符集,本教程後面將討論它)。
字符串中每一個字符都有特定的位置,首字符從位置 0 開始,第二個字符在位置 1,依此類推。這意味着字符串中的最後一個字符的位置必定是字符串的長度減 1:
字符串字面量是由雙引號(")或單引號(')聲明的。而 Java 則是用雙引號聲明字符串,用單引號聲明字符。可是因爲 ECMAScript 沒有字符類型,因此可以使用這兩種表示法中的任何一種。例如,下面的兩行代碼都有效:
var sColor1 = "red"; var sColor2 = 'red';
摘自:http://www.w3school.com.cn/js/pro_js_typeconversion.asp