Quando si utilizza un operatore contro gli oggetti, l'interprete javascript deve trasmettere i valori alla primitiva utilizzando il metodo valueOf che in effetti utilizza la funzione ToPrimitive interna che inoltra il tipo di trasmissione al metodo interno [[DefaultValue]] dell'oggetto.
L'esempio con l'operatore più è un po 'complicato perché l'operatore può agire sia come aggiunta matematica che come concatenazione di stringhe. In questo caso concatena le rappresentazioni di stringa degli oggetti.
cosa sta realmente accadendo dietro le quinte è:
a = {}.valueOf().toString() + [].valueOf().toString();
Dal momento che la matrice è vuota il metodo toString restituisce una stringa vuota, è per questo che il risultato corretto dovrebbe essere [object Object], che è il valore restituito da Object.valueOf() toString().
Dove si svolge il confronto? –
Scusa, ero troppo veloce. – bfavaretto
Wat? https://www.destroyallsoftware.com/talks/wat –