JavaScript運算符

算數運算符

運算符 + - * / %

+ 加號運算符

功能:

1.對數字代數求和

2.對字符串進行連接

3.將一個數值轉換成字符串 ——>數值+""

注意:任何數據類型+字符串都等于字符串

字符串拼接時:

數值+字符串——>將數值直接轉為字符串拼接

字符串+字符串——>兩者直接拼接

- 減號運算符

功能:

1.對數值進行減法操作;

2.對操作數進行“取反”操作;

3.將字符串轉換成數值;數值型字符串-0=該數值,非數值-0==NaN

* ?/ 乘號、除號運算符

功能:對兩個數進行乘法或除法運算

正負規則:同號為正,異號得負

% 取余運算符

兩個數相除取余數。

余數是正還是負,和第一個運算數的符號相同

復合賦值運算符 ?+= -= *= ?/= %=

分別相加、相減、相乘、相除和取余后賦值。


自增和自減運算符

++ ?--

對唯一的運算數進行遞增或者遞減操作(每次加1或者減1)

注意點:

1.運算數必須是一個變量、數組的一個元素或者對象的屬性

2.如果運算數是非數值則運算符會將它轉成數值直接返回,不會再+或-

3.符號位置決定運算結果:

運算數之前——>先進行遞增或者遞減,再進行求值

運算數之后——>先求值,再進行遞增或者遞減操作


關系運算符(比較運算符)

大小運算 > ?< ?>= ?<=

如果左邊 ?大于/小于/大于等于/小于等于 ?右邊,返回true,否則返回false

操作規則:

1.數值與數值比較——>比較代數值

2.僅一個運算數是數值——>將另一個運算數轉成數值,并比較它們的代數值

3.字符串與字符串——>逐個字符比較它們的Unicode數值

4.字符串與非數值——>將運算數轉換成字符串進行Unicode比較

5.運算數即非數字也非字符串——>轉換成數字或者字符串后進行比較

6.運算數無法轉換成數值或者字符串——>返回false

7.與NaN比較——>返回false

等值運算

相等比較== ? ?!=

比較兩個運算符的返回值,看返回值是否相等或不等

存在類型轉換:

布爾值:true-----1;false-----0;

對象:調用valueOf()

字符串與數值比較:字符串轉換成數值

比較原則:

1.null與undefined相等

2.NaN不等于任何數值,包括自身

3.對象,是不是同一對象,是的話 == 是true

相同比較 ?=== ? !==

不存在隱示類型轉換的絕對等于和絕對不等于,比較兩個運算數的返回值及數據類型是否相同或不同

比較原則:

1.只有數據類型和數值相同才為相同

2.原始值和引用值之間是絕對不等于

3.引用值之間比較的是它們的引用(內存地址)


對象運算符

in:判斷左邊是否是右邊的成員

instancesof:判斷左邊對象實例是否是右邊的這個類或構造函數構造出來的

new:創建并初始化一個新的對象

delete:刪除指定對象的屬性,數組元素或者變量

.和[]:存取對象和數組元素

():函數調用,改變運算符的優先級等 ? ?


邏輯運算符

&&邏輯與

規則:

1.第一個操作數是對象,返回第二個;

2.第一個操作數值為true,第二個為對象時,返回第二的對象;

3.兩個都是對象時,返回第二個;

4.其中一個操作數是null或者undefined或者NaN時,對應返回null、undefined、NaN,如果同時是這三個值中的兩個,返回第一個數;(暫時感覺0也是這個規律)

特性:

1.當且僅當兩個運算數的值為true時,返回true,否則返回false;

2.短路操作:當第一個操作數的值是false時,則不再對第二個操作數進行求值了,返回第一個。

|| 邏輯或

規則:

1.第一個操作數是對象,返回第一個;

2.第一個操作數值為false,返回第二個;

3.兩個都是對象時,返回第一個;

4.兩個操作數是null或者undefined或者NaN時,對應返回null、undefined、NaN(0也是這個規律)

