Perché String.prototype log è object come un object standard, mentre Array.prototype registra l'object come un arrays standard?

Semplicemente perché String.prototype registra l'object string con le parentesi graffe standard e le coppie di valori chiave e l'Array.prototype registra l'object arrays come un arrays, con parentesi quadre e valori?

String.prototype.test = function(){ console.log(this); // logs { '0': 't', '1': 'e', '2': 's', '3': 't' } }; var str = 'test'; str.test(); Array.prototype.test1 = function(){ console.log(this); // [1,2,3,4] }; var arr = [1,2,3,4]; arr.test1(); 

Perché in una chiamata di metodo this argomento è sempre (in modalità sbiadita) express in un object. Quello che vedi è un object String , prodotto dal valore di string primitivo "test" . L'arrays su cui si chiama il metodo è già un object, quindi non succede niente e si ottiene solo l'arrays come prima.

Se utilizzi una modalità rigorosa, questo cast non accade:

 String.prototype.test = function() { "use strict"; console.log(this); }; var str = 'test'; str.test(); // logs "test"