JScript 中的強制型轉
JScript 可以在不同型別的值之上執行作業,而不會讓編譯器引發例外。 相反地,JScript 編譯器會自動將其中一種資料型別變更 (強制型轉,Coercion) 為另一種型別,再執行作業。 其他語言在規範強制型轉上有較嚴格的規則。
強制型轉詳細資訊
除非編譯器可以證明強制型轉會一律失敗,否則會接受所有的強制型轉。 編譯時期任何「可能」失敗的強制型轉會產生警告,而當強制型轉失敗時,會產生執行階段錯誤。 例如:
作業 |
結果 |
---|---|
數字和字串相加 |
將數字強制型轉為字串。 |
布林值和字串相加 |
將布林值強制型轉為字串。 |
數字和布林值相加 |
將布林值強制型轉為數字。 |
參考下列範例:
var x = 2000; // A number.
var y = "Hello"; // A string.
x = x + y; // the number is coerced into a string.
print(x); // Outputs 2000Hello.
若要明確地將字串轉換為整數,請使用 parseInt 方法。 如需詳細資訊,請參閱 parseInt 方法。 若要明確地將字串轉換為數字,請使用 parseFloat 方法。 如需詳細資訊,請參閱 parseFloat 方法。 請注意,若是比較的用途,字串會自動轉換為對等的數字,但若是加法 (串聯) 則會保留為字串。
因為 JScript 也是一種強型別 (Strongly Typed) 的語言,所以另有一種強制型轉機制可用。 新的機制使用目標型別名稱,當做可接受運算式轉換為引數的函式。 這適用在所有 JScript 原始型別、JScript 參考型別和 .NET Framework 型別。
例如,以下程式碼將整數值轉換為布林值:
var i : int = 23;
var b : Boolean;
b = i;
b = Boolean(i);
因為 i 的值是一個非零值,所以 b 是 true。
新的強制型轉機制也可以和很多使用者定義的型別搭配使用, 當轉換不同的型別時,JScript 可能會錯譯使用者的意向,因此某些強制型轉到使用者定義或來自使用者定義的強制型轉將無法使用。 當轉換而來的型別是由幾個值組成時,這種情況特別常發生。 例如,以下程式碼建立兩個類別 (型別)。 一個含有為整數的單一變數 i 。 另一個包含三個變數 (s、f 和 d),每個變數的型別都不同。 在最終的陳述式中,JScript 無法判斷如何將第一個型別的變數轉換為第二個型別。
class myClass {
var i : int = 42;
}
class yourClass {
var s : String = "Hello";
var f : float = 3.142;
var d : Date = new Date();
}
// Define a variable of each user-defined type.
var mine : myClass = new myClass();
var yours : yourClass;
// This fails because there is no obvious way to convert
// from myClass to yourClass
yours = yourClass(mine);