JavaScript1.5 運算子(Operators)(下)

邏輯運算子(Logical Operators)

兼容性:IE3+、NN2+、Moz1+、Safari1+

邏輯運算子通常會搭配使用布林(邏輯)值,當它們是時,則傳回一個布林值。不過,這 && 與 || 實際上傳回一個特定運算元的值,因此,如果這些運算子搭配非布林值(non-Boolean)的值,它們可能會傳回非布林值(non-Boolean)的值。邏輯運算子通常是做一些有關布林型態的運算,傳回的值可以是 true 或 false, 如果有算式未被定義,就會傳回 null。

  • && – 邏輯 AND
  • || – 邏輯 OR
  • ! – 邏輯 NOT
 &&(且)  兩邊的值假如都是 true 的話則傳回 true ,否則傳回 false。例如: 1<2 && 5>2 → 傳回 true 。
 ||(或)  兩邊的值假如其一是 true 的話則傳回 true ,否則傳回 false。例如: 1<2 || 5<2 → 傳回 true 。
 !(非)  值假如是 true 則傳回 false 。

以下顯示 && 運算子的程式碼範例:

true && true			// t && t 回傳 true
true && false			// t && f 回傳 false
false && true			// f && t 回傳 false
false && (3 == 4)		// f && f 回傳 false
"Cat" && "Dog"			// t && t 回傳 Dog
false && "Cat"			// f && t 回傳 false
"Cat" && false			// t && f 回傳 false

以下顯示 || 運算子的程式碼範例:

true || true			// t || t 回傳 true
false || true			// f || t 回傳 true
true || false			// t || f 回傳 true
false || (3 == 4)		// f || f 回傳 false
"Cat" || "Dog"			// t || t 回傳 Cat
false || "Cat"			// f || t 回傳 Cat
"Cat" || false			// t || f 回傳 Cat

以下顯示 ! 運算子的程式碼範例:

!true				// !t 回傳 false
!false				// !f 回傳 true
!"Cat"				// !t 回傳 false

捷徑轉換(Short-Circuit Evaluation)

  • false && 任何 捷徑轉換為 false
  • true || 任何 捷徑轉換為 true

位元運算子(Bitwise Operators)

兼容性:IE3+、NN2+、Moz1+、Safari1+
  • & – 位元 AND
  • | – 位元 OR
  • ^ – 位元 XOR
  • ~ – 位元 NOT
  • << – 位元左移
  • >> – 位元右移
  • >>> – 補 0 的右移

位元運算子處理其運算元以 32 bits 為一組( 0 與 1),而不是十進位、十六進位或八進位數字。例如,十進位數字 9 的二進位數字是 1001。

位元運算子執行它們的運算在這類的二進位表示上,但是它們會回傳標準的 JavaScript 數值。也就是說這類運算子用來做二進制的位元運算。底下我們就以 x = 12 與 y = 6 來說明。

 &  例如: x&y    x=1100=12 
   y=0110=6 
   x&y=0100=4 
假如兩個位元都是 1 的話,結果就是 1 ,否則是 0 。
 |  例如: x|y    x=1100=12 
   y=0110=6 
  x|y=1110=14 
假如任何一個位元是 1 的話,結果就是 1 ,否則是 0 。
 ^  例如: x^y    x=1100=12 
   y=0110=6 
 x^y=1010=10 
假如位元不相同,結果是 1 ,否則是 0 。
 ~  例如: ~x    x=1100=12 
   ~x=0011=3 
將所有位元的 0 變成 1 , 1 變成 0 。
 <<  例如: x<<2    x=1100=12 
 x<<2=110000=48 
將 x 所有的位元向左移兩個位元,右邊的位元補入 0 。
 >>  例如: x>>2    x=1100=12 
 x>>2= 11=3 
將 x 所有的位元向右移兩個位元,右邊移出的位元則忽略。
 >>>  例如: x>>>2     x=1100=12 
x>>>2=0011=3 
將 x 所有的位元向右移兩個位元,右邊移出的位元則忽略,左邊的位元補入 0 。

字串運算子(String Operators)

兼容性:IE3+、NN2+、Moz1+、Safari1+

除了比較運算子可以用來做字串值的運算外,這個加號運算子(+)可以串接兩邊運算元的字串值,然後回傳另一個值,也可說是回傳其兩個運算元之字串的聯集。例如:

"我的 "+"JavaScript"		//結果為 我的 JavaScript

條件運算子(Conditional Operators)

兼容性:IE3+、NN2+、Moz1+、Safari1+

條件運算子是 JavaScript 唯一可接受的三元運算子。「? :」根據條件式判斷結果的真假,然後從兩個值中決定要傳回那一個值。例如:

variable = (condition) ? val1 : val2;

當 condition 的值為 true 時,會傳回 val1,反之則傳回 val2。

物件運算子(Object Operators)

delete 兼容性:IE4+、NN4+、Moz1+、Safari1+
delete objectName
delete objectName.property
delete objectName[index]
delete property

