JavaScript 數組迴圈條件自減到0時引發的思考

來源:互聯網
上載者:User

先看看下面的代碼進行下思考:

var i=arr.length;while(i--){   //寫點啥?}

上面是Google array.js 程式中建議改進的代碼。思考:為什麼i-- 到了 i為0時while迴圈結束了?

下面的代碼與它等價:

var i=arr.length;for(;i--;){   //i--寫在兩個分號的中間,奇怪嗎?不奇怪嗎?}

震撼?沒感覺?

呃。平時我們寫在兩個分號中間的是什嗎?這個i--按“常理”應該是在第二個分號之後啊。那我們看看C語言的代碼:

int main(){    int i = 5;    while(i--)    {        printf("%d ", i);    }    while(1);    return 0;}

啟動並執行結果也是與JavaScript驚人的一致!

好吧。我不知道這是為什嗎?只知道數值0轉換成布爾值為false:

var i= !!0;

而別的數值轉換成布爾值為true。上面的樣本程式碼是將數值到布爾值的顯式轉換。

0隱式轉換為false的情況用下面的JS程式測一下:

var i=0;if(i){    alert('if');}else{    alert('else');}alert('不管怎麼if和怎麼else程式都要走這兒');

if這個範例程式碼寫得一點都不“實戰”?那好吧,下面是一位馬鈴薯網前端開發高手的程式碼範例片段:

var obj = {status:0, msg:'xxxx'}; var data = obj.status || 'xxxx';

這個 obj.status 總夠“隱蔽”的了!

再強調一次:數值0的隱式轉換成布爾值為false的條件是在if()中、while()中、for(;;)兩個分號的中間等布爾判定的條件運算式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.