【发布时间】:2022-10-24 11:50:04
【问题描述】:
示例 1
我有一个代码将一个扩展数组推入另一个:
const hobbies = ['Sports', 'Cooking'];
const activeHobbies = ['Hiking'];
activeHobbies.push(...hobbies);
console.log(activeHobbies); //['Hiking', 'Sports', 'Cooking']
hobbies.push('Skiing');
console.log(hobbies); //['Sports', 'Cooking', 'Skiing']
console.log(activeHobbies); //['Hiking', 'Sports', 'Cooking']
按值推送的扩展数组是否与activeHobbies.push(hobbies[0], hobbies[1]) 相同?
为什么最后一行不是['Hiking', 'Sports', 'Cooking', 'Skiing']?
示例 2
const hobbies = ['Sports', 'Cooking'];
const activeHobbies = ['Hiking'];
activeHobbies.push(hobbies);
console.log(activeHobbies); //['Hiking', ['Sports', 'Cooking', 'Skiing']], why not ['Hiking', ['Sports', 'Cooking']] ?
hobbies.push('Skiing');
console.log(hobbies); //['Sports', 'Cooking', 'Skiing']
console.log(activeHobbies); //['Hiking', ['Sports', 'Cooking', 'Skiing']]
据我了解,hobbies 数组将通过引用推送到activeHobbies 而不会像这样activeHobbies.push(hobbies) 传播,如果新值被推送到activeHobbies 数组中,新值将添加到activeHobbies 数组中的hobbies 数组@array,因为它是通过引用推送的。这是对的吗?
但是为什么第一个控制台输出 ['Hiking', ['Sports', 'Cooking', 'Skiing']] 而不是 ['Hiking', ['Sports', 'Cooking']] 呢?
【问题讨论】:
-
例如2,原因是由于您的浏览器记录了已记录对象的实时引用(因此在记录时它不显示对象,而是在您观察日志时显示对象-@ 987654321@)
标签: javascript arrays reference