中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中比較運算符隱式類型轉換的案例

發布時間:2020-12-02 13:33:36 來源:億速云 閱讀:154 作者:小新 欄目:web開發

小編給大家分享一下JavaScript中比較運算符隱式類型轉換的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

相信大家在代碼中經常看見 '==' 和 '===',但大家真的弄懂了比較運算符和其中的隱式轉換嘛? 今天就重新認識下比較運算符。

全等運算符 ===

說明: 嚴格匹配,不會類型轉換,必須要數據類型和值完全一致

先判斷類型,如果類型不是同一類型的話直接為false;

1 對于基本數據類型(值類型): Number,String,Boolean,Null和Undefined:兩邊的值要一致,才相等
      console.log(null === null)   // true
      console.log(undefined === undefined)  // true
   注意: NaN: 不會等于任何數,包括它自己
   console.log(NaN === NaN)  // false 

2 對于復雜數據類型(引用類型): Object,Array,Function等:兩邊的引用地址如果一致的話,是相等的
     arr1 = [1,2,3];
     arr2 = arr1;
     console.log(arr1 === arr2)   // true

相等運算符 ==

非嚴格匹配: 會類型轉換,但是有前提條件一共有五種情況
(接下來的代碼以 x == y 為示例)

x和y都是null或undefined:
 規則: 沒有隱式類型轉換,無條件返回true

console.log ( null == undefined );//true
console.log ( null == null );//true
console.log ( undefined == undefined );//true

x或y是NaN : NaN與任何數字都不等
  規則:沒有隱式類型轉換,無條件返回false

console.log ( NaN == NaN );//false

x和y都是string,boolean,number
  規則:有隱式類型轉換,會將不是number類型的數據轉成number

console.log ( 1 == true );//true    (1) 1 == Number(true)
console.log ( 1 == "true" );//false   (1) 1 == Number('true')
console.log ( 1 == ! "true" );//false  (1) 1 == !Boolean('true')  (2) 1 == !true  (3) 1 == false  (4)1 == Number(false)
console.log ( 0 == ! "true" );//true
console.log(true == 'true') // false

x或y是復雜數據類型 : 會先獲取復雜數據類型的原始值之后再左比較
  復雜數據類型的原始值: 先調用valueOf方法,然后調用toString方法
  valueOf:一般默認返回自身
  數組的toString:默認會調用join方法拼接每個元素并且返回拼接后的字符串

console.log ( [].toString () );//空字符串
console.log ( {}.toString () );//[object Object]
注意:  空數組的toString()方法會得到空字符串,
      而空對象的toString()方法會得到字符串[object Object] (注意第一個小寫o,第二個大寫O喲)

console.log ( [ 1, 2, 3 ].valueOf().toString());//‘1,2,3’
console.log ( [ 1, 2, 3 ] == "1,2,3" );//true  (1)[1,2,3].toString() == '1,2,3'  (2)'1,2,3' == '1,2,3'
console.log({} == '[object Object]');//true

x和y都是復雜數據類型 :
  規則只比較地址,如果地址一致則返回true,否則返回false

var arr1 = [10,20,30];
var arr2 = [10,20,30];
var arr3 = arr1;//將arr1的地址拷貝給arr3
       
console.log ( arr1 == arr2 );//雖然arr1與arr2中的數據是一樣,但是它們兩個不同的地址
console.log ( arr3 == arr1 );//true  兩者地址是一樣
       
console.log ( [] == [] );//false
console.log ( {} == {} );//false

經典面試題

注意:八種情況轉boolean得到false: 0 -0 NaN undefined null '' false document.all()

console.log([] == 0); //true 
  // 分析:(1) [].valueOf().toString() == 0  (2) Number('') == 0  (3) false == 0  (4) 0 == 0
console.log(![] == 0); //true
  // 分析: 邏輯非優先級高于關系運算符 ![] = false (空數組轉布爾值得到true)
        
console.log([] == []); //false
// [] 與右邊邏輯非表達式結果比較
//(1) [] == !Boolean([])   (2) [] == !true  (3)[] == false  (4) [].toString() == false  (5)'' == false   (6)Number('0') == Number(false)
console.log([] == ![]); //true

onsole.log({} == {}); //false
// {} 與右邊邏輯非表達式結果比較
//(1){} == !{} (2){} == !true  (3){} == false  (4){}.toString() == false  (5)'[object Object]' == false  (6)Number('[object Object]') == false
console.log({} == !{}); //false

變態面試題

 var  a = ???
  if(a == 1 && a == 2 && a == 3 ){
      console.log(1)
  }

//如何完善a,使其正確打印1


//答案
var a = {
  i : 0,    //聲明一個屬性i
    valueOf:function ( ) {
     return ++a.i;    //每調用一次,讓對象a的i屬性自增一次并且返回
    }
 }
 if (a == 1 && a == 2 && a == 3){  //每一次運算時都會調用一次a的valueOf()方法
  console.log ( "1" );
 }

以上是“JavaScript中比較運算符隱式類型轉換的案例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴林左旗| 东丽区| 汕尾市| 满洲里市| 蛟河市| 萝北县| 鄯善县| 昂仁县| 余干县| 宁阳县| 手机| 忻城县| 扎赉特旗| 怀柔区| 丽水市| 贵定县| 博湖县| 磴口县| 麦盖提县| 巴彦淖尔市| 龙岩市| 定日县| 广南县| 改则县| 绵阳市| 雷波县| 安陆市| 泌阳县| 泗阳县| 枣强县| 盈江县| 扬中市| 柞水县| 阜阳市| 吐鲁番市| 册亨县| 休宁县| 陇南市| 安福县| 洱源县| 阿尔山市|