日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > JavaScript隱式類型轉換

JavaScript隱式類型轉換

來源:程序員人生   發布時間:2014-10-10 08:00:00 閱讀次數:2986次

        編程中少不了將某個數據類型轉換成另一種數據類型。其中通過函數或者方法調用以及強制轉換稱為顯示轉換,相反的,在"不知情"的情況下"有意"的進行的轉換,則稱為隱士轉換。

運算符中的隱士類型轉換

        比較常見隱士類型轉換,很多語言中都存在的。這里僅僅說說JavaScript中存在的。

        1、"+"運算符

function add(){ var a ='2'; var b =2; var c = a + b; console.info(c); //輸出22 console.info(typeof c); //輸出string } add();

       這里js(ECMASCRIPT)引擎將會把b編程字符串'2'再與a進行連接,最后變成了"22"。很多語言的"+"運算符都是這樣處理的。這一過程是隱式進行的,js引擎幫助我們完成的。而且利用"+"這個特性,可以很方便的將Number類型轉換為string類型。例如:

var number = 12; var c = '' + number; console.info(typeof number); //number console.info(typeof c); //string

       2、"-"運算符

       “-”可以是一元運算符(取負),也可以是二元運算符(減法),"-"也會進行隱式類型轉換,例如

var var1 = 234; var var2 ="432"; var c = var1 - var2; console.info(c); //-198 console.info(typeof c); //number

      可以看出的是"-"的特性與"+"正好相反,會把字符串b隱士的轉換成數字再進行減法運算。利用這個特性,可以很方便的將string轉換為number

var var3 = '12'; var var4 = var3 -''; console.info(var4); //12 console.info(typeof var4); //number

      3、* and 運算符

       和"+"、“-”乘法和除法也會進行隱式類型的轉換(轉換為number再進行計算)。

var var1 = "1"; var var2 = "2"; var var3 = "20"; var var4 = var1 * var2; console.info(var4); //2 console.info(typeof var4) //number var var5 = var4/var3 ; console.info(var5); //0.1 console.info(typeof var5); //number

       4、遞增遞減操作符(前置、后置)

       這類操作符適用于任何數據類型的值,針對不同類型的值,該操作符遵循以下的轉換規則:

       1、如果是包含有效數字字符的字符串,先將其轉換為數值(同Number()),再執行加減操作,字符串變為數值變量

       2、如果不包含有效數字字符串,將變量的值置為NaN,字符串變量變為數值變量。

       3、如果是布爾值false,轉換為0進行運算。

       4、如果是布爾值true,轉換為1進行運算。

       5、如果是浮點數值,直接進行加減1操作。

       6、如果是對象,先調用對象對的valueOf()方法,之后按照前5點進行轉換,如果結果是NaN,調用toString()方法后應用前面規則進行判斷。

       5、邏輯操作符(!、&&、||)

           邏輯非(!)操作符首先通過Boolean()函數將他的操作值轉換為布爾值,然后求反。

           邏輯與(&&)

           1、如果第一個操作數經Boolean()轉換后為true,則返回第二個操作值,否則返回第一個值(不是Boolean()轉換后的值)

           2、如果有一個操作值為null.返回null

           3、如果有一個操作值為NaN,返回NaN

           4、如果有一個操作值為undefined,返回undefined

           邏輯或(||),如果一個操作值不是布爾值,遵循以下規則:

           1、如果第一個操作值經Boolean()轉換后為false,則返回第二個操作值,否則返回第一個操作值(非Boolean()轉換后的值)

           2、對于undefined、null和NaN處理規則與邏輯與相同

        6、關系操作符(<,>,<=,>=)

           和上述操作符一樣,關系操作符的操作值也可以是任意類型的,所以使用非數值類型參與比較時也需要系統進行隱式類型轉換;

           1、兩個操作值都是數值,直接比較

           2、兩個字符都是字符串,字符串編碼進行比較

           3、一個數值,另一個轉換為數值進行比較

           4、一個操作數是對象,調用valueOf()|toString(),之后按照1、2進行比較

           5、一個操作值是布爾值,則將其轉換為數值,再進行比較。

       tips:NaN是非常特殊的值,不和任何類型的值相等,包括自己,同時它與任何類型的值比較大小時都返回false。

       7、相等操作符== and ===

         相等操作符也會對操作值進行隱式轉換后進行比較

         1、布爾值、字符串和數值進行比較,轉換為數值之后在進行比較

         2、null與undefined是相等的

         3、與NaN判等,返回false

         TIPS: == 和 === 區別

          1、對于Array,Object等高級類型,兩者無區別:進行“地址”比較

          2、對于基礎類型==判斷值是否相等,===不僅判斷值,而且判斷類型是否相等。

          3、基礎類型與高級類型有區別:==將高級類型轉化為基礎類型,進行“值”比較,===直接返回false

語句中的隱式轉換

       在JavaScript語法中也存在者隱式類型轉換,其中有if,while,for in,for in在定義對象字面量時發生從標識符到字符串的隱式轉換

 

var ary = [1,3,5,7]; for(var a in ary){ alert(a + ": " + typeof a); }

    數組的索引其實也是字符串類型。

      alert時存在的隱式轉換

String.prototype.fn = function(){return this}; var a = 'hello'; alert(typeof a.fn()); //-->object alert(a.fn()); //-->hello

     string原型上添加了fn方法,該方法返回this也就是當前的實例對象,無可厚非的是typeof a.fn()是Object類型,可以alert(a.fn())卻將object對象隱式的轉為了字符串"hello"顯示。

     同理,數值類型的也一樣:

Number.prototype.fn = function(){return this}; var a = 10; alert(typeof a.fn());//-->object alert(a.fn()); //-->10

總結

       我相信js中的隱式類型轉換的怪癖不止這么一點點,由于js是一種弱類型的語言,造成了coding時的靈活性,可以將不同類型進行比較等操作(js隱式轉換),這可能讓人感覺的詫異和不舒服。這種機制是否容易出錯,其實不必過于擔心,因為大部分的情況下,我們不需要轉換,我們很少進行不同類型的比較(若有,不是更方便了嘛)。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美激情在线看 | 亚洲日韩欧美一区二区在线 | 成人av在线网站 | 色婷婷综合久久久久中文一区二 | 日本一区不卡视频 | 激情综合五月婷婷 | 蜜桃精品一区二区三区 | 欧美国产一区二区 | 日本激情视频 | 天天操夜夜曰 | 国产一区二区三区在线看 | 在线观看中文字幕国产 | 亚洲综合国产 | 91香蕉| 亚洲天堂av在线 | 精品久久一二三 | 一区二区国产在线 | 色在线免费视频 | 亚洲黄色片免费观看 | 亚洲国产精品综合 | 精品亚洲一区二区三区 | 黄色一级视频播放 | 成人在线免费电影 | 欧美一二区 | 亚洲乱码视频 | 国产精品久久久影院 | 日韩精品91| 99国产精品视频免费观看一公开 | 最新三级网址 | 欧美日韩一二三 | 色接久久 | 国产日韩欧美91 | 国产精品xxx在线观看www | 爱爱免费视频网站 | 欧美成人精品一区二区三区 | 一区二区日本 | 午夜精品久久久久久久传媒 | 在线看一区二区 | 国产精品一区二区久久 | 国产一区二区精品在线 | 成人午夜网站 |