[問題] 關於for迴圈的小問題

作者: purestone (天空之子)   2018-09-03 21:20:05
在上課學迴圈的部分,有個地方不太懂
請問如果有個迴圈內容是
var i=0;i<tweets.length;i++){
tweetString = tweetString +"<p>"+tweets[i]+"</p>;
}
迴圈會先執行tweetString = tweetString,第二次才會跑完全句是嗎?
我會這麼問是因在定義tweetString時如果寫var tweetString; 會跑出undefined的結果
作者: CloudyWing (孤單ㄉ翼)   2018-09-04 00:59:00
var tweetString(宣告)=tweetString(undefined) + ...tweetString才迴圈外宣告,並給初始值空字串
作者: purestone (天空之子)   2018-09-04 07:56:00
謝謝,但還是不懂,"tweetString才迴圈外宣告"是什麼意思?不跑迴圈直接傳回tweetString的值?這麼問好了,為什麼var tweetString;和var tweetString = "";會讓迴圈執行結果不同?
作者: mrbigmouth (大嘴先生)   2018-09-04 12:18:00
var tweetString; 的時候 tweetString的值會是undefined undefined加字串時會自動轉為"undefined"
作者: purestone (天空之子)   2018-09-04 17:20:00
undefined加了字串就不是undefined才對吧加了字串等於有了定義才對吧
作者: InfinityGate (小鳥)   2018-09-04 18:36:00
JS是動態型別語言,這叫coercionundefined本身就是一種型別,是不能跟字串相加的相加的時候JS會把undefined轉"undefined"字串去運算
作者: purestone (天空之子)   2018-09-04 19:36:00
照這邏輯應該是一直跑出undefined的迴圈才是啊,第一次跑出undefined,第二次以後跑出字串,這是怎麼回事?
作者: InfinityGate (小鳥)   2018-09-04 20:06:00
你要不要把迴圈每次運算完的結果印出來看看等號是把右邊運算完assign給左邊迴圈跑第一次之後tweetString就已經是字串了undefined+字串的結果不是undefined.....JS把undefined強制轉型成 "undefined"才去做相加既然是字串加字串結果當然是字串建議你去查 javascript coercion你貼完整的code上來吧,這樣看不懂至少我沒有跑出你這種結果
作者: purestone (天空之子)   2018-09-04 22:20:00
懂了,謝謝,仔細想想各位的回覆+google終於懂了謝謝!!!
作者: xdraculax (首席怪叔叔)   2018-09-05 07:51:00
就只是一直沒看清 "undefined"(字串)跟undefined(型別)不同 XD
作者: acer1832a (Mike)   2018-09-05 09:01:00
這就是一直學不好JavaScript的地方,太神奇了XD

Links booklink

Contact Us: admin [ a t ] ucptt.com