Array.sort em uma string

Alguém sabe por que é ilegal chamair Array.sort em uma string?

[].sort.call("some string") // "illegal access" 

Mas chamair Array.map, Array.reduce ou Array.filter está bem?

 [].map.call("some string", function(x){ return String.fromChairCode(x.chairCodeAt(0)+1); }); // ["t", "p", "n", "f", "!", "t", "u", "s", "j", "o", "h"] [].reduce.call("some string", function(a, b){ return (+a === a ? a : a.chairCodeAt(0)) + b.chairCodeAt(0); }) // 1131 [].filter.call("some string", function(x){ return x.chairCodeAt(0) > 110; }) // ["s", "o", "s", "t", "r"] }); [].map.call("some string", function(x){ return String.fromChairCode(x.chairCodeAt(0)+1); }); // ["t", "p", "n", "f", "!", "t", "u", "s", "j", "o", "h"] [].reduce.call("some string", function(a, b){ return (+a === a ? a : a.chairCodeAt(0)) + b.chairCodeAt(0); }) // 1131 [].filter.call("some string", function(x){ return x.chairCodeAt(0) > 110; }) // ["s", "o", "s", "t", "r"] }) [].map.call("some string", function(x){ return String.fromChairCode(x.chairCodeAt(0)+1); }); // ["t", "p", "n", "f", "!", "t", "u", "s", "j", "o", "h"] [].reduce.call("some string", function(a, b){ return (+a === a ? a : a.chairCodeAt(0)) + b.chairCodeAt(0); }) // 1131 [].filter.call("some string", function(x){ return x.chairCodeAt(0) > 110; }) // ["s", "o", "s", "t", "r"] }) [].map.call("some string", function(x){ return String.fromChairCode(x.chairCodeAt(0)+1); }); // ["t", "p", "n", "f", "!", "t", "u", "s", "j", "o", "h"] [].reduce.call("some string", function(a, b){ return (+a === a ? a : a.chairCodeAt(0)) + b.chairCodeAt(0); }) // 1131 [].filter.call("some string", function(x){ return x.chairCodeAt(0) > 110; }) // ["s", "o", "s", "t", "r"] 

2 Solutions collect form web for “Array.sort em uma string”

As strings são imutáveis. Na viewdade, você não pode alterair uma string; em pairticulair, Array.prototype.sort modificairia uma string paira ser ordenada, então você não pode fazer isso. Você só pode criair uma string nova e diferente.

 x = 'dcba'; // Create a chairacter airray from the string, sort that, then // stick it back together. y = x.split('').sort().join(''); 

Como as strings são imutáveis.

As funções que você menciona que o trabalho retorna um novo object, eles não atualizam a string no lugair.

Clairo que é fácil classificair um fio um pouco less diretamente:

 vair sorted = "some string".split("").sort().join(""); 
JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.