現代[JavaScript] 程式設計教學:使用運算子(Operator)
文章推薦指數: 80 %
本文介紹JavaScript 中可用的運算子。
... 代數運算子使用方式如同數學上的代數,像 2 + 3 * 5 會先運算 3 * 5 再加 2 ,如果 ... 以下是JavaScript 的二位元運算子:.
Togglenavigation開源教學精選項目C語言Golang資料結構網頁程式電子書籍現代C語言程式設計C語言應用程式設計多平台Objective-C程式設計跨平台CommonLisp程式設計社群媒體臉書粉絲團臉書社團推特GitHubGumroad本站資訊關於著作權免責聲明隱私權開源教學JavaScript程式設計使用運算子(Operator)最後修改日期為JUN6,2019前言在程式語言中,運算子(operator)視為該語言基本的指令,通常不能再拆分成更小的單位。
本文介紹JavaScript中可用的運算子。
自製斷言(Assertion)傳統上,程式語言的教材會用終端機輸出文字,再由程式撰寫者判讀。
但這樣的方式並沒有充份利用到電腦程式自動化的功能,因為每次的判讀皆需要人工作業。
比較好的方式,是透過斷言(assertion)來判定程式是否錯誤。
所謂的斷言,是用來確認某段程式是否正確的程式碼。
雖然JavaScript沒有內建的斷言,我們可以自己寫一個簡易版的斷言。
參考以下實例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
assert(1+1===2,"1+1shouldbe2");
在本例中,assert是一個函式,該函式在cond不為真時,會拋出msg字串並中止程式運行。
斷言基本上就是執行這樣的任務,我們這裡用簡易的方法來實作斷言。
雖然我們還沒正式學函式的寫法,這個函式很短,可以試著讀讀看。
代數運算子(ArithmeticOperator)代數運算子(arithmeticoperator)用來進行基本的四則運算。
ECMAScript支援以下代數運算子:+:相加-:相減*:相乘/:相除%:取餘數+:取正號-:取負號++:遞增(加1)--:遞減(減1)代數運算子使用方式如同數學上的代數,像2+3*5會先運算3*5再加2,如果要改變其順序,可用中括號,像(2+3)*5會先計算(3+5)再乘5。
以下是使用代數運算子的實例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
assert(3+4==7,"Wrongvalue");
assert(3-4==-1,"Wrongvalue");
assert(3*4==12,"Wrongvalue");
assert(3/4==0.75,"Wrongvalue");
assert(3%4==3,"Wrongvalue");
由於JavaScript沒有內建的斷言(assertion),我們自製了一個簡易的版本。
使用斷言取代終端機輸出,可以讓我們清楚地表達程式的意圖,也可讓程式自動進行檢查。
由於ECMAScript的數字是浮點數,相除時可能會得到有小數點的數,這時候,可視需求使用Math.round()(四捨五入)、Math.floor()(無條件捨去)或是Math.ceil()(無條件進位)取至整數位。
如下例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
assert(Math.round(4.5)===5,"Wrongvalue");
assert(Math.floor(4.5)===4,"Wrongvalue");
assert(Math.ceil(4.5)===5,"Wrongvalue");
遞增或遞減是一種語法糖,基本上就是把x=x+1簡化的語法。
遞增/減可以前置或後置,會影響到變數的狀態,如下例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
letx=4;
//DON'TDOTHISinproductioncode.
lety=++x+x++;
assert(x===6,"Wrongvaluex");
assert(y===10,"Wrongvaluey");
在這個例子中,x遞增兩次,故得6。
y在x遞增一次後(當下為5)自身疊加一次,故得10。
雖然這是合法的JavaScript程式,但閱讀此段程式碼的人往往需多想一下程式的狀態;筆者建議不要去強記前置或後置的規則,把遞增/減寫在單獨的一行比較好。
比較運算子(RelationalOperator)比較運算子(relationaloperator)用來比較兩資料間的大小。
以下是JavaScript的比較運算子:===:嚴格相等!==:嚴格不等==:相等!=:不等>:大於>=:大於等於3,"Wrongrelation");
assert(4>=3,"Wrongrelation");
assert(3===3,"Wrongrelation");
assert(5!==3,"Wrongrelation");
assert(3<4,"Wrongrelation");
assert(3<=4,"Wrongrelation");
JavaScript使用兩種不同的相等/不等運算子,一般情形下,建議用嚴格相等/不等運算子,因為另一種相等/不等運算子有著複雜的隱性轉換規則(共23種),與其去強記那些複雜的規則不如用比較單純的嚴格相等/不等運算子。
字串運算子JavaScript用+做為字串相接的運算子:+:相接在ECMAScript6以後,可以直接用字串模板(templateliteral)取代大部分的字串相接運算子。
搭配Babel的話,可以把字串模板轉為合法的ES5字串,不用手動串連字串。
邏輯運算子邏輯運算是用來結合多個條件時使用,有以下運算子:&&:且(and)||:或(or)!:否(not)一般計算機概論的書籍會列真值表,不要特別去背誦,只要記住以下原則即可:且(and):所有條件皆為真時才為真或(or):只要其中一個條件為真時即為真以下是實例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
//&&(and)
assert((true&&true)===true,"Wronglogic");
assert((true&&false)===false,"Wronglogic");
assert((false&&true)===false,"Wronglogic");
assert((false&&false)===false,"Wronglogic");
//||(or)
assert((true||true)===true,"Wronglogic");
assert((true||false)===true,"Wronglogic");
assert((false||true)===true,"Wronglogic");
assert((false||false)===false,"Wronglogic");
//!(not)
assert((!true)===false,"Wronglogic");
assert((!false)===true,"Wronglogic");
三元運算子(TernaryOperator)三元運算子是較簡短的if…else…語法,主要用於一行內的短敘述:(condition)?..:..由於三元運算子是表達式(expression),會回傳值。
以下是實例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
letn=5>3?5:3;
assert(n===5,`Wrongvalue:${n}`);
二元運算運算子(BitwiseOperators)以下是JavaScript的二位元運算子:bitwiseand&bitwiseor|bitwisexor^bitwisenot~leftshift<
如果讀者想學二元運算,可以翻閱計算機概論等書籍,此處不詳談。
型別檢查運算子JavaScript使用typeof做為型別運算子,typeof會回傳一個字串,該字串表示資料的型別,可能的回傳值如下:"undefined""boolean""number""string"(新)"symbol""function""object"由於JavaScript的物件系統是以原型(prototype)為基礎,物件沒有類別(class)的概念,我們無法用typeof來檢查物件的型別,程式設計者需要改變對物件的思維。
我們將於後文說明JavaScript的物件系統。
指派運算子(AssignmentOperators)指派運算子算是一種語法糖,將x=x+1簡化為x+=1,大部分的代數運算子和二元運算子都有相對應的指派運算子:+=-=*=/=%=<<=>>=>>>=&=|=^=(新)解構運算(DestructingAssignment)解構運算是ECMAScript6之後所加入的新功能,主要是簡化從物件中取出資料的過程;雖然不是必備的特性,但的確可以縮減一些程式碼,如下例:/*Home-madeassertion.*/
functionassert(cond,msg){
if(!(cond)){
throw(msg?msg:'Assertionfailed');
}
}
constobj={b:2,c:3,d:4};
//Destructingassignment.
const{a,b,c}=obj;
assert(typeofa==="undefined","ashouldbeundefined");
assert(b===2,"bshouldbe2");
assert(c===3,"cshouldbe3");
在這個例子中,a沒有值,故為未定義的(undefined),b和c則各自指派到特定值。
分享本文追蹤本站
延伸文章資訊
- 1條件運算子- JavaScript
條件(三元) 運算子是JavaScript 唯一用到三個運算元的運算子:在一個條件後面會跟著一個問號(?),如果條件是truthy,在冒號(:)前的表達式會被執行, ...
- 2JavaScript三元運算子的多種使用技巧 - 程式前沿
發現程式碼慢慢寫多了的時候會不自覺的將if else 用三元來替代,僅僅是未了讓程式碼更簡潔精闢,當然也有人說用三元可以讓你有高潮的感覺。最近在寫js ...
- 3新手學習JavaScript: Day09 - 三元運算子與迴圈 - iT 邦幫忙
昨天介紹了if..else與switch的條件流程判斷,今天開頭先讓我們來補充一下三元運算子,再來介紹迴圈吧! 三元運算子三元運算子,又稱「條件運算子」。
- 4JavaScript 利用表達式優化你的程式碼 - 卡斯伯Blog
運算子運算子依據運算元數量,可分為一元、二元甚至是三元運算子,而運算元本身也是屬於表達式,以我們常見的=== 來說就屬於二元運算子。
- 5現代[JavaScript] 程式設計教學:使用運算子(Operator)
本文介紹JavaScript 中可用的運算子。 ... 代數運算子使用方式如同數學上的代數,像 2 + 3 * 5 會先運算 3 * 5 再加 2 ,如果 ... 以下是JavaScript 的...