Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

特殊運算子

 

特殊運算子

JavaScript 提供下列的特殊運算子︰

條件運算子

條件運算子是 JavaScript 唯一使用三個運算元的運算子。運算子根據條件得到兩個值的其中一個。語法為︰

condition ? val1 : val2

如果 condition 為 true,運算子得到 val1 的值。否則得到 val2 的值。你可以在條件運算子上使用標準運算子。

例如,

status = (age >= 18) ? "adult" : "minor"

這個語句把“adult”的值代入給變數 status,只要 age 是 18 以上。否則,把“minor”的值代入給 status

逗號運算子

逗號運算子 (,) 簡單的對他的兩個運算元求值,並返回第二個運算元的值。這個運算子主要用在 for 迴圈內部,使多個變數可在每一次的循環中更新。

例如,如果 a 是各邊含有 10 個元素的二維陣列,以下代碼使用逗號運算子同時遞增兩個變數。這個代碼在陣列裡輸出斜三角元素︰

for (var i=0, j=9; i <= 9; i++, j--)
   document.writeln("a["+i+"]["+j+"]= " + a[i][j])

delete

delete 運算子可刪除物件、物件的屬性、陣列中指定索引的元素。語法為︰

delete objectName
delete objectName.property
delete objectName[index]
delete property // 只在 with 語法之內有效

此處的 objectName 是指物件的名稱,property 是指現存的屬性,index 是指陣列中以整數表示的元素位置。

第四種於物件中刪除屬性的形式,只在 with 語法之內有效。

你可以使用 delete 運算子刪除以隱式宣告、沒有使用 var 語法的變數。

如果 delete 運算子成功的話,他會把屬性或元素設定為 undefined。如果操作是可行的話,delete 運算子返回 true;如果操作不可行,就返回 false。

x=42
var y= 43
myobj=new Number()
myobj.h=4      // 建立屬性 h
delete x       // 返回 true(如果以隱式宣告,就可以刪除)
delete y       // 返回 false(如果以 var 宣告,就不能刪除)
delete Math.PI // 返回 false(預先定義的屬性不能刪除)
delete myobj.h // 返回 true(使用者定義的屬性可以刪除)
delete myobj   // 返回 true(如果以隱式宣告,就可以刪除)

刪除陣列裡的元素
當你刪除陣列元素時,陣列的長度並不受影響。舉例來說,如果你刪除 a[3],a[4] 仍然是 [4],a[3] 則是 undefined。

delete 運算子移除陣列的元素時,這個元素便不復存在於陣列之中。在以下範例中,使用 delete 移除 trees[3]。

trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
   // 此處不會被執行
}

如果你希望陣列元素存在、且元素的值是未定義,就使用 undefined 關鍵字取代 delete 運算子。在以下範例中,trees[3] 的值被代入為 undefined,而陣列元素仍然存在︰

trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
if (3 in trees) {
   // 此處會被執行
}

in

如果指定的屬性存在於指定的物件中,in 運算子返回 true。語法為︰

propNameOrNumber in objectName

此處 propNameOrNumber 是指表示為屬性名的字串、或表示為陣列索引的數值的表達式,objectName 是指物件的名稱。

以下範例示範 in 運算子的使用方法。

// 陣列
trees=new Array("redwood","bay","cedar","oak","maple")
0 in trees        // 返回 true
3 in trees        // 返回 true
6 in trees        // 返回 false
"bay" in trees    // 返回 false(你必須指定索引編號,而不是索引上的值)
"length" in trees // 返回 true(length 是 Array 的屬性)

// 預先定義的物件
"PI" in Math          // 返回 true
myString=new String("coral")
"length" in myString  // 返回 true

// 自訂的物件
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar  // 返回 true
"model" in mycar // 返回 true

instanceof

如果指定的物件屬於指定的物件的類型,instanceof 運算子返回 true。語法為︰

objectName instanceof objectType

此處 objectName 是指用來和 objectType 作比較的物件的名稱,objectType 是指物件的類型,如 DateArray

當你需要確認執行中物件的類型時,就使用 instanceof。舉個例子,當接受到例外時,你可以根據被拋出的例外來決定要執行哪一條例外處理。

例如,以下代碼使用 instanceof 確認 theDay 是否屬於 Date 物件。由於 theDay 屬於 Date 物件,所以會執行 if 語法裡的語句。

theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
   // 被執行的語句
}

new

你可以使用 new 運算子來建立使用者定義的物件類型的實體,或建立預先定義的物件類型 Array、BooleanDateFunctionImageNumberObjectOptionRegExpString 其中之一。在伺服器上,你也可以用於 DbPoolLockFileSendMailnew 的使用方法如下︰

objectName = new objectType ( param1 [,param2] ...[,paramN] )

你也可以使用物件的初始化子來建立物件,如同 物件初始化子的使用 所述。

參閱 Core JavaScript 參考中的 new 運算子 頁面,以取得更多資訊。

this

使用 this 關鍵字可參考目前所使用的物件。一般而言,this 是在方法裡、並參考了呼叫這個方法的物件。this 的使用方法如下︰

this[propertyName]

範例 1
假設有一個稱為 validate 的函數可驗證某一物件的 value 屬性,並以物件和上限、下限值作為參數︰

function validate(obj, lowval, hival) {
   if ((obj.value < lowval) || (obj.value > hival))
      alert("Invalid Value!")
}

你可以在每一個表單元素的 onChange 事件處理器中呼叫 validate,並使用 this 傳送表單元素,如下範例︰

<B>Enter a number between 18 and 99:</B>
<INPUT TYPE = "text" NAME = "age" SIZE = 3
   onChange="validate(this, 18, 99)">

範例 2
結合 form 屬性時,this 也可以參考目前所使用的物件的親表單。在以下範例中,表單 myForm 內含一個 Text 物件和按鈕。當使用者點擊按鈕,Text 物件的值便設定為表單的名稱。按鈕的 onClick 事件處理器使用 this.form 來參考親表單 myForm

<FORM NAME="myForm">
Form name:<INPUT TYPE="text" NAME="text1" VALUE="Beluga">
<P>
<INPUT NAME="button1" TYPE="button" VALUE="Show Form Name"
   onClick="this.form.text1.value=this.form.name">
</FORM>

typeof

typeof 運算子可按下列兩種方式來使用︰

1. typeof operand
2. typeof (operand)

typeof 運算子可返回字串,這些字串指出未求值的運算元的類型。operand 是指字串、變數、關鍵字、物件,其類型可被 typeof 返回。括弧並非必要的。

假設你定義了以下變數︰

var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()

typeof 運算子對以下變數返回以下結果︰

typeof myFun 返回的是 function
typeof shape 返回的是 string
typeof size 返回的是 number
typeof today 返回的是 object
typeof dontExist 返回的是 undefined

對於 truenull 關鍵字而言,typeof 運算子返回以下結果︰

typeof true 返回的是 boolean
typeof null 返回的是 object

對於數字或字串而言,typeof 運算子返回以下結果︰

typeof 62 返回的是 number
typeof 'Hello world' 返回的是 string

對於屬性值而言,typeof 運算子返回屬性裡的值的類型︰

typeof document.lastModified 返回的是 string
typeof window.length 返回的是 number
typeof Math.LN2 返回的是 number

對於方法和函數而言,typeof 運算子返回以下結果︰

typeof blur 返回的是 function
typeof eval 返回的是 function
typeof parseInt 返回的是 function
typeof shape.split 返回的是 function

對於預先定義的物件而言,typeof 運算子返回以下結果︰

typeof Date 返回的是 function
typeof Function 返回的是 function
typeof Math 返回的是 function
typeof Option 返回的是 function
typeof String 返回的是 function

void

void 運算子可按下列兩種方式來使用︰

1. void (expression)
2. void expression

void 運算子表示表達式求值之後不必把值返回。expression 是指可供求值的 JavaScript 表達式。表達式兩邊的圓括號並不是必要的,但圓括號的使用對閱讀有利。

你可以把 void 運算子使用於當作超連結的表達式。表達式會被求值,但不會被載入而取代目前的文件。

以下代碼建立了什麼也不做的超連結。當使用者點擊連結時,void(0) 的求值為 undefined,這在 JavaScript 中並沒有作用。

<A HREF="javascript:void(0)">Click here to do nothing</A>

以下代碼建立了超連結,當使用者點擊時,就傳送表單。

<A HREF="javascript:void(document.form.submit())">
Click here to submit</A>

文件標籤與貢獻者

 此頁面的貢獻者: teoli, happysadman
 最近更新: teoli,