這個 delete 運算子是用來刪除物件、物件的屬性或在陣列中一個指定的索引元素。

您可以使用它來刪除已宣告的變數,但是不能刪除以 var 作宣告的變數。假如刪除成功,它將設置一個 undefined 的值給屬性或者元素;以後如果繼續引用這個早被刪除的變數或物件,則會產生錯誤。假如運算子可行,則回傳一個 true 值;假如運算子不可行,則回傳一個 false 值。

myobj = new Number()
myobj.z = 4         //創造一個屬性 z
delete x            //回傳 true  (可以刪除變數)
delete y            //回傳 false (不能刪除變數)
delete Math.PI      //回傳 false (不能刪除內定的屬性)
delete myobj.z      //回傳 true  (可以刪除自定義的屬性)
delete myobj        //回傳 true  (可以刪除已宣告的變數)
in 兼容性:IE5.5+、NN6+、Moz1+、Safari1+
propNameOrNumber in objectName

假如所指定的屬性在我們所指定的物件中,則 in 運算子就會回傳一個 true 值。它是讓 Script 檢查物件,看看一個物件中是否有命名的屬性和方法。若是物件知道的屬性或方法則回傳 true 值,反之則傳回 false 值。

myArr = new Array("red","blue","white","black")
0 in myArr         //回傳 true
3 in myArr         //回傳 true
4 in myArr         //回傳 false
"red" in myArr     //回傳 false (必須是指定的索引號)
"length" in myArr  //回傳 true  (length 是 Array 的屬性之一)

//內定物件
"PI" in Math       //回傳 true

//自定義物件
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar    //回傳 true
"model" in mycar   //回傳 true
instanceof 兼容性:IE5+、NN6+、Moz1+、Safari1+
objectName instanceof objectType

假如所指定的物件在我們所指定的物件類型中,則 instanceof 運算子就會回傳一個 true 值。它是使用在當您執行時需要確認物件的類型時。它是讓 Script 測試一個物件是否為 JavaScript 內部的物件或 DOM 物件。

theDay = new Date(2000, 12, 20);
document.write(theDay instanceof Date); //結果顯示為 true
new 兼容性:IE3+、NN2+、Moz1+、Safari1+
objectName = new objectType (param1 [,param2] ...[,paramN])

您可以使用它來創造一個依據使用者自定義(user-defined)的物件類型或者一個擁有建構式函式的內建物件類型,如 Array、Boolean、Date、Function、Image、Number、Object、Option、RegExp、String。

myArr = new Array();
this 兼容性:IE3+、NN2+、Moz1+、Safari1+
this[.propertyName]

使用 this 關鍵字來引用當前的物件。在一般情形下,方法中的 this 是指引使用它自身的物件。

<input type="text" name="text1" onchange="process(this.value)">
function myObj(a) {
	this.x = a*10;
}
newObj = new myObj(5);
document.write("newObj.x = ",newObj.x);  //其結果為 newObj.x = 50

其它運算子(Miscellaneous Operators)

, 兼容性:IE3+、NN2+、Moz1+、Safari1+
expr1, expr2, …

「,」逗號運算子表示一系列的表達式,它們按照由左至右的順序求值。一般是用來進行多個變數的初始化。

逗號運算子非常簡單。它會依次計算兩個操作數並返回第二個操作數的值。你可以在你想要在只能填入一個表達式的地方寫入多個表達式時使用逗號運算子。該運算子最常見的用途是在迴圈敘述句中使用多個變數作為循環變數。

var myColor, myObj, myNum;
for (var i = 0, j = 10;i <= 10;i++, j--)
	document.write([i,j] +"<br />");
typeof 兼容性:IE3+、NN2+、Moz1+、Safari1+
typeof(myData)

myData:字串、變數、關鍵字。

typeof() 主要是用來處理資料前,想要知道此資料的類型。這個運算子會回傳一個資料的類型字串。資料可以是字串、變數、關鍵字或將可以回傳類型的物件。

var myVar1 = "hi";
var myVar2 = 9999;
var myFun  =new Function("10+10");
var today = new Date();
document.write(typeof(myVar1));  //結果為 string
document.write(typeof(myVar2));  //結果為 number
document.write(typeof(myFun));   //結果為 function
document.write(typeof(today));   //結果為 object
document.write(typeof(false));   //結果為 boolean
document.write(typeof(null));    //結果為 object
void 兼容性:IE3+、NN2+、Moz1+、Safari1+
void(###)

###:方法、屬性、數值、運算式等等。

此 void 運算子將所指定的表達式刻意轉換為一個未定義之值(避免輸出不應該輸出的值)。

您可以使用這個運算子來指定一個表達式作為一個超鏈結。表達式會被轉換但是不會在當前文件處裝入任何內容。通常用來使超鏈結無效時,避免切換到另一頁。

<a href="javascript:void(0)">Click</a>

文章分類

文章標籤