在 Chrome DevTools Console 中,展開數組 aa、bb 可見元素值,但代碼執行時拋出 Cannot read property 'RS' of undefined 或類似錯誤。
var arr = [];
arr[5] = 'value'; // 索引 0-4 為 empty (undefined)
console.log(arr); // Console 顯示 [empty × 5, "value"] 但展開可見
arr.forEach(x => console.log(x.RS)); // 索引 0-4 觸發 TypeError
排查:Console 中輸入 arr.length vs Object.keys(arr).length,不等說明有空洞。
var data = [];
fetch('/api').then(res => res.json()).then(json => data = json);
// 同步代碼立即執行
console.log(data[0].RS); // data 尚為 [],data[0] 為 undefined
現象:斷點暫停時數據已到達 (微任務執行),Console 顯示最新值;但運行時同步代碼已報錯。
for (var i = 1; i <= arr.length; i++) { // <= 導致越界
var item = arr[i-1]; // 正確
// 或錯誤邏輯
var item = arr[i]; // 最後一次 i === length,訪問 undefined
}
console.dir(arr):以對象形式顯示數組,清晰看到 length、索引屬性、原型鏈,區分 empty 與 undefined。arr[i]?.RS 避免中間為 null/undefined 拋錯 (ES2020+)。if (arr && arr.length > i && arr[i] && arr[i].RS)。function processItems(items) {
if (!Array.isArray(items)) {
console.error('Expected array, got', typeof items);
return;
}
for (const item of items) { // for-of 自動跳過 empty slots? 不會,會遍歷 undefined
if (!item) continue; // 跳過 null/undefined
if (!item.hasOwnProperty('RS')) {
console.warn('Item missing RS:', item);
continue;
}
// 安全訪問
const rs = item.RS;
// ...
}
}
Console 顯示「有值」≠ 運行時同步訪問安全。**斷點調試 + 可選鏈 + 防御性編程** 是解決之道。