JS基本概念(3)

【5】操作符

(1)一元操作符:只能操作一個值的操作符

  • 遞增、遞減操作符

    ++a ? ?--a ? ?前置
    a++ ? ?a-- ? ?后置
(這四個操作符對任何值都適用,不能轉換成數字的轉換為NaN)

  • 一元加、一元減操作符(表示正、負)

(2)位操作符:按內存中表示數值的位來操作數值

  • ECMAScript中所有數值都以IEEE-754 64位格式存儲,但位操作符并不直接操作64位的值,而是先將64位轉化為32位的整數,然后執行操作,最后再將結果轉化為64位。
  • 對于有符號的整數,32位中的前31位用于表示整數的值。第32位用于表示數值的符號(符號位):0表示正數,1表示負數。
  • 符號位的值決定了其他位數值的格式:

    正數:以純二進制存儲
    負數:二進制補碼
      步驟:1》求這個數值絕對值的二進制碼;
         2》求二進制的反碼,即將0替換為1,將1替換為0;
         3》得到的二進制反碼加1。

//-18求補碼 
//18的二進制碼          0000 0000 0000 0000 0000 0000 0001 0010
//求反碼                1111 1111 1111 1111 1111 1111 1110 1101
//反碼加1                                                     1
//————————————————————————————————————————————————————————————————————————————
//得                   1111 1111 1111 1111 1111 1111 1110 1110
  • 在對特殊的NaN和Infinity值應用位操作時,這兩個值都會被當成0來處理。
  • 對非數值應用位操作符,會先使用Number()函數進行轉換。

  1》按位非(~):執行按位非的結果就是返回數值的反碼
  2》按位與(&):按位與操作只在兩數值的對應位都是1才返回1,任何一位是0,結果都是0
  3》按位或(|):按位或操作只在兩數值的對應位都是0才返回0,任何一位是1,結果都是1
  4》按位異或(^):按位異或操作在兩數值的對應位都是1或0返回0,只有一位是1,才返回1
  5》左移(<<)::左移操作符會將數值的所有位向左移動指定的位數,向左移位后,原數值的右側多出來的空位會以0來填充;左移不會影響操作數的符號位
  6》有符號的右移(>>):會將數值向右移動,但保留符號位,向右移位后,原數值的左側多出來的空位會以符號位的值來填充   7》無符號的右移(>>>):對正數,有符號右移和無符號右移結果相同,對于負數,無符號右移以0來填充空位,并且會把負數的二進制碼當成正數的二進制碼

(3)布爾操作符

1》邏輯非(!)

  • !對象 //false
  • !空字符串 //true
  • !非空字符串 //false
  • !數值0 //true
  • !任意非0數值(包括Infinity) //false
  • !null //true
  • !NaN //true
  • !undefined //true

使用兩個邏輯非操作符模擬Boolean()轉型函數的行為。
2》邏輯與(&&)
邏輯與操作可以應用于任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值:

  • 如果第一個操作數是對象,則返回第二個操作數;
  • 如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象;
  • 如果兩個操作數都是對象,則返回第二個操作數;
  • 如果有一個操作數是null,則返回null;
  • 如果有一個操作數是NaN,則返回NaN;
  • 如果有一個操作數是undefined,則返回undefined;

邏輯與操作是短路操作,即如果第一個操作數能夠決定結果,那么就不會再對第二個操作數求值(第一個操作數是false)。
3》邏輯或(||)
邏輯或操作可以應用于任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯或操作就不一定返回布爾值:

  • 如果第一個操作數是對象,則返回第一個操作數;
  • 如果第一個操作數的求值結果為false,則返回第二個對象;
  • 如果兩個操作數都是對象,則返回第一個操作數;
  • 如果兩個操作數都是null,則返回null;
  • 如果兩個操作數都是NaN,則返回NaN;
  • 如果兩個操作數都是undefined,則返回undefined;

邏輯或操作也是短路操作,即如果第一個操作數能夠決定結果,那么就不會再對第二個操作數求值(第一個操作數是true)。

(4)乘性操作符

1》乘法(*)

  • 如果操作數都是數值,執行常規的乘法計算,即兩個正數或兩個負數相乘的結果還是正數,而如果只有一個操作數有符號,那么結果就是負數。如果乘積超出了ECMAScript數值的表示范圍,則返回Infinity或-Infinity;
  • 如果有一個操作數是NaN,則結果是NaN;
  • 如果是Infinity與0相乘,則結果是NaN;
  • 如果是Infinity與非0數值相乘,則結果是Infinity或-Infinity,取決于有符號操作數的符號;
  • 如果是Infinity與Infinity相乘,則結果是Infinity;
  • 如果有一個數不是數值,則在后臺調用Number()將其轉換為數值,然后再應用上面的規則。

