国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js中比較運算符隱式類型轉換

lanffy / 2376人閱讀

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

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

全等運算符 ===

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

先判斷類型,如果類型不是同一類型的話直接為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

{{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;    //每調用一次,讓對象a的i屬性自增一次并且返回
    }
 }
 if (a == 1 && a == 2 && a == 3){  //每一次運算時都會調用一次a的valueOf()方法
  console.log ( "1" );
 }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102942.html

相關文章

  • 聊一聊 JS 的『隱式類型轉換

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

    Jenny_Tong 評論0 收藏0
  • 深入js隱式類型轉換

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

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

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

    SKYZACK 評論0 收藏0
  • 掌握 Javascript 類型轉換隱式轉換救救孩子

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

    weapon 評論0 收藏0

發表評論

0條評論

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