2017-04-26 45 views
1
<!DOCTYPE html> 
<html> 
<body> 

<p id="demo"></p> 

<script> 
var cars = ["BMW", "Volvo", "Saab", "Ford"]; 
var i = 0; 
var text = ""; 
for (;cars[i];) { 
    text += cars[i] + "<br>"; 
    i++; 
} 
document.getElementById("demo").innerHTML = text; 
</script> 

</body> 
</html> 

棘手的是在這裏:JavaScript用於循環後門?

for (;cars[i];) { 
    text += cars[i] + "<br>"; 
    i++; 
} 

來源: tryjs_loop_for_cars in w3schools

不是聲明2,如果是假的for循環來進行評估,並終止循環?是不是布爾類型的報表2?怎麼可能像For/In循環一樣使用?

我需要幫助,誰知道這件事的遺產或背後的事情?這應該是後門功能嗎?

我有眼睛,我知道現在存在,不要告訴我這只是存在,但它是如何工作的?

+1

請切莫在堆棧溢出中使用像WTF這樣的詞... –

+1

您需要了解[_truthy_](https://developer.mozilla.org/en/doc s/Glossary/Truthy)和[_falsy_](https://developer.mozilla.org/en-US/docs/Glossary/Falsy)javascript –

+0

哇,這很有道理,suraj。我猜這是JavaScript有_truthy_和_falsy_的一個有用的遺產,但它確實使語言變得不那麼重要。 –

回答

5

這很奇怪,當然,但沒有什麼奇蹟發生。在一個正常的for循環:所以在代碼

for (/*some intialization*/; /*some check, which if falsy, exits the loop*/, /* Something that happens at the end of each loop*/) { 
    //do stuff 
} 

您已發佈:

var cars = ["BMW", "Volvo", "Saab", "Ford"]; 
var i = 0; 
var text = ""; 
for (/*no init*/;cars[i];/*is in the loop instead*/) { 
    text += cars[i] + "<br>"; 
    i++; // this would generally be the third expression in the loop parens 
} 

一旦i變得4cars[i]將返回undefined,這是falsy循環將退出。

+1

汽車[0]是「寶馬」,它是真實的,評估爲真 –

+1

是的,這是真的 - 請參閱@suraj關於您的問題的非常相關的評論 - 雖然它可能不是布爾真實的,是「truthy」,這是Javascript中的一件事。如果你不習慣Javascript中的自動類型轉換,你可能會感到不安,但如果仔細處理它,它可以讓你做一些聰明的事情。 –

2

這是可行的,因爲當循環到達cars[4]時,它將計算到undefined,因爲索引4超出了數組中的最後一個元素。由於undefined被認爲是falsey,因此循環終止。

嘗試運行此:

if(undefined) { 
 
    console.log('this will never execute'); 
 
} 
 
else { 
 
    console.log('this will always execute'); 
 
}

我不一定會認爲這是一個良好的編碼習慣,但它確實工作。我認爲更好的方法是

for(var i = 0; i < cars.length; i++) { 
} 

老學校,但這就是循環的工作原理。

這裏有一個漂亮的extensive article關於javascript的真理和虛假的概念。可能是熟悉這些想法的一個好主意,因爲許多開發人員會根據這些細節編寫代碼(例如您遇到的那個)。

1

是不是For循環的語句2用於評估,並且 如果它是假的,會終止循環? - YES

你可以找到更詳細的有關for statement這裏:

for ([initialExpression]; [condition]; [incrementExpression]) 
    statement 

條件表達式。如果條件的值爲 ,則循環語句執行。 如果條件的值爲假,則 for循環終止。如果完全忽略條件表達式 ,則假定條件爲真。

實施例:如果陣列中的任何項具有falsy值項 環路是停止

var cars = ["BMW", '', "Saab", "Ford"]; 
 
var i = 0; 
 
var text = ""; 
 
for (;cars[i];) { 
 
    console.log(cars[i]); 
 
    i++; 
 
}

不是語句2([條件])boolean type -

當你把一個條件表達式這意味着布爾([狀態]) 例:

condition = Boolean(''); 
 
console.log(condition);

希望幫助:)