Por que o Chrome console.log objetos de exibição de corda de uma forma tão irritante?

votos
3

cordas primitivos mostram-se muito bem no console Chrome. Mas objetos String sair assim:

s = new String('foo bar')
==> String {0: f, 1: o, 2: o, 3:  , 4: b, 5: a, 6: r, length: 7, `PrimitiveValue`: foo bar}

Eu sei que posso vê-lo mais lindamente com s+''ou s.toString(). Mas muitas vezes eu preciso olhar para arrays e outras estruturas completas destas coisas. Então eu recebo a menos do que útil:

[s,s,s]
==> [String, String, String]

E quando eu expandir uma das cordas, eu recebo uma representação vertical de toda a matriz de caracteres.

Se não há nenhuma resposta boa, talvez alguém poderia pelo menos solidarizar comigo.

Publicado 17/03/2015 em 17:17
usuário
Em outras línguas...                            


1 respostas

votos
2

A resposta insolente é que o Chrome exibe-lo dessa maneira porque é isso que o objeto String é. Será que faz sentido para Chrome para tentar lançar qualquer objeto antigo para um primitivo?

Dandavis comentários são certo sobre o dinheiro - dependendo do seu uso, você pode ser capaz de modificar o protótipo String, em seguida, usar primitivas para facilitar a leitura e contam com a primitiva de ser escalado para um objeto String (tornando assim seus métodos disponíveis):

JavaScript converte automaticamente primitivas para objetos String, de modo que é possível utilizar métodos objeto String para cordas primitivos.

por exemplo

String.prototype.upper = function () {
    return this.toUpperCase();
};
document.write("foo bar".upper());

Se você realmente queria, você poderia escrever um objeto semelhante como este:

function MyString(value) {
    this['`PrimitiveValue`'] = value;
    this.length = value.length;
    for (var i = 0;i<value.length;i++) { this[i] = value.charAt(i); }
    this.charAt = function(val) {
            return this[val];
        };
    this.toString = function() { return this.primitive };
    return this;

}
var myString = new MyString('foo bar');
var string = new String('foo bar');
document.write('custom:', myString, ' native:', string, '<br/> check the console too');
console.log('custom:', myString, ' native:', string)

que irá imprimir algo como este para o console:

MyString {0: "f", 1: "o", 2: "o", 3: " ", 4: "b", 5: "a", 6: "r", `PrimitiveValue`: "foo bar", length: 7, charAt: function, toString: function}
Respondeu 17/03/2015 em 18:13
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more