特性:

1.當且僅當兩個運算數的值為false時,返回false,否則返回true;

2.短路操作:當第一個操作數的值是true時,則不再對第二個操作數進行求值了,返回第一個。

!邏輯非

非運算符返回值的為true的有:undefined、null、NaN、0、""

false的有:對象、非空字符串、非0數值

特性:

1.當運算的值為false則返回true,否則返回false。

2.連續使用兩次,可將任意類型轉成布爾值(true or false)。


位運算符

基礎知識:

1.類型:

(1).有符號:數字位是 前31位 ?,符號位是第32位

(2).無符號:只能是正數,第32位表示數值,數值范圍可以加大

2.數值范圍:-2147483648到2147483647

3.存儲方式:

正數:純二進制存儲,31位中每一位表示2的冪,用0補充無用位

負數:2進制補碼存儲,補碼的計算步驟:

(1.確定該數字的非負版本的二進制表示(例如,要計算 -18的二進制補碼,首先要確定 18 的二進制表示)

(2.求得二進制反碼,即要把 0 替換為 1,把 1 替換為 0

(3.在二進制反碼上加 1

4.當做0來處理的特殊值NaN和Infinity

邏輯位運算

返回值為1的:按位非~0、按位與&對應位全是1、按位或| 任何一位是1、按位異或^ 即不同時為1也不同時為0????

返回值為0的:按位非~1、按位與&任意一位是0、按位或| 對應位全位0、按位異或^ 對應位全0或全1 ? ?

位移操作:

左移<<:將數值的所有位左移指定的位數,所有空位用0補充。左移1位對其乘2,左移2位對其乘4,以此類推;

有符號右移>>:將數值的所有位右移指定的位數,移出的位被舍棄,保留符號位,右移1位對其除2,右移2位對其除4,以此類推(在舍棄移出位后的基礎上除);

無符號右移>>>:

正數:與有符號右移結果相同

負號:會出現無限大的數值

復合賦值運算符?

位操作符與等號結合,復合賦值不會有性能方面的提升 ??


其他運算符

1.?: ?條件運算符,又叫三目運算符,是簡潔的if else

2.typeof 類型判定運算符

3.逗號操作符,在一行語句中執行多個不同的操作,特殊的(1,2)會看一眼第一個,然后返回第二個數。



*以下是關于位運算符知識,來至于官方文檔:ECMAScript 位運算符

位運算符是在數字底層(即表示數字的 32 個數位)進行操作的。

ECMAScript 整數有兩種類型,即有符號整數(允許用正數和負數)和無符號整數(只允許用正數)。在 ECMAScript 中,所有整數字面量默認都是有符號整數,

有符號整數使用 31 位表示整數的數值,用第 32 位表示整數的符號,0 表示正數,1 表示負數。數值范圍從 -2147483648 到 2147483647。

可以以兩種不同的方式存儲二進制形式的有符號整數,一種用于存儲正數,一種用于存儲負數。正數是以真二進制形式存儲的,前 31 位中的每一位都表示 2 的冪,從第 1 位(位 0)開始,表示 20,第 2 位(位 1)表示 21。沒用到的位用 0 填充,即忽略不計。

負數也存儲為二進制代碼,不過采用的形式是二進制補碼。計算數字二進制補碼的步驟有三步:

1.確定該數字的非負版本的二進制表示(例如,要計算 -18的二進制補碼,首先要確定 18 的二進制表示)

2.求得二進制反碼,即要把 0 替換為 1,把 1 替換為 0

3.在二進制反碼上加 1

有趣的是,把負整數轉換成二進制字符串后,ECMAScript 并不以二進制補碼的形式顯示,而是用數字絕對值的標準二進制代碼前面加負號的形式輸出。

var iNum = -18;

iNum.toString(2);//輸出 "-10010"

這段代碼輸出的是 "-10010",而非二進制補碼,這是為避免訪問位 31。為了簡便,ECMAScript 用一種簡單的方式處理整數,使得開發者不必關心它們的用法。

另一方面,無符號整數把最后一位作為另一個數位處理。在這種模式中,第 32 位不表示數字的符號,而是值 231。由于這個額外的位,無符號整數的數值范圍為 0 到 4294967295。對于小于 2147483647 的整數來說,無符號整數看來與有符號整數一樣,而大于 2147483647 的整數則要使用位 31(在有符號整數中,這一位總是 0)。

把無符號整數轉換成字符串后,只返回它們的有效位。

注意:所有整數字面量都默認存儲為有符號整數。只有 ECMAScript 的位運算符才能創建無符號整數。

~位運算 NOT

位運算 NOT 由否定號(~)表示

~位運算 三步的處理過程:

1.把運算數轉換成 32 位數字

2.把二進制數轉換成它的二進制反碼

3.把二進制數轉換成浮點數

注:~位運算 實質上是對數字求負,然后減 1

& 位運算 AND

位運算 AND 由和號(&)表示,直接對數字的二進制形式進行運算。它把每個數字中的數位對齊,然后用對應的規則對同一位置上的兩個數位進行 AND 運算(兩個1才為1,否則為0)

|?位運算 OR

位運算 OR 由符號(|)表示,也是直接對數字的二進制形式進行運算。在計算每位時,OR 運算符采用OR對應的規則計算(有1即為1,否則為0)

^ ?位運算 XOR

位運算 XOR 由符號(^)表示,當然,也是直接對二進制形式進行運算。XOR 不同于 OR,當只有一個數位存放的是 1 時,它才返回 1。(相同為0,不同為1)

左移運算 <<

左移運算由兩個小于號表示(<<)。它把數字中的所有數位向左移動指定的數量的空位,用 0 填充這些空位。

注意:左移運算保留數字的符號位,即符號仍然存儲在第 32 位中

有符號右移運算 ? ?>>

有符號右移運算符由兩個大于號表示(>>)。它把 32 位數字中的所有數位整體右移,同時保留該數的符號(正號或負號)。有符號右移運算符恰好與左移運算相反。

同樣,移動數位后會造成空位。這次,空位位于數字的左側,但位于符號位之后。ECMAScript 用符號位的值填充這些空位,創建完整的數字

無符號右移運算?>>>

無符號右移運算符由三個大于號(>>>)表示,它將無符號 32 位數的所有數位整體右移。對于正數,無符號右移運算的結果與有符號右移運算一樣。

對于負數,情況就不同了。

無符號右移運算用 0 填充所有空位。對于正數,這與有符號右移運算的操作一樣,而負數則被作為正數來處理。

由于無符號右移運算的結果是一個 32 位的正數,所以負數的無符號右移運算得到的總是一個非常大的數字,如何得到這種結果的呢?

要實現這一點,需要把這個數字轉換成無符號的等價形式 如:-64 >>> 0;

然后,用 Number 類型的 toString() 獲取它的真正的位表示

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 運算符是處理數據的基本方法,用來從現有的值得到新的值。JavaScript 提供了多種運算符,本章逐一介紹這些運算...
    徵羽kid閱讀 699評論 0 0
  • 運算符,加減乘除一直都是語言的基礎,和小學數據邏輯也很接近,可以說是簡單的已經不能再簡單了。但是在js中,總有讓你...
    秋殤灬閱讀 168評論 0 0
  • 本章將會介紹 模塊和源文件訪問級別訪問控制語法自定義類型子類常量、變量、屬性、下標構造器協議擴展泛型類型別名位運算...
    寒橋閱讀 901評論 0 2
  • 運算符 JavaScript中運算符主要用于連接簡單表達式,組成一個復雜的表達式。常見的有算數表達式、比較表達式、...
    阿魯提爾閱讀 282評論 0 1
  • 這幾日,國慶放假,在微信中得知身邊的好多人都出去了,也都傳來了一些感受和圖片。沒能出去,并不見得比他們獲得的信息少...
    卡斯特羅梁閱讀 169評論 0 0