为什么这个变量的值会改变?

时间:2014-12-27 22:13:37

标签: javascript jquery

以下是我正在使用的代码

http://jsfiddle.net/1rptpz56/

这个想法是将一个单词中的字母顺序混洗,然后将该单词的第一个字母与第一个字母最初的字母进行比较。但变量charscopy也变得很糟糕,我不知道为什么?

function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

var chars = 'hello'.split('')
        var charcopy = chars;


            alert(chars[0]);
            alert(charcopy[0]);
            shuffle(chars);
            alert(chars[0]);
            alert(charcopy[0]);

3 个答案:

答案 0 :(得分:0)

由于charcopy不是副本,因此它是对原始内容的引用。您需要使用slice()

克隆它
var charcopy = chars.slice(0); 

答案 1 :(得分:0)

要复制chars,您不能只指定var charcopy = chars,因为它会将chars引用分配给charcopy。解决此问题的常用方法是使用.slice方法:

var charcopy = chars.slice();

答案 2 :(得分:0)

由于这一行var charcopy = chars;

JavaScript设置对相同对象的新引用,Array#slice或重复split

var charcopy = chars.slice();

var charcopy = "hello".split('');