2014-12-27 105 views
-1

以下是我使用爲什麼這個變量的值會改變?

http://jsfiddle.net/1rptpz56/

的想法是重新洗牌的字母詞的順序,然後shuffed單詞的第一個字母比較一下第一個字母最初的代碼。但變量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]); 

回答

0

JavaScript爲同一個對象設置了一個新的引用,它可以是Array#slice或重複split

var charcopy = chars.slice(); 

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

因爲charcopy不是副本,所以是對原件的引用。您需要slice()

var charcopy = chars.slice(0); 
0

克隆它做的chars副本,你不能只是分配var charcopy = chars因爲指派的chars一個參考charcopy。解決這一問題的一種常見方法是使用.slice方法:由於此線var charcopy = chars;

var charcopy = chars.slice(); 
相關問題