<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          js中的相等性判斷

          時間:?2017-12-13閱讀:?1009標簽:?js知識

          JavaScript 提供了三種不同的比較操作符: 

          1.嚴格相等(===) 
          2.非嚴格相等(==) 
          3. Object.is  (ECMAScript 6 新特性) 


          ECMAScript 提供了四種比較操作符: 

          1.非嚴格相等(==) 
          2.嚴格相等(===):用于Array.portotype.indexOf,Arrayprototype.lastIndexOf,或 case 語句的匹配操作。 
          3.零值相等:用于TypeArray和ArrayBuffer的構造,Map和Set的操作,并將用于ECMAScript 6 標準的 String.prototype.includes 
          4.同值相等:用于其它所有場景 
          簡單的說,兩個等號判斷會進行類型轉換,而三等號判斷不進行類型轉換,Object.is 在三等號基礎上特殊處理了,NaN,-0和+0,保證-0和+0不再相等,但是 Object.is(NaN,NaN) 會返回 true.(像其他數值比較一樣比較NaN, 不論是雙等號還是三等號都會返回 false ), 


          嚴格相等 === 

          全等操作符比較兩個值是否相等,兩個被比較的值在比較前都不進行隱式轉換。如果兩個被比較的值具有不同的類型,這兩個值是不全等的。否則,如果兩個被比較的值類型相同,值也相同,并且都不是 number 類型時,兩個值全等。最后,如果兩個值都是 number 類型,當兩個都不是 NaN,并且數值相同,或是兩個值分別為 +0 和 -0 時,兩個值被認為是全等的。 
          var num = 0;
          var obj = new String("0");
          var str = "0";
          var b = false;
          
          console.log(num === num); // true
          console.log(obj === obj); // true
          console.log(str === str); // true
          
          console.log(num === obj); // false
          console.log(num === str); // false
          console.log(obj === str); // false
          console.log(null === undefined); // false
          console.log(obj === null); // false
          console.log(obj === undefined); // false
              在日常中使用全等操作符幾乎總是正確的選擇。對于除了數值之外的值,全等操作符使用明確的語義進行比較:一個值只與自身全等。對于數值,全等操作符使用略加修改的語義來處理兩個特殊情況:第一個情況是,浮點數 0 是不分正負的。區分 +0 和 -0 在解決一些特定的數學問題時是必要的,但是大部分境況下我們并不用關心。全等操作符認為這兩個值是全等的。第二個情況是,浮點數包含了 NaN 值,用來表示某些定義不明確的數學問題的解,例如:正無窮加負無窮。全等操作符認為 NaN 與其他任何值都不全等,包括它自己。(等式(x !== x)成立的唯一情況是 x 的值為 NaN)。 


          非嚴格相等 ==

          相等操作符比較兩個值是否相等,在比較前將兩個被比較的值轉換為相同類型。在轉換后(等式的一邊或兩邊都可能被轉換),最終的比較方式等同于全等操作符 === 的比較方式。 相等操作符滿足交換律。

          相等操作符對于不同類型的值,進行的比較如下圖所示:


          在上面的表格中,ToNumber(A) 嘗試在比較前將參數 A 轉換為數字,這與 +A(單目運算符+)的效果相同。ToPrimitive(A)通過嘗試依次調用 A 的A.toString() 和 A.valueOf() 方法,將參數 A 轉換為原始值(Primitive)。  

          一般而言,根據 ECMAScript 規范,所有的對象都與 undefined 和 null 不相等。但是大部分瀏覽器允許非常窄的一類對象(即,所有頁面中的 document.all 對象),在某些情況下,充當效仿 undefined 的角色。相等操作符就是在這樣的一個背景下。因此,IsFalsy(A) 方法的值為 true ,當且僅當 A 效仿 undefined。在其他所有情況下,一個對象都不會等于 undefined 或 null。 

          var num = 0;
          var obj = new String("0");
          var str = "0";
          var b = false;
          
          console.log(num == num); // true
          console.log(obj == obj); // true
          console.log(str == str); // true
          
          console.log(num == obj); // true
          console.log(num == str); // true
          console.log(obj == str); // true
          console.log(null == undefined); // true
          
          // both false, except in rare cases
          console.log(obj == null);
          console.log(obj == undefined);

          有些開發者認為,最好永遠都不要使用相等操作符。全等操作符的結果更容易預測,并且因為沒有隱式轉換,全等比較的操作會更快。 


          同值相等 

          同值相等解決了最后一個用例:確定兩個值是否在任何情況下功能上是相同的。
          Object.defineProperty(Number, "NEGATIVE_ZERO",
                                { value: -0, writable: false, configurable: false, enumerable: false });
          function attemptMutation(v)
          {
            Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
          }

          Object.defineProperty 在試圖修改不可變屬性時,如果這個屬性確實被修改了則會拋出異常,反之什么都不會發生。例如如果 v 是 -0 ,那么沒有發生任何變化,所以也不會拋出任何異常。但如果 v 是 +0 ,則會拋出異常。不可變屬性和新設定的值使用 same-value 相等比較。


          零值相等 

          與同值相等類似,不過會認為 +0 與 -0 相等。


          什么時候使用 Object.is 或是三等 

          總的來說,除了對待NaN的方式,Object.is唯一讓人感興趣的,是當你需要一些元編程方案時,它對待0的特殊方式,特別是關于屬性描述器,即你的工作需要去鏡像Object.defineProperty的一些特性時。如果你的工作不需要這些,那你應該避免使用Object.is,使用===來代替。即使你需要比較兩個NaN使其結果為true,總的來說編寫使用NaN 檢查的特例函數(用舊版本ECMAScript的isNaN方法)也會比想出一些計算方法讓Object.is不影響不同符號的0的比較更容易些。


          更多相關知識請訪問 :https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/245

          javascript中什么是句柄?

          一個句柄是指使用的一個唯一的整數值,即一個4字節(64位程序中為8字節)長的數值,來標識應用程序中的不同對象和同類中的不同的實例。

          javascript不可變性是什么?

          不可變性即某個變量在進行了某個操作之后,其本身沒有發生變化,比如對于字符串而言,對字符串的任何操作都會改變字符串本身的值,而是在字符串的基礎上復制出來一個然后再改變,這樣我們就說是不可變的

          為什么javascript不起作用?

          JavaScript是一種屬于網絡的腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。

          javascript怎么判斷按鈕被點擊?

          JavaScript可以通過Event對象的target事件或srcElement(IE瀏覽器支持)來判斷按鈕是否被點擊。Event對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。

          javascript由幾部分組成?

          JavaScript有三部分組成。分別為核心(ECMAScript) 、文檔對象模型(DOM)、瀏覽器對象模型(BOM)。這三部分分別描述了該語言的語法和基本對象、處理網頁內容的方法和接口、與瀏覽器進行交互的方法和接口。

          Js輸出方式有哪些?

          在編寫JavaScript代碼的時候, 一定要記住每一句代碼后面都需要添加一個分號, 并且這個分號必須是英文的分號,我們會發現有時候不寫分號程序也能夠運行, 這里并不是因為不需要分號, 而是瀏覽器自動幫助我們添加了分號

          7個常見的 JavaScript 測驗及解答

          我相信學習新事物并評估我們所知的東西對自己的進步非常有用,可以避免了我們覺得自己的知識過時的情況。在本文中,我將介紹一些常見的 JavaScript 知識。請享用!

          Js中constructor指向問題

          首先用一個例子指出來constructor存在形式。由上面的代碼我們總結出結論1:上面的代碼在控制臺可以看出constructor是指向構造器Fruit的引用。這個地方就有點奇怪了。這個constructor到底指向的是那個實例的構造器?

          javascript難點是什么?

          javascript難點是什么?下面本篇文章就來給大家介紹一下10個JavaScript難點,感興趣的小伙伴們可以參考一下,希望對大家有所幫助。立即執行函數,即Immediately Invoked Function Expression (IIFE),正如它的名字

          Js如何獲取ul中li的個數?

          javascript如何獲取ul中li的個數?下面本篇文章就來給大家介紹一下使用javascript獲取ul中li個數的方法,希望對大家有所幫助。

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网