欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的一些隱式轉(zhuǎn)換和總結(jié)(推薦)

 更新時(shí)間:2017年12月22日 16:15:57   作者:莫忘001  
這篇文章主要介紹了JavaScript中的一些隱式轉(zhuǎn)換和總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

js中的不同的數(shù)據(jù)類型之間的比較轉(zhuǎn)換規(guī)則如下:

1. 對(duì)象和布爾值比較

對(duì)象和布爾值進(jìn)行比較時(shí),對(duì)象先轉(zhuǎn)換為字符串,然后再轉(zhuǎn)換為數(shù)字,布爾值直接轉(zhuǎn)換為數(shù)字

[] == true; //false []轉(zhuǎn)換為字符串'',然后轉(zhuǎn)換為數(shù)字0,true轉(zhuǎn)換為數(shù)字1,所以為false

2. 對(duì)象和字符串比較

對(duì)象和字符串進(jìn)行比較時(shí),對(duì)象轉(zhuǎn)換為字符串,然后兩者進(jìn)行比較。

[1,2,3] == '1,2,3' // true [1,2,3]轉(zhuǎn)化為'1,2,3',然后和'1,2,3', so結(jié)果為true;

3. 對(duì)象和數(shù)字比較

對(duì)象和數(shù)字進(jìn)行比較時(shí),對(duì)象先轉(zhuǎn)換為字符串,然后轉(zhuǎn)換為數(shù)字,再和數(shù)字進(jìn)行比較。

[1] == 1; // true `對(duì)象先轉(zhuǎn)換為字符串再轉(zhuǎn)換為數(shù)字,二者再比較 [1] => '1' => 1 所以結(jié)果為true

4. 字符串和數(shù)字比較

字符串和數(shù)字進(jìn)行比較時(shí),字符串轉(zhuǎn)換成數(shù)字,二者再比較。

'1' == 1 // true

5. 字符串和布爾值比較

字符串和布爾值進(jìn)行比較時(shí),二者全部轉(zhuǎn)換成數(shù)值再比較。

'1' == true; // true

6. 布爾值和數(shù)字比較

布爾值和數(shù)字進(jìn)行比較時(shí),布爾轉(zhuǎn)換為數(shù)字,二者比較。

true == 1 // true

許多剛接觸js的童鞋看到這么多的轉(zhuǎn)換規(guī)則就懵圈了,其實(shí)規(guī)律很簡(jiǎn)單,大家可以記下邊這個(gè)圖

如圖,任意兩種類型比較時(shí),如果不是同一個(gè)類型比較的話,則按如圖方式進(jìn)行相應(yīng)類型轉(zhuǎn)換,如對(duì)象和布爾比較的話,對(duì)象 => 字符串 => 數(shù)值 布爾值 => 數(shù)值。
另外,我們來看下一些需要"特別照顧"的。

來看一個(gè)有趣的題

[] == false;
![] == false;

這兩個(gè)的結(jié)果都是true,第一個(gè)是,對(duì)象 => 字符串 => 數(shù)值0 false轉(zhuǎn)換為數(shù)字0,這個(gè)是true應(yīng)該沒問題,
第二個(gè)前邊多了個(gè)!,則直接轉(zhuǎn)換為布爾值再取反,轉(zhuǎn)換為布爾值時(shí),空字符串(''),NaN,0,null,undefined這幾個(gè)外返回的都是true, 所以! []這個(gè)[] => true 取反為false,所以[] == false為true。

還有一些需要記住的,像:

undefined == null //true undefined和null 比較返回true,二者和其他值比較返回false
Number(null) //0

