JavaScript的原始類型,javascript
原始值與引用值
在ECMAScript 中,變數可以存放兩種類型的值,即原始值和引用值。
- 原始值(primitive value)是存放在棧(stack)中的簡單資料欄位,也就是說,它們的值直接儲存在變數訪問的位置。
- 引用值(reference value)是儲存在堆(heap)中的對象,也就是說,儲存在變數出的值是一個指標(point),指向儲存物件的記憶體處。
原始類型
ECMAScript 中有5種原始類型,即Undefined,Null,Boolean,Number和String。ECMAScript把術語類型定義為一個集合,每種原始類型定義了它包含的值的範圍及其字面量表示形式。ECMAScript 提供了typeof 運算子來判斷一個值是否在某種範圍內。
typeof運算子
typeof 運算子有一個參數,即要檢查的變數或值。例如:
var sName = “zhangsan";alert(typeof sName); //output stringalert(typeof 88); //output number
對變數或值調用typeof運算子將返回下列值之一:
- "undefined",如果變數是Undefined型的
- "object",如果變數是一種參考型別或Null類型的。
Undefined類型
Undefined 類型只有一個值,即undefined。
undefined值一般有三種情況:
聲明的變數未初始化
當聲明的變數未初始化時,該變數的預設值為undefined。
var sName;alert(typeof sName); alert(sName == undefined);
前面聲明的sName,沒有初始值。該變數將被賦予undefined,即Undefined類型的字面量。
未聲明的變數
當使用一個未聲明的變數時,變數的預設值為undefined。
var sName;alert(typeof sName); // output undefinedalert(typeof sAge); // output undefined
未聲明的變數,預設值會給undefined
函數無明確返回值時
當函數無明確返回值或無返回值時,返回的為undefined
function testFunction() {// no return}
例如
function testFunction() {return;}alert(testFunction == undefined); // output “true”
Null 類型
Null類型的值只有一個null,即它的字面量。值undefined實際上由null派生而來,因此ECMAScript把它們定義為相等。
alert(null == undefined); // output true
儘管這兩個值相等,但它們的含義不同。Undefined是聲明了變數但未對其初始化時賦予該變數的值,null則用於表示尚未存在的對象。如果函數或方法要返回的是對象,那麼找不到對象時,返回的通常是null。
Boolean類型
Boolean 類型是ECMAScript 中最常用的類型之一。它有兩個值true 和false。在一些情況下,0 也可以被轉換為false。
Number 類型
Number型的數字既可以表示32位的整數,也可以表示64位的浮點數。直接輸入的任何數字都被看作Number型的字面量。
var iNum = 123;
整數可以被表示為八進位或十六進位的字面量。
八進位字面量的首數字必須是0,其後的數字可以是任何八位元字(0到7)。
var iNum = 070; // 070 is equals 56 in decimal
要建立十六進位的字面量,首位位元必須是0,其後接字母x,然後是任意的十六進位數字(0-9A-F)。這些字母可以是大寫的,也可以是小寫。
var iNum1 = 0x1f; // 31var iNum2 = 0x2B; // 43
儘管所有整數都可表示為八進位或十六進位的字面量,但所有數學運算返回的都是十進位結果。
String 類型
String 類型的獨特之處在於,它是唯一沒有固定大小的原始類型。可以用字串儲存0或更多的Unicode字元,由16位整數表示(Unicode是一種國際字元集)。
字串中的每個字元都有特定的位置,首字元從位置0開始,第二個字元在位置1,依次類推。字串最後一個位置的位置是字串的長度減一。
hello
這個字串的長度為5
h 為第0個字元,e 為第1個字元,最後一個字元o為第4(即字串長度5 減去 1)個字元
字串字面量可以由雙引號(”)或單引號(’)聲明。
例如,下面的兩行都是有效聲明:
var sColor1 = "blue";var sColor2 = 'blue';
附上所有的代碼
<script>// typeof var sName = "zhangsan";alert(typeof sName); //output stringalert(typeof 88); //output number// undefinedvar sName;alert(typeof sName); // output undefined alert(sName == "undefined"); //output truealert(typeof sAge); // output undefinedfunction testFunction() {return;}alert(testFunction == undefined); // output true// nullalert(null == undefined); // output true// numbervar iNum = 070; // 070 is equals 56 in decimalalert(iNum);var iNum1 = 0x1f;alert(iNum1);var iNum2 = 0x2B;alert(iNum2);// stringvar sColor1 = "blue";alert(sColor1);var sColor2 = 'blue';alert(sColor2);</script>