--- tags: JS 直播班 - 2021 春季班 --- # 3/19 線上 Slack 助教 ## 今日輪班助教時間 暄雯:3/19(五) 早上 9:00 - 早上 11:00,下午 1:30 - 下午 5:30 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「JS 第 8 行會出現數字 8」,**但卻出現**「預期外的結果是 0」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 1. **獵人:** 助教好,第五周作業中有些疑問。 針對元素使用以下語法取得 let ticketName = document.querySelector('ticketName'); 但助教建議是使用const。 可以理解是不要讓人更改元素內容。 但是改為以下後 const ticketName = document.querySelector('ticketName'); 還是可以變更元素的value內容 ticketName.value =''; 這是為什麼呢? 謝謝 https://codepen.io/tyriel/pen/xxRBYBN > 助教回覆: > ticketName 和 ticketName.value 這兩個的值不一樣哦, ticketName 儲存的值為「 id = ticketName 的 HTML 標籤 」, ticketName.value 則是指 「id = ticketName 的 HTML 標籤裡輸入的 value 值」。 > >因為修改 value 的內容並不會影響到 HTML 標籤,所以執行 ticketName.value = ''; 時,ticketName 本身的值並沒有改變,它還是 id = ticketName 的 HTML 標籤。 > >以你的作業為例,ticketName.value 有宣告 name 這個變數來儲存。如果這邊把 name 改用 const 宣告,那執行 name = '' 就會出現錯誤,因為 name 變數的值不能再更改。 --- 2. **Hi Annie** 老師助教同學們好,這是我的 [Codepen](https://codepen.io/lhohdalu/pen/YzpBbrP?editors=0012),「JS 第 48 行不曉得為什麼可以計算出各區里長人數,想了解原理,或者其實寫錯了」? > 助教回覆: > total[item.區別] = total[item.區別] ? total[item.區別]+1 :1; 這一行是三元運算值的用法,?前面的條件如果為 true,則執行冒號前面的表達式:total[item.區別]+1;如果為 false 則執行冒號後面的表達式:1。 這邊提供文件給你參考:[條件運算子](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) > >目前 total 是空物件,裡面沒有 item.區別的屬性,所以判斷 total[item.區別] = total[item.區別] 時會回傳 false,因此會新增「item.區別」這個屬性,並賦予值為 1。若已經有這個屬性,則 total[item.區別] = total[item.區別] 為 true,會執行 total[item.區別] + 1,因此數量 + 1。 > >例如:第一次執行到區別為前鎮區的資料時,item.區別 = 前鎮區,total[item.區別] = total[item.區別] 為 false(目前沒有這筆資料),所以執行冒號後面的表達式,total 會增加「前鎮區」這個屬性,數量加一。如果第二筆資料也為前鎮區,因為已經有前鎮區的屬性,所以為 true,直接數量 + 1。 > --- 3. **一美** 助教你好, 想請問今天 3/19(五) 每日作業中, 為什麼在圖3第9行顯示的結果(如圖4),是沒辦法繼續累加? 但如果多加一行 el.value = newValue 之後(如圖1),又能達到累加的效果呢? > 助教回覆: el.value 取到的是 input 裡面輸入的值,可以透過檢視 input 的內容來得知目前 el.value 的值為什麼。 > >如果沒有加上 el.value = newValue 這一行的話,函式執行完,input 的值並不會被修改。因此重新點擊按鈕時,newValue 被賦予 el.value 的值還是為 200。 如果加上 el.value = newValue,則點擊一次按鈕,input 的值就會被修改,所以 newValue 每次都會不一樣。 > >這邊提供範例給你參考:[3/19 每日任務 累加效果](https://codepen.io/skar5268/pen/eYBwrNx?editors=0011) > --- 4. **黑川** 助教好: 想請問一個陣列中的物件,裡面還有包陣列取值的問題,如 [codepen](https://codepen.io/kurokawa/pen/QWGXBEd?editors=0010) foreach之後產生的HTML是正確的,但在 99行 < ul class="tag-box" > 裡頭,我無法取到我陣列中tag裡面的title和link,所以我再foreach一次來產生li 不過問題出來了,我做完之後發現它會一直累加上去如目前的樣子 但我需要的樣子是跟我data裡面一樣的tag數量 JS的第10行,32行,49行 (如第一則內容的tag是4個,第二則內容是2個,第三則內容是2個) 還請助教解惑! > 助教回覆: > 目前 li 是在 data.forEach() 外宣告為變數並賦予空字串。 > li 的值在跑完一筆資料後會被記錄下來,跑下一筆資料時會沿用上一筆 li 的值,因此列表的內容會一值累加上去。 > 建議可以在 data.forEach() 裡面先賦予 li 為空字串(清除之前的資料),再執行 liary.forEach() 哩~ (這裡只能由助教自行增加問題,請大家將問題放在 thread 上)