曾經(jīng)看到過這樣一個(gè)代碼:  (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb , 你敢相信, 當(dāng)時(shí)就嚇了 寶寶一跳。

剛接觸到時(shí)候,Js很讓我困惑,正是由于它‘善變',下面我來總結(jié)一下:

7. JS的數(shù)據(jù)類型: Number,Boolean,String,Undefined,Null,Symbol(es6新定義的)和 Object (注: Array是特殊的Object)

    typeof 返回的7中類型: number boolean string object undefined object function

MDN 這樣介紹Javascript: JavaScript 是一種弱類型或者說動(dòng)態(tài)語(yǔ)言。這意味著你不用提前聲明變量的類型,在程序運(yùn)行過程中,類型會(huì)被自動(dòng)確定。這也意味著你可以使用同一個(gè)變量保存不同類型的數(shù)據(jù)

8. 下面來看下常見的隱式轉(zhuǎn)換:

  基本類型:

   運(yùn)算符(+,-,*,/,%)操作時(shí) 轉(zhuǎn)換類型

    ”+“ 號(hào)運(yùn)算符 :   

          

                    

      總結(jié): 當(dāng)加號(hào)運(yùn)算符時(shí),String和其他類型時(shí),其他類型都會(huì)轉(zhuǎn)為 String;其他情況,都轉(zhuǎn)化為Number類型 , 注: undefined 轉(zhuǎn)化為Number是 為'NaN‘, 任何Number與NaN相加都為NaN。

          其他運(yùn)算符時(shí), 基本類型都轉(zhuǎn)換為 Number,String類型的帶有字符的比如: '1a' ,'a1' 轉(zhuǎn)化為 NaN 與undefined 一樣。

      tip:(1)NaN 不與 任何值相等 包括自身,所以判斷一個(gè)值 是否為 NaN, 即用 "!==" 即可?! ?/p>

         (2) 轉(zhuǎn)換為 Boolean類型為 false 的有:null,0,'',undefined,NaN,false  

       ?。?)number() 與 parseInt() 都可以將對(duì)象轉(zhuǎn)化為Number類型,Number函數(shù)要比parseInt函數(shù)嚴(yán)格很多?;旧?,只要有一個(gè)字符無法轉(zhuǎn)成數(shù)值,整個(gè)字符串就會(huì)被轉(zhuǎn)為NaN。  

  

  Object類型

    當(dāng)object與基本類型運(yùn)算時(shí):

var obj = {
  toString: function(){
    return 6;
  },
  valueOf: function(){
    return 5;
  }
};
var obj1 = {
  valueOf: function(){
    return 'a';
  },
  toString: function(){
    return 'b';
  }
};

           

                  

      

            當(dāng)對(duì) obj,obj1 用Number()和String()換轉(zhuǎn)時(shí)

        

            總結(jié): Number類型會(huì)先調(diào)用valueOf(), String類型會(huì)先調(diào)用toString(),  如果結(jié)果是原始值,則返回原始值,否則繼續(xù)用toString 或 valueOf(),繼續(xù)計(jì)算,如果結(jié)果還不是原始值,則拋出一個(gè)類型錯(cuò)誤; 

    看如下情況:

    

為什么 {} + [] = 0 ?  因?yàn)?javascript在運(yùn)行時(shí), 將 第一次{} 認(rèn)為是空的代碼塊,所以就相當(dāng)于 +[] = 0.  還有 {} +5 = 5, 同理。

總結(jié):

1. 類型錯(cuò)誤有可能會(huì)被類型轉(zhuǎn)換所隱藏。

2. “+”既可以表示字符串連接,又可以表示算術(shù)加,這取決于它的操作數(shù),如果有一個(gè)為字符串的,那么,就是字符串連接了。

3. 對(duì)象通過valueOf方法,把自己轉(zhuǎn)換成數(shù)字,通過toString方法,把自己轉(zhuǎn)換成字符串。

4.具有valueOf方法的對(duì)象,應(yīng)該定義一個(gè)相應(yīng)的toString方法,用來返回相等的數(shù)字的字符串形式。

5.檢測(cè)一些未定義的變量時(shí),應(yīng)該使用typeOf或者與undefined作比較,而不應(yīng)該直接用真值運(yùn)算。

總結(jié)

以上所述是小編給大家介紹的JavaScript中的一些隱式轉(zhuǎn)換和總結(jié)(推薦),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家的支持!

相關(guān)文章

最新評(píng)論