1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
---
title: 特殊運算子
slug: >-
conflicting/Web/JavaScript/Guide/Expressions_and_Operators_952d66f1fe521bc0574c89750f5b406e
translation_of: Web/JavaScript/Guide/Expressions_and_Operators
translation_of_original: Web/JavaScript/Guide/Obsolete_Pages/Operators/Special_Operators
original_slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/運算子/特殊運算子
---
<p> </p>
<h3 id="特殊運算子" name="特殊運算子">特殊運算子</h3>
<p>JavaScript 提供下列的特殊運算子︰</p>
<ul> <li><a href="#條件運算子">條件運算子</a></li> <li><a href="#逗號運算子">逗號運算子</a></li> <li><a href="#delete">delete</a></li> <li><a href="#in">in</a></li> <li><a href="#instanceof">instanceof</a></li> <li><a href="#new">new</a></li> <li><a href="#this">this</a></li> <li><a href="#typeof">typeof</a></li> <li><a href="#void">void</a></li>
</ul>
<h4 id="條件運算子" name="條件運算子">條件運算子</h4>
<p>條件運算子是 JavaScript 唯一使用三個運算元的運算子。運算子根據條件得到兩個值的其中一個。語法為︰</p>
<pre>condition ? val1 : val2
</pre>
<p>如果 <code>condition</code> 為 true,運算子得到 <code>val1</code> 的值。否則得到 <code>val2</code> 的值。你可以在條件運算子上使用標準運算子。</p>
<p>例如,</p>
<pre>status = (age >= 18) ? "adult" : "minor"
</pre>
<p>這個語句把“adult”的值代入給變數 <code>status</code>,只要 <code>age</code> 是 18 以上。否則,把“minor”的值代入給 <code>status</code>。</p>
<h4 id="逗號運算子" name="逗號運算子">逗號運算子</h4>
<p>逗號運算子 (,) 簡單的對他的兩個運算元求值,並返回第二個運算元的值。這個運算子主要用在 <code>for</code> 迴圈內部,使多個變數可在每一次的循環中更新。</p>
<p>例如,如果 <code>a</code> 是各邊含有 10 個元素的二維陣列,以下代碼使用逗號運算子同時遞增兩個變數。這個代碼在陣列裡輸出斜三角元素︰</p>
<pre>for (var i=0, j=9; i <= 9; i++, j--)
document.writeln("a["+i+"]["+j+"]= " + a[i][j])
</pre>
<h4 id="delete" name="delete">delete</h4>
<p>delete 運算子可刪除物件、物件的屬性、陣列中指定索引的元素。語法為︰</p>
<pre>delete objectName
delete objectName.property
delete objectName[index]
delete property // 只在 with 語法之內有效
</pre>
<p>此處的 <code>objectName</code> 是指物件的名稱,<code>property</code> 是指現存的屬性,<code>index</code> 是指陣列中以整數表示的元素位置。</p>
<p>第四種於物件中刪除屬性的形式,只在 <code>with</code> 語法之內有效。</p>
<p>你可以使用 <code>delete</code> 運算子刪除以隱式宣告、沒有使用 <code>var</code> 語法的變數。</p>
<p>如果 <code>delete</code> 運算子成功的話,他會把屬性或元素設定為 <code>undefined</code>。如果操作是可行的話,<code>delete</code> 運算子返回 true;如果操作不可行,就返回 false。</p>
<pre>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(如果以隱式宣告,就可以刪除)</pre>
<p><strong>刪除陣列裡的元素</strong><br>
當你刪除陣列元素時,陣列的長度並不受影響。舉例來說,如果你刪除 a{{ mediawiki.external(3) }},a{{ mediawiki.external(4) }} 仍然是 {{ mediawiki.external(4) }},a{{ mediawiki.external(3) }} 則是 undefined。</p>
<p>當 <code>delete</code> 運算子移除陣列的元素時,這個元素便不復存在於陣列之中。在以下範例中,使用 <code>delete</code> 移除 trees{{ mediawiki.external(3) }}。</p>
<pre>trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
// 此處不會被執行
}
</pre>
<p>如果你希望陣列元素存在、且元素的值是未定義,就使用 <code>undefined</code> 關鍵字取代 <code>delete</code> 運算子。在以下範例中,<code>trees{{ mediawiki.external(3) }}</code> 的值被代入為 <code>undefined</code>,而陣列元素仍然存在︰</p>
<pre>trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
if (3 in trees) {
// 此處會被執行
}
</pre><h4 id="in" name="in">in</h4>
<p>如果指定的屬性存在於指定的物件中,<code>in</code> 運算子返回 true。語法為︰</p>
<pre>propNameOrNumber in objectName
</pre>
<p>此處 <code>propNameOrNumber</code> 是指表示為屬性名的字串、或表示為陣列索引的數值的表達式,<code>objectName</code> 是指物件的名稱。</p>
<p>以下範例示範 <code>in</code> 運算子的使用方法。</p>
<pre>// 陣列
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
</pre><h4 id="instanceof" name="instanceof">instanceof</h4>
<p>如果指定的物件屬於指定的物件的類型,<code>instanceof</code> 運算子返回 true。語法為︰</p>
<pre>objectName instanceof objectType
</pre>
<p>此處 <code>objectName</code> 是指用來和 <code>objectType</code> 作比較的物件的名稱,<code>objectType</code> 是指物件的類型,如 <code>Date</code> 或 <code>Array</code>。</p>
<p>當你需要確認執行中物件的類型時,就使用 <code>instanceof</code>。舉個例子,當接受到例外時,你可以根據被拋出的例外來決定要執行哪一條例外處理。</p>
<p>例如,以下代碼使用 <code>instanceof</code> 確認 <code>theDay</code> 是否屬於 <code>Date</code> 物件。由於 <code>theDay</code> 屬於 <code>Date</code> 物件,所以會執行 <code>if</code> 語法裡的語句。</p>
<pre>theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
// 被執行的語句
}
</pre><h4 id="new" name="new">new</h4>
<p>你可以使用 <code>new</code> 運算子來建立使用者定義的物件類型的實體,或建立預先定義的物件類型 <code>Array、Boolean</code><code>、</code><code>Date</code><code>、</code><code>Function</code><code>、</code><code>Image</code><code>、</code><code>Number</code><code>、</code><code>Object</code><code>、</code><code>Option</code><code>、</code><code>RegExp</code><code>、</code><code>String</code> 其中之一。在伺服器上,你也可以用於 <code>DbPool</code><code>、</code><code>Lock</code><code>、</code><code>File</code><code>、</code><code>SendMail</code>。<code>new</code> 的使用方法如下︰</p>
<pre>objectName = new objectType ( param1 [,param2] ...[,paramN] )
</pre>
<p>你也可以使用物件的初始化子來建立物件,如同 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E5%BB%BA%E7%AB%8B%E6%96%B0%E7%9A%84%E7%89%A9%E4%BB%B6/%E7%89%A9%E4%BB%B6%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AD%90%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/建立新的物件/物件初始化子的使用">物件初始化子的使用</a> 所述。</p>
<p>參閱 Core JavaScript 參考中的 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E9%81%8B%E7%AE%97%E5%AD%90/%E7%89%B9%E6%AE%8A%E9%81%8B%E7%AE%97%E5%AD%90/new_%E9%81%8B%E7%AE%97%E5%AD%90" title="zh tw/Core JavaScript 1.5 參考/運算子/特殊運算子/new 運算子">new 運算子</a> 頁面,以取得更多資訊。</p><h4 id="this" name="this">this</h4>
<p>使用 <code>this</code> 關鍵字可參考目前所使用的物件。一般而言,<code>this</code> 是在方法裡、並參考了呼叫這個方法的物件。<code>this</code> 的使用方法如下︰</p>
<pre>this[propertyName]
</pre>
<p><strong>範例 1</strong><br>
假設有一個稱為 <code>validate</code> 的函數可驗證某一物件的 <code>value</code> 屬性,並以物件和上限、下限值作為參數︰</p>
<pre>function validate(obj, lowval, hival) {
if ((obj.value < lowval) || (obj.value > hival))
alert("Invalid Value!")
}
</pre>
<p>你可以在每一個表單元素的 <code>onChange</code> 事件處理器中呼叫 <code>validate</code>,並使用 <code>this</code> 傳送表單元素,如下範例︰</p>
<pre><B>Enter a number between 18 and 99:</B>
<INPUT TYPE = "text" NAME = "age" SIZE = 3
onChange="validate(this, 18, 99)">
</pre>
<p><strong>範例 2</strong><br>
結合 <code>form</code> 屬性時,<code>this</code> 也可以參考目前所使用的物件的親表單。在以下範例中,表單 <code>myForm</code> 內含一個 <code>Text</code> 物件和按鈕。當使用者點擊按鈕,<code>Text</code> 物件的值便設定為表單的名稱。按鈕的 <code>onClick</code> 事件處理器使用 <code>this.form</code> 來參考親表單 <code>myForm</code>。</p>
<pre><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>
</pre>
<h4 id="typeof" name="typeof">typeof</h4>
<p><code>typeof</code> 運算子可按下列兩種方式來使用︰</p>
<pre>1. typeof operand
2. typeof (operand)
</pre>
<p><code>typeof</code> 運算子可返回字串,這些字串指出未求值的運算元的類型。<code>operand</code> 是指字串、變數、關鍵字、物件,其類型可被 <code>typeof</code> 返回。括弧並非必要的。</p>
<p>假設你定義了以下變數︰</p>
<pre>var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()
</pre>
<p><code>typeof</code> 運算子對以下變數返回以下結果︰</p>
<pre>typeof myFun 返回的是 function
typeof shape 返回的是 string
typeof size 返回的是 number
typeof today 返回的是 object
typeof dontExist 返回的是 undefined
</pre>
<p>對於 <code>true</code> 和 <code>null</code> 關鍵字而言,<code>typeof</code> 運算子返回以下結果︰</p>
<pre>typeof true 返回的是 boolean
typeof null 返回的是 object
</pre>
<p>對於數字或字串而言,<code>typeof</code> 運算子返回以下結果︰</p>
<pre>typeof 62 返回的是 number
typeof 'Hello world' 返回的是 string
</pre>
<p>對於屬性值而言,<code>typeof</code> 運算子返回屬性裡的值的類型︰</p>
<pre>typeof document.lastModified 返回的是 string
typeof window.length 返回的是 number
typeof Math.LN2 返回的是 number
</pre>
<p>對於方法和函數而言,<code>typeof</code> 運算子返回以下結果︰</p>
<pre>typeof blur 返回的是 function
typeof eval 返回的是 function
typeof parseInt 返回的是 function
typeof shape.split 返回的是 function
</pre>
<p>對於預先定義的物件而言,<code>typeof</code> 運算子返回以下結果︰</p>
<pre>typeof Date 返回的是 function
typeof Function 返回的是 function
typeof Math 返回的是 function
typeof Option 返回的是 function
typeof String 返回的是 function
</pre>
<h4 id="void" name="void">void</h4>
<p><code>void</code> 運算子可按下列兩種方式來使用︰</p>
<pre>1. void (expression)
2. void expression
</pre>
<p><code>void</code> 運算子表示表達式求值之後不必把值返回。<code>expression</code> 是指可供求值的 JavaScript 表達式。表達式兩邊的圓括號並不是必要的,但圓括號的使用對閱讀有利。</p>
<p>你可以把 <code>void</code> 運算子使用於當作超連結的表達式。表達式會被求值,但不會被載入而取代目前的文件。</p>
<p>以下代碼建立了什麼也不做的超連結。當使用者點擊連結時,<code>void(0)</code> 的求值為 undefined,這在 JavaScript 中並沒有作用。</p>
<pre><A HREF="javascript:void(0)">Click here to do nothing</A>
</pre>
<p>以下代碼建立了超連結,當使用者點擊時,就傳送表單。</p>
<pre><A HREF="javascript:void(document.form.submit())">
Click here to submit</A>
</pre>
<p>{{ PreviousNext("Core_JavaScript_1.5_教學:運算子:字串運算子", "Core_JavaScript_1.5_教學:正規表達式的建立") }}</p>
<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Operators/Special_Operators", "es": "es/Gu\u00eda_JavaScript_1.5/Operadores/Operadores_especiales", "fr": "fr/Guide_JavaScript_1.5/Op\u00e9rateurs/Op\u00e9rateurs_sp\u00e9ciaux", "ja": "ja/Core_JavaScript_1.5_Guide/Operators/Special_Operators", "ko": "ko/Core_JavaScript_1.5_Guide/Operators/Special_Operators", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Operatory/Operatory_specjalne" } ) }}</p>
|