運算子、運算式?
運算子 ( Operator ) 一定要有運算物件/ 運算元 ( Operand ) ,才可以進行運算,兩者的組合就稱之為運算式 ( Expression )
1 + 2 = 3 ,就是一個運算式, 1、2 為運算物件,加號為運算子
在JS中使用運算子
大部分的運算子並不會改變運算物件本身的值,但是賦值運算子 ( = ) 、遞增運算子 ( ++ )、遞減運算子 ( -- ) 、演算法賦值運算子 ( +=、-=、*= 等) 會改變運算物件的值
運算物件基本上都是基本資料型別,但是賦值運算子跟關係運算子 ( != 、== 等 ) 可以用於所有資料型別,對於複雜資料型別而言,操作的物件是引用而非資料物件本身
運算子的本質
運算子本身是一種特殊函數,運算物件就是他的參數,運算結果值則是返回值,每一個運算式都是單個運算子函數的組合
賦值運算子 ( = )
賦值運算子可說是用得最多的一個運算子,意思是將等號右邊的值複製給等號左邊的變數
右值可以是基本資料型別、運算式、函數返回值或是物件的引用
左側一定要是變數
因為賦值運算子可以操作所有物件,因此要注意賦予值和賦予引用的區別
算數運算子:加、減、乘、除、餘數、求反
加減乘除,原則上都一樣,而餘數是使用 ( % ) 符號,需要注意的是,如果運算物件不是整數,或是運算物件之間小數點差別較大,都有可能會出現意外小數 ( 13.1 % 5 = 3.0999999999 )
減法運算子作為單項運算子來使用的話 ( -a ),就是求反運算,等同於將運算物件乘以 ( -1 )
而加法運算子可以對字串進行拼接 ( 'a'+'a' = 'aa' )
算術賦值運算子: += 、 -= 、*= 、 /= 、%=
算術賦值運算子其實是賦值運算子和算術運算子的組合縮寫
a += b -> a = a + b ; a -= b -> a = a -b 以此類推
關係運算子 - 等於系列 : == ( 等於 ) 、 != ( 不等於 )、 === ( 全等於 )、!== ( 不全等於 )
關係運算子為二元運算子,左右兩邊各有一個運算物件,可以為變數或是運算式,運算的返回值為布林值
對於基礎資料型別而言,如果兩邊的值相同,即相等,但是對於複雜資料型別則是判斷引用是否相同,而非引用的值是否相同
如果使用等於運算子 ( == ) ,兩邊的基礎資料型別不同的話,會自動執行型別轉化再做判斷
而全等於則不做型別轉化,因此不同型別的變數會返回 false ,唯一的例外是數值型別視為同型別
等於運算子跟全等於運算子對於變數的預設值的比較也不同
- 兩邊物件都是 Number 且值都為 NaN 時,兩者皆判定為 false
- 兩邊的物件的值為 undefined 和 null 時,等於返回 true ,而全等於返回 false
- 在Java的世界裡,如果使用基礎型別包裝類別建立的,即使值相同,使用全等於會返回false,因為兩者引用不同
- 表示建構,也就是會各產生一個新的記憶體位置儲存 integer 8
- a == b 因為各自引用不同的記憶體位置,因此返回 false
Integer a = new Integer(8); Integer b = new Integer(8);
- 因為Java會預先Cache -128 ~ 127 範圍的數字,因此不會建構新的,使用Cache建立的記憶體位置
- 所以 c == d 時,返回值為 true
Integer c = 8; Integer d = 8;
- 超出了預先建立的Cache範圍,等同於 Integer e = new Integer(129),兩者會各自建構
- 因此 e == f 也會返回 false
Integer e = 129; Integer f = 129;
關係運算子 - 數值大小比較:>=、<=、>、<
當左右兩側的運算物件都是數值時,以上符號和數學一樣,但是當其中一邊的物件是非數值時,非數值的物件會盡量轉成數值,如果無法轉換則回傳值始終為 false
邏輯運算子:&&、|| 、!
邏輯運算子只有三個,分別為邏輯 AND 運算子 ( && )、邏輯 OR 運算子 ( || ) 和
邏輯 NOT ( ! ) ,左右兩側的運算物件可以是變數、函數返回值或是運算式
當兩者為 True , 邏輯 AND 運算子才返回 True
當兩者其一為 True , 邏輯 OR 運算子就會返回 True
邏輯 NOT 運算子為單項運算子,只有一個運算物件,返回值為該物件的布林反值,也是就是 True 返回 False , False 返回 True
當使用 && 時,如果第一項運算式返回 False ,就不會再去往後判斷後面的運算式
如果使用 || 時,如果第一項運算式返回 True ,也不會去往後判斷
三元 if-else 運算子: ? :
又稱之為條件運算子,為唯一的一個三元運算子,表達式為
( 條件運算式 )? ( 運算式 2 ) :( 運算式 3 )
當條件運算式返回值為 True 時,執行運算式 2 ,否則執行運算式 3 ,等同於以下語法
if ( 條件運算式 ) { return 運算式 2 ; } else { return 運算式 3 ; }
typeof 、 is 、 as
typeof 是用字串形式來返回物件的型別 ( int、string、array、object ... )
is 則是判斷物件是不是屬於指定型別,返回布林值
as 同上,但是返回值為該物件或是 null
in
in 是用來判斷一個物件是否存在於另一個物件的 Key 或 索引,返回值為布林
let arrayA = [1, 2, 3]; if ( 1 in arrayA ) { console.log('yes'); }
沒有留言:
張貼留言