lgwebdream/FE-Interview

Day74:写出执行结果,并解释原因

lgwebdream opened this issue · 5 comments

var arr1 = "ab".split('');
var arr2 = arr1.reverse(); 
var arr3 = "abc".split('');
arr2.push(arr3);
console.log(arr1.length);
console.log(arr1.slice(-1));
console.log(arr2.length);
console.log(arr2.slice(-1));

扫描下方二维码,获取答案以及详细解析,同时可解锁800+道前端面试题。

// 答案
3 ["a","b","c"] 3 ["a","b","c"]

//解析
这个题其实主要就是考察的reverse会返回该数组的引用,但是容易被迷惑,导致答错,如果知道这个点,就不会掉坑里了。

1)reverse
MDN 上对于 reverse() 的描述是酱紫的:
The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array.
reverse 方法颠倒数组中元素的位置,改变了数组,并返回该数组的引用。

2)slice
slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

// 答案 3 ["a","b","c"] 3 ["a","b","c"]

//解析 这个题其实主要就是考察的reverse会返回该数组的引用,但是容易被迷惑,导致答错,如果知道这个点,就不会掉坑里了。

1)reverse MDN 上对于 reverse() 的描述是酱紫的: The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array. reverse 方法颠倒数组中元素的位置,改变了数组,并返回该数组的引用。

2)slice slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

搞了这么,第一次直到 reverse 会返回数组的引用!

arr1=['a','b'] //切割
arr2=arr1=['b','a'] //反转arr1并赋值给arr2(引用传递)
arr3=['a','b','c'] //切割
arr2=[['b','a',['a','b','c']] //将arr3推入arr2,因为arr2与arr1是同一个引用,所以arr1也是这个值
3
['a','b','c'] // 注意slice不影响原数组
3
['a','b','c']

fshmjl commented

答案是:3,[ [ 'a', 'b', 'c' ] ],3,[ [ 'a', 'b', 'c' ] ]
//解析 这个题其实主要就是考察的reverse会返回该数组的引用,但是容易被迷惑,导致答错,如果知道这个点,就不会掉坑里了。

1)reverse MDN 上对于 reverse() 的描述是酱紫的: The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array. reverse 方法颠倒数组中元素的位置,改变了数组,并返回该数组的引用。

2)slice slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。但是需要注意的是slice()返回的是一个浅拷贝的数组,但是由于最后一个elements是一个数组即[ 'a', 'b', 'c' ],所以答案应该是一个二维数组即[[ 'a', 'b', 'c' ]]