Ich beantworte dies, weil es ist viel von Fehlinformationen in dem Betreff:
Ist das eine Zeichenfolge oder ein Objekt?
Nr"cat"
ist ein primitive String Wert:
typeof "cat"; // "string", a String value
"cat" instanceof String; // false
typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
ich später über Typen und primitive Werte sprechen.
Erbt es alle Eigenschaften/Methoden von String oder String.prototype?
Nun, wenn Sie den property accessor operator (der Punkt oder die Klammer-Notation) verwenden, wird der Grundwert implizit intern Objekt umgewandelt, damit alle Methoden auf String.prototype
stehen zur Verfügung, zum Beispiel:
Wenn Sie Zugriff auf:
"cat".chatAt(0);
Hinter den Kulissen "cat"
zum Objekt umgewandelt wird:
Object("cat").chatAt(0);
Aus diesem Grund haben Sie Zugriff auf alle geerbten Eigenschaften für Werte.
Warum gibt es einen String und String.prototype?
String
ist ein Konstruktor-Funktion ermöglicht es Ihnen, String-Objekte oder tun Typumwandlung zu erstellen:
var stringObj = new String("foo"); // String object
// Type conversion
var myObj = { toString: function() { return "foo!"; } };
alert(String(myObj)); // "foo!"
Das String.prototype
Objekt ist das Objekt, in dem String-Objekt-Instanzen von erben.
Ich weiß, es ist verwirrend, wir haben String-Werte und String-Objekte, aber die meiste Zeit arbeiten Sie eigentlich nur mit String-Werten, sorgen Sie sich jetzt nicht um String-Objekte.
Soll ich String das String-Objekt und String.prototype den String-Prototyp aufrufen?
Sie sollten String
"The String
constructor" anrufen.
"String-Prototyp" ist in Ordnung.
Sie sollten wissen, dass "Alles ist NICHT ein Objekt".
Lassen Sie uns über Typen, sprechen gibt es fünf language types angegeben:
- String
- Anzahl
- Boolean
- Null
- undefiniert
Ein primitive value ist "ein Datum, das direkt auf der untersten Ebene der Sprachimplementierung dargestellt wird", die einfachste Information, die Sie haben können.
Die Werte der zuvor beschriebenen Typen können sein:
- Null: Der Wert
null
.
- Nicht definiert: Der Wert
undefined
.
- Nummer: Alle Nummern, wie
0
, 3.1416
, 1000
, etc .. Auch NaN
und Infinity
.
- Boolean: Die Werte
true
und false
.
- Zeichenfolge: Jede Zeichenfolge, z. B.
"cat"
und "bar"
.
Ich stimme Ihnen mit der "string" und new String() Unterschied, ich gebe zu, dass ich das nicht wusste. Aber ich stimme dem Teil des Datums und der Objekte nicht zu.Vielleicht sind Strings, Booleans und Zahlen keine Objekte, aber sie werden als Objekte in JS dargestellt und wenn Sie etwas wie String instanceof Object tun, ist das Ergebnis wahr. – mck89
@ mck89, ich meinte, dass ein primitiver Wert das einfachste Datenelement ist, das man haben kann, ja, man kann sie als Objekte behandeln (zB Zugriff auf vererbte Eigenschaften, "foo" .chatAt' oder "5 .. toFixed), aber sie sind immer noch nur Werte, keine Objekte. Über 'String instanceof Object' ist offensichtlich, weil' String' ein * Function-Objekt * ist, das von 'Function.prototype' erbt, das von' Object.prototype' erbt, daher gibt 'String instanceof Function' Ihnen auch' true' '. – CMS