2》除法(/)

  • 如果操作數都是數值,執行常規的除法計算,即兩個正數或兩個負數相除的結果還是正數,而如果只有一個操作數有符號,那么結果就是負數。如果商超出了ECMAScript數值的表示范圍,則返回Infinity或-Infinity;
  • 如果有一個操作數是NaN,則結果是NaN;
  • 如果是0被0除,則結果是NaN;
  • 如果是非0的有限數被0除,則結果是Infinity或-Infinity,取決于有符號操作數的符號;
  • 如果是Infinity被Infinity除,則結果是NaN;
  • 如果是Infinity被任何非0數值除,則結果是Infinity或-Infinity,取決于有符號操作數的符號;
  • 如果有一個數不是數值,則在后臺調用Number()將其轉換為數值,然后再應用上面的規則。

3》求模、余數(%)

  • 如果操作數都是數值,執行常規的除法計算,返回除得的余數;
  • 如果被除數是無窮大值而除數是有限大的數值,則結果是NaN;
  • 如果被除數是有限大的數值而除數是0,則結果是NaN;
  • 如果是Infinity被Infinity除,則結果是NaN;
  • 如果被除數是有限大的數值而除數是無窮大的數值,則結果是被除數;
  • 如果被除數是0,則結果是0;
  • 如果有一個數不是數值,則在后臺調用Number()將其轉換為數值,然后再應用上面的規則。

(5)加性操作符

1》加法(+)

  • 如果兩個操作符都是數值,執行常規的加法計算,然后根據下列規則返回結果:
  • 如果有一個操作數是NaN,則結果是NaN;
  • 如果是Infinity加Infinity,則結果是Infinity;
  • 如果是-Infinity加-Infinity,則結果是-Infinity;
  • 如果是Infinity加-Infinity,則結果是NaN;
  • 如果是+0加+0,則結果是+0;
  • 如果是-0加-0,則結果是-0;
  • 如果是+0加-0,則結果是+0。
  • 如果有一個操作符是字符串,那么應用如下規則:
  • 如果兩個操作數都是字符串,則將第二個操作數與第一個操作數拼接起來;
  • 如果只有一個操作數是字符串,則將另一個操作數轉換為字符串,然后再將兩個字符串拼接起來。
  • 如果有一個操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值,然后再應用字符串的規則。對于null和undefined,則分別調用String()函數并取得字符串"null"和"undefined"。

2》減法(-)

  • 如果兩個操作符都是數值,執行常規的算數減法操作并返回結果:
  • 如果有一個操作數是NaN,則結果是NaN;
  • 如果是Infinity減Infinity,則結果是NaN;
  • 如果是-Infinity減-Infinity,則結果是NaN;
  • 如果是Infinity減-Infinity,則結果是Infinity;
  • 如果是-Infinity減Infinity,則結果是-Infinity;
  • 如果是+0減+0,則結果是+0;
  • 如果是-0減-0,則結果是+0;
  • 如果是+0減-0,則結果是-0;
  • 如果有一個操作符是字符、布爾值、null或undefined。則在后臺調用Number()函數將其轉換為數值,然后再根據前面的規則執行減法計算。如果轉換的結果是NaN,則減法的結果就是NaN;
  • 如果有一個操作數是對象,則調用對象的valueOf()方法取得表示該對象的數值。如果得到的值是NaN,則減法的結果就是NaN。如果對象沒有valueOf()方法,則調用toString()方法并將得到的字符串轉化為數值。

(6)關系操作符

小于(<)、大于(>)、小于等于(<=)、大于等于(>=) 這幾個操作符都返回一個布爾值

  • 如果兩個操作數都是數值,則執行數值比較。
  • 如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值。
  • 如果一個操作數是數值,則將另一個操作數轉化為一個數值,然后執行數值比較。
  • 如果一個操作數是對象,則調用這個對象的valueOf()方法,并用得到的結果根據前面的規則執行比較。如果對象沒有valueOf()方法,則調用toString()方法,并用得到的結果根據前面的規則執行比較。
  • 如果一個操作數是布爾值,則先將其轉換為數值,然后再執行比較。
  • 任何操作數與NaN進行關系比較,結果都是false。

(7)相等操作符

1》相等和不相等(==和!=)——先轉換再比較
先轉換操作數再比較相等性,在轉換不同的數據類型時,相等和不相等遵循以下規則:

  • 如果有一個操作數是布爾值,則在比較相等性前先將其轉換為數值---false轉換為0,true轉換為1;
  • 如果一個操作數是字符串,另一個操作數是數值,則在比較相等性前將字符串轉換為數值;
  • 如果一個操作數是對象,另一個不是,則調用對象的valueOf()方法,用得到的基本類型值按照前面的規則比較;
  • null和undefined是相等的;
  • 在比較相等性之前,不能將null和undefined轉換為其他任何值;
  • 如果有一個操作符是NaN,則相等操作符返回false,不相等操作符返回true;即使兩個操作數都是NaN,也一樣,因為按照規則,NaN不等于NaN;
  • 如果兩個操作數都是對象,則比較它們是不是同一個對象。如果兩個操作數都指向同一個對象,則相等操作符返回true;否則,返回false;
