JavaScript的reverse()总是会改变原始变量吗?

jus*_*ame 1 javascript variables reverse variable-assignment

让我解释:

function PalindromeTwo(str) {
  str = str.split('');
    var arr = [];
    str.forEach(function(it){
      if( (/[a-z]/i).test(it) ){
          arr.push(it);
        }
    })
    var reverseArr = arr.reverse();
    return reverseArr.join('').toUpperCase() === arr.join('').toUpperCase();
}

PalindromeTwo("hello, there");
Run Code Online (Sandbox Code Playgroud)

在这个例子中,它返回true它应该返回的false原因,因为该行不仅var reverseArr = arr.reverse()反转,reverseArr而且也arr就是原始变量.这是为什么?

Mik*_*uck 5

是的,reverse将阵列反转到位.您可以在使用之前在反转之前创建副本slice.

var copy = arr.slice();
copy.reverse();
Run Code Online (Sandbox Code Playgroud)


Jam*_*rpe 5

这是为什么?

因为规范如此说:

重新排列数组的元素以便颠倒它们的顺序.该对象作为调用的结果返回.