共用方式為


複製、傳遞和比較資料

更新:2007 年 11 月

JScript 複製、傳遞和比較資料的方式是根據資料的儲存方式而定,而儲存資料的方式是根據資料型別而定。JScript 可以使用傳值方式或傳址方式來儲存資料。

傳值方式與傳址方式的比較

JScript 是以「傳值方式」來複製、傳遞和比較數字和布林值 (truefalse)。這項處理會在電腦記憶體中配置一個空間,然後將原始的值複製進去。對來源的變更不會影響複本 (反之亦然),因為兩者是分離的實體。如果兩個數字或兩個布林值有相同的值,則視為兩者相等。

JScript 則以「傳址方式」來複製、傳遞和比較物件、陣列和函式。本處理基本上會建立原始項目的參考,然後將參考當做複本。對來源的變更,會改變來源和複本 (反之亦然)。真正的實體只有一個,複本只是資料的另一個參考。

如果要成功地以傳址方式來作比較,這兩個變數必須確實地參考完全相同的實體。例如,即使兩個不同的 Array 物件包含相同的元素,但是比較起來永遠不相等。為了讓比較成功,其中一個變數必須是另一個變數的參考。若要查看兩個陣列是否有相同的元素,請比較 toString() 方法的結果。

最後,JScript 會以傳址方式來複製和傳遞字串。根據字串是否為物件而決定比較字串的方式。兩個 String 物件 (以 new String ("something") 建立) 是以傳址方式進行比較,而如果其中的一個 (或兩個) 字串是常值或原始字串值,則以傳值方式來比較。如需詳細資訊,請參閱 JScript 設定和相等

注意事項:

ASCII 和 ANSI 字元集是依序將大寫字母置於小寫字母之前的方式建構而成。例如經過比較之後,"Zoo" 會於 "aardvark"。如果您想要執行不區分大小寫的比對,可以在兩個字串上呼叫 toUpperCase()toLowerCase()

函式參數

當 JScript 以傳值方式將參數傳遞給函式時,就是製作了只存在於函式內部之該參數的個別複本。雖然物件和陣列是以傳址方式來傳遞,但如果您直接在函式中以新值來覆寫它們,則新值並不會反映到函式以外。只有對物件屬性或陣列元素的變更才能在函式以外顯示。

例如,以下程式有兩個函式。第一個函式會覆寫輸入參數,此參數能避免進一步變更參數而影響到原始輸入引數。第二個函式會變更物件的屬性,而不用覆寫物件。

function clobber(param) {
   // Overwrite the parameter; this will not be seen in the calling code
   param = new Object();
   param.message = "This will not work.";
}

function update(param) {
    // Modify the property of the object; this will be seen in the calling code.
    param.message = "I was changed.";
}

// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";

// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);

// Call update, and print obj.message.
update(obj);
print(obj.message);

本程式碼的輸出為:

This is the original.
I was changed.

資料比較

JScript 可以使用傳值方式或傳址方式來比較資料。如果要用傳值方式來作測試,JScript 會比較兩個不同的項目,以便決定他們是否相等。通常,這個比較是以逐位元組的基礎來執行的。當用傳址方式來測試時,則會檢查這兩個項目是否參考相同的項目。如果是的話,則它們會比較為相等。如果不是的話,即使它們逐一位元組都包含完全相同的值,比較結果仍是不相等。

根據字串是否為物件,決定字串使用傳值方式或傳址方式進行比較。如果兩個字串都是 String 物件,就根據傳址方式來比較字串,否則用傳值方式來比較。如果有兩個字串是分別建立,但擁有相同的內容,這樣可讓它們的比較結果為相同。如果要比較兩個 String 物件的值,可以先利用 toStringvalueOf 方法將物件轉換成非物件字串,然後比較兩者的結果字串。如需詳細資訊,請參閱 JScript 設定和相等

請參閱

概念

JScript 設定和相等

資料型別摘要

其他資源

JScript 語言教學課程

JScript 函式