表達式
null == undefinedtrue
"NaN" == NaNfalse
5 == NaNfalse
NaN == NaNfalse
NaN != NaNtrue
5 =="5"true
false == 0true
true == 1true
true == 2flase
undefined == 0false
null == 0false

?

?

?

?

?

?

?

?

?

?

?

2》全等和不全等()——僅比較而不轉換
兩個操作數在未經轉換的情況下相等返回true,不相等返回false;

undefined == null;//true
undefined === null;// false

(8)條件操作符

variable = boolean_expression ? true_value : false_value ;

(9)賦值操作符

簡單賦值(=)將右側的值賦給左側的變量
乘/賦值(*=)
除/賦值(/=)
模/賦值(%=)
加/賦值(+=)
減/賦值(-=)
左移/賦值(<<=)
有符號右移/賦值(>>=)
無符號右移/賦值(>>>=)

(10)逗號操作符

逗號操作符多用于聲明多個變量;

var num1 = 0 , num2 = 1 , num3 = 2 ;

除此之外,逗號操作符還可用于賦值,逗號操作符總會返回表達式中最后一項。

var num = {1,2,3,4,5}; //num值為5

?

轉載于:https://www.cnblogs.com/LS-tuotuo/p/5878189.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

csv文件怎么轉成excel_Java讀寫excel,excel轉成json寫入磁盤文件

pom讀寫excel主要的dependency<dependency> <groupId>org.apache.poigroupId> <artifactId>poiartifactId> <version>3.16version> dependency> <dependency> <groupId>org.apache.poigroupId> …

如何用Ant Design Pro框架做項目省力

1、熟悉React所有語法&#xff0c;以及redux、redux-saga、dva、一類的庫的能力 2、靈活運用該框架提供的基礎UI組件&#xff0c;想方設法利用現有的UI組件進行組合&#xff0c;盡可能減少工作量 轉載于:https://www.cnblogs.com/ww01/p/10430553.html

通過在Chipotle用餐了解模板方法設計模式

by Sihui Huang黃思慧 通過在Chipotle用餐了解模板方法設計模式 (Understanding the Template Method design pattern by eating at Chipotle) Object-Oriented Design Patterns in Life— gain an intuitive understanding of OO design patterns by linking them with real-…

Coriant助力Aureon部署100Gbps光纖網絡

根據相關消息顯示&#xff0c;光傳輸設備廠商Coriant日前表示已經向網絡傳輸和業務通信服務供應商Aureon Technology提供了7100納米分組光傳輸平臺&#xff0c;幫助其進行100Gbps光纖網絡的拓展。 該服務供應商&#xff08;Aureon&#xff09;將利用該分組光傳輸系統&#xff0…

python class tynu()_Visual Studio Express | Teraz Visual Studio Community

Program Visual Studio 2019 jest teraz dost?pnyDostosowany instalatorTwrz aplikacje w technologiach WPF, WinForms, platformy uniwersaln? systemu Windows, Win32, Android, iOS i innych — wszystko to za pomoc? jednego ?rodowiska IDE zapewniaj?cego wszyst…

css樣式中如何設置中文字體?

代碼如下: .selector{font-family: SimHei,"微軟雅黑",sans-serif;} 注意&#xff1a;加上中文名“微軟雅黑”是為了兼容opera瀏覽器&#xff0c;中文字體名必須加上引號&#xff08;單引號雙引號都可以&#xff09;。 MicrosoftJhengHei為微軟正黑體&#xff0c;STH…

前端做CRM管理系統是做什么_代辦行業的CRM客戶關系管理系統應該是什么樣子的?...

隨著互聯網的深耕細化&#xff0c;很多企業也在不斷優化自己的辦公方式&#xff0c;以優化企業的辦公流程&#xff0c;提高企業的辦事效率。因此實現辦公自動化&#xff0c;或者說實現數字化辦公就需要逐漸提上日程。今天給大家講講可以幫助代辦行業實現辦公自動化的產品&#…

(譯) JSON-RPC 2.0 規范(中文版)

http://wiki.geekdream.com/Specification/json-rpc_2.0.html 起源時間: 2010-03-26(基于2009-05-24版本) 更新: 2013-01-04 作者: JSON-RPC工作組< json-rpcgooglegroups.com > 原文鏈接: http://www.jsonrpc.org/specification翻譯: leozvc < xxfs91gmail.com >…

ios pusher使用_如何使用JavaScript和Pusher實時更新用戶狀態

ios pusher使用by Rahat Khanna通過拉哈特漢娜 如何使用JavaScript和Pusher實時更新用戶狀態 (How to update a User’s Status in realtime using JavaScript and Pusher) “Hey, what’s up?” is not a phrase we need to ask someone these days. These days knowing wha…

python + pyqt5 UI和信號槽分離方法

初級菜鳥&#xff0c;知識點記錄。 每次重新生成UI.py文件的時候&#xff0c;里面的按鈕方法都會被清除&#xff0c;想一個方法可以把按鈕響應方法放到外面&#xff0c;利于維護。 新建一個按鈕文件并繼承UI代碼&#xff0c;把信號槽及按鈕響應方法寫在按鈕文件里面&#xff0c…

學習之路~sqh

推薦博客 Edison Chou&#xff1b;Vamei&#xff1b;算法?面試專題 - 簡書&#xff1b;xingoo - 博客園&#xff1b;設計模式 極速理解設計模式系列【目錄索引】- Caleung&#xff1b;Net設計模式 - 靈動生活&#xff1b;宅男程序員給老婆的計算機課程系列&#xff1b;C設計模…

python format函數保留兩位小數_python format函數

在Python 3.0中&#xff0c;%操作符通過一個更強的格式化方法format()進行了增強。對str.format()的支持已經被反向移植到了Python 2.6在2.6中&#xff0c;8-bit字符串和Unicode字符串都有一個format()方法&#xff0c;這個方法會把字符串當作一個模版&#xff0c;通過傳入的參…

藍牙 sig base uuid_藍牙模塊采用陶瓷天線和PCB天線的區別

一、陶瓷天線陶瓷天線是一種適合于藍牙設備使用的小型化天線,又分為塊狀陶瓷天線和多層陶瓷天線。陶瓷天線占用空間很小、性能比較好&#xff1b; 帶寬窄&#xff0c;比較難做到多頻段&#xff1b;有效提高主板的整合度&#xff0c;并可降低天線對ID的限制&#xff1b;需要在主…

kubernetes系列12—二個特色的存儲卷configmap和secret

本文收錄在容器技術學習系列文章總目錄 1、configmap 1.1 認識configmap ConfigMap用于保存配置數據的鍵值對&#xff0c;可以用來保存單個屬性&#xff0c;也可以用來保存配置文件。ConfigMap跟secret很類似&#xff0c;但它可以更方便地處理不包含敏感信息的字符串。 1.2 創建…

華為完成拉美銅網寬帶G.fast技術部署測試

1/11/2016,英國大東通信巴拿馬分公司日前與華為公司發布消息稱&#xff0c;覆蓋拉丁美洲地區的最快銅纜寬帶服務系統成功完成初次測試。 作為巴拿馬地區領先的移動寬帶服務提供商&#xff0c;大東通信巴拿馬分公司也是當地最大的電信服務提供商&#xff0c;此次與華為合作在現有…

kotlin調用類中的方法_一種輕松的方法來測試Kotlin中令人沮喪的靜態方法調用

kotlin調用類中的方法by Oleksii Fedorov通過Oleksii Fedorov 一種輕松的方法來測試Kotlin中令人沮喪的靜態方法調用 (A stress-free way to test frustrating static method calls in Kotlin) Let me make a wild guess… You have encountered some code in Kotlin that is …

python圖像加密模塊_使用Pycryp的圖像加密和解密

這和加密或解密文本是一樣的。示例首先導入一些模塊&#xff1a;from Crypto.Cipher import AESfrom Crypto import Random然后&#xff0c;讓我們生成一個鍵和一個初始化向量。key Random.new().read(AES.block_size)iv Random.new().read(AES.block_size)加密下面的代碼加載…

遇到attemp to invoke virtual method

這個很大原因是沒有預先初始化sdk&#xff0c;檢查application的配置是否配置了application&#xff1a;name 轉載于:https://www.cnblogs.com/caimuqing/p/5894099.html

app啟動頁自動跳轉源碼_關于移動端App啟動頁的策劃方案

App啟動頁是指app在啟東時需要加載必要的運行環境和配置&#xff0c;在這個過程中提示用戶等待的一個過渡頁面。在產品經理眼里啟動頁是app給予用戶重要的第一印象&#xff1b;也是App最重要的黃金頁面之一&#xff0c;所有用戶100%都會看到的頁面。啟動頁適合用來做以下幾個事…

電信運營商占IDC市場65%:中國電信占行業半數以上

隨著云計算、大數據的快速發展&#xff0c;作為重要基礎設施的IDC數據中心也在高速擴張。 近日&#xff0c;DCA常務理事長何寶宏介紹&#xff0c;我國規劃在建數據中心共計246個&#xff0c;總設計機架數約為103萬個&#xff0c;總設計服務器規模約1326萬臺。在用超大型、大型數…