JavaScript 數組迴圈引起的思考

來源:互聯網
上載者: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';

這個總夠“隱蔽”的了!

再強調一次:數值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.