Wenn Sie String([])
aufrufen, wird die Methode Array.prototype.toString
schließlich genannt, und nach dem spec of Array.prototype.toString, sind die Schritte:
- Lassen Array das Ergebnis der Aufrufen von ToObject auf diesem Wert.
- Lassen Sie Func das Ergebnis des Aufrufs der internen Methode [[Get]] von Array mit Argument "Join" sein.
- Wenn IsCallable (func) false ist, dann sei func die integrierte Standardmethode Object.prototype.toString (15.2.4.2).
- Geben Sie das Ergebnis des Aufrufs der internen [[Call]] - Methode von func zurück, die Array als diesen Wert und eine leere Argumentliste bereitstellt.
Sie können herausfinden, dass es dann tatsächlich ruft Array.prototype.join
und gibt sein Ergebnis zurück. Die spec of Array.prototype.join ist ein wenig länger, aber die step 8
ist die Ursache verwirrend Sie:
- Wenn element0
undefined
oder null
ist, sei R die leere Zeichenfolge sein; Andernfalls sei R ToString (element0).
Was bedeutet, wenn Array.prototype.join
Iterierten alle Elemente, wann immer es trifft undefined
oder null
, sie es durch leere String ersetzen werden, und die Standardtrennzeichen von join
ist ,
. Deshalb String([undefined])
Sie ""
gibt, weil es in dem Array nur ein Element und es ist undefined
, wenn Sie String([undefined, null])
versuchen, werden Sie ","
(zwei leere Zeichenkette joined
von ,
) erhalten, und String([null, undefined, 1])
geben Ihnen ",,1"
Etwas Schnipsel Array.prototype.toString
zu beweisen, ruft Array.prototype.join
:
console.log(String([undefined]))
console.log(String([1,2,3]))
console.log("----------Override Array.prototype.join--------")
Array.prototype.join = function() {
return "I don't care what is in the original array";
}
console.log(String([undefined]))
console.log(String([1,2,3]))
BTW, es gibt eine awesome blog über die Konvertierung von Wert in String in Javascript, hoffe, es hilft.
Grüße :-)
sry, ich Ihre Antwort gelesen haben, ist es vert clear.But, so scheint es, dass Sie immer noch, warum Unterschied nicht sagen, oder ich falsch verstanden? – radical
Um Fabian's Antwort hinzuzufügen, sind Strings im Grunde Arrays von Zeichen. Wenn Sie ein Array mit nichts (d. H. "Undefined", "null") haben, wird nur eine leere Zeichenfolge erstellt. –
@MatheusAvellar thx, ich habe es. – radical