成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js中比較運算符隱式類型轉(zhuǎn)換

lanffy / 2383人閱讀

摘要:前言相信大家在代碼中經(jīng)常看見和,但大家真的弄懂了比較運算符和其中的隱式轉(zhuǎn)換嘛今天就重新認識下比較運算符。

前言
相信大家在代碼中經(jīng)??匆?"==" 和 "===",但大家真的弄懂了比較運算符和其中的隱式轉(zhuǎn)換嘛? 今天就重新認識下比較運算符。

全等運算符 ===

說明: 嚴格匹配,不會類型轉(zhuǎn)換,必須要數(shù)據(jù)類型和值完全一致

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

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

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

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

x和y都是null或undefined:
規(guī)則: 沒有隱式類型轉(zhuǎn)換,無條件返回true

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

x或y是NaN : NaN與任何數(shù)字都不等
規(guī)則:沒有隱式類型轉(zhuǎn)換,無條件返回false

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

x和y都是string,boolean,number
規(guī)則:有隱式類型轉(zhuǎn)換,會將不是number類型的數(shù)據(jù)轉(zhuǎn)成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是復(fù)雜數(shù)據(jù)類型 : 會先獲取復(fù)雜數(shù)據(jù)類型的原始值之后再左比較
復(fù)雜數(shù)據(jù)類型的原始值: 先調(diào)用valueOf方法,然后調(diào)用toString方法
valueOf:一般默認返回自身
數(shù)組的toString:默認會調(diào)用join方法拼接每個元素并且返回拼接后的字符串

console.log ( [].toString () );//空字符串
console.log ( {}.toString () );//[object Object]
注意:  空數(shù)組的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都是復(fù)雜數(shù)據(jù)類型 :
規(guī)則只比較地址,如果地址一致則返回true,否則返回false

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

經(jīng)典面試題

注意:八種情況轉(zhuǎn)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
  // 分析: 邏輯非優(yōu)先級高于關(guān)系運算符 ![] = false (空數(shù)組轉(zhuǎn)布爾值得到true)
        
console.log([] == []); //false
// [] 與右邊邏輯非表達式結(jié)果比較
//(1) [] == !Boolean([])   (2) [] == !true  (3)[] == false  (4) [].toString() == false  (5)"" == false   (6)Number("0") == Number(false)
console.log([] == ![]); //true

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

{{BANNED}}面試題

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

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


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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102942.html

相關(guān)文章

  • 聊一聊 JS 的『隱式類型轉(zhuǎn)換

    摘要:具體的行為取決于參數(shù)的類型。說到,就不得不提一下方法,方法自帶隱式類型轉(zhuǎn)換,該方法在測試其參數(shù)之前,會先調(diào)用方法將其轉(zhuǎn)換為數(shù)字。全等運算符會先進行數(shù)據(jù)類型判斷,并且不會發(fā)生隱式類型轉(zhuǎn)換。 類型轉(zhuǎn)換還不行?還非得隱式?這是什么高級玩意? 廢話不多說,我們先上一盤?,額,不對,先看一個例子吧。 3 + true 實際上在大多數(shù)編程語言中,都會認為上面這個表達式是錯誤的。因為布爾表達式與算術(shù)...

    Jenny_Tong 評論0 收藏0
  • 深入js隱式類型轉(zhuǎn)換

    摘要:結(jié)合實際中的情況來看,有意或無意中涉及到隱式類型轉(zhuǎn)換的情況還是很多的。此外當進行某些操作時,變量可以進行類型轉(zhuǎn)換,我們主動進行的就是顯式類型轉(zhuǎn)換,另一種就是隱式類型轉(zhuǎn)換了。 前言 相信剛開始了解js的時候,都會遇到 2 ==2,但 1+2 == 1+2為false的情況。這時候應(yīng)該會是一臉懵逼的狀態(tài),不得不感慨js弱類型的靈活讓人發(fā)指,隱式類型轉(zhuǎn)換就是這么猝不及防。結(jié)合實際中的情況來看...

    tomato 評論0 收藏0
  • 17道面試題徹底理解 JavaScript 類型轉(zhuǎn)換

    摘要:隱式類型轉(zhuǎn)換通常在邏輯判斷或者有邏輯運算符時被觸發(fā)。一元加號執(zhí)行字符串的類型轉(zhuǎn)換。邏輯運算符和將值轉(zhuǎn)為型,但是會返回原始值不是。計算從表達式開始,該表達式通過方法轉(zhuǎn)換為空字符串,然后轉(zhuǎn)換為。總結(jié)查看原文關(guān)注每日一道面試題詳解 類型轉(zhuǎn)換是將值從一種類型轉(zhuǎn)換為另一種類型的過程(比如字符串轉(zhuǎn)數(shù)字,對象轉(zhuǎn)布爾值等)。任何類型不論是原始類型還是對象類型都可以進行類型轉(zhuǎn)換,JavaScript 的...

    SKYZACK 評論0 收藏0
  • 掌握 Javascript 類型轉(zhuǎn)換隱式轉(zhuǎn)換救救孩子

    摘要:看下面的代碼和會對操作數(shù)執(zhí)行條件判斷,如果操作數(shù)不是布爾值,會先執(zhí)行類型轉(zhuǎn)換后再執(zhí)行條件判斷。大家記住這個規(guī)則布爾值如果與其他類型進行抽象比較,會先用將布爾值轉(zhuǎn)換為數(shù)字再比較。 在上一篇中我們聊過了 JS 類型轉(zhuǎn)換的規(guī)則和我發(fā)現(xiàn)的一些常見書籍中關(guān)于類型轉(zhuǎn)換的一些小錯誤,當碰到顯示類型轉(zhuǎn)換的時候大家可以按照這些規(guī)則去拆解出答案。但 JS 中存在一些很隱晦的隱式類型轉(zhuǎn)換,這一篇就來談下我對...

    weapon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<