- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码会向控制台输出什么,为什么?
var arr1 = "john".split('');
var arr2 = arr1.reverse();
var arr3 = "jones".split('');
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
输出将是:“数组 1:长度=5 最后=j、o、n、e、s”“数组 2:长度=5 最后=j,o,n,e,s”
这是与此问题一起发布的答案。但是,我不明白这是遵循什么javascript原则或规则?
“reverse() 方法返回对数组本身的引用(即,在本例中为 arr1)。因此,arr2 只是对 arr1 的引用(而不是副本)。因此,当有任何内容时对 arr2 完成(即,当我们调用 arr2.push(arr3); 时),arr1 也会受到影响,因为 arr1 和 arr2 只是对同一对象的引用。”
最佳答案
让我们逐行分解:
var arr1 = "john".split('');
arr1 现在指向数组 ['j','o','h','n']。
var arr2 = arr1.reverse();
arr1 和 arr2 现在指向同一个数组,即 ['n','h','o','j']。
var arr3 = "jones".split('');
arr3 现在指向数组 ['j','o','n','e','s']。
arr2.push(arr3);
arr2 和 arr1 现在都指向数组 ['n','h','o','j', [ 'j','o','n','e','s'] ].请注意,arr3 的元素并未附加到 arr1 和 arr2 指向的数组中。相反,整个数组作为单个元素添加。
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
记录 arr1 的长度,即 5('n'、'h'、'o'、'j' 和第二个数组)。 arr1.slice(-1) 获取arr1数组的最后一个元素,也就是包含'j','o','n','e','s'的数组。最后一行重复了这一点,但使用了 arr2,它只是对与 arr1 相同的数组的另一个引用。
关于javascript - 我不明白javascript中的这个array.reverse(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29270225/
我是一名优秀的程序员,十分优秀!