mam odpowiedzi na to, ponieważ nie ma dużo dezinformacji w temacie:
Czy ciąg lub obiekt?
nr"cat"
jest wartością prymitywny String:
typeof "cat"; // "string", a String value
"cat" instanceof String; // false
typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
będę mówić później o rodzaju i wartości pierwotnych.
Czy dziedziczy wszystkie właściwości/metody z String lub String.prototype?
Cóż, kiedy używasz property accessor operator (kropka lub notacji uchwytem), wartość prymitywny jest niejawnie konwertowane do obiektu, wewnętrznie, dlatego wszystkie sposoby na String.prototype
są dostępne, na przykład:
Kiedy dostęp:
"cat".chatAt(0);
Za kulisami "cat"
jest konwertowany do obiektu:
Object("cat").chatAt(0);
To dlatego masz dostęp do wszystkich dziedziczonych właściwości wartości.
Dlaczego istnieje ciąg i string.prototyp?
String
jest funkcją konstruktora, pozwala na tworzenie obiektów String czy typ konwersji:
var stringObj = new String("foo"); // String object
// Type conversion
var myObj = { toString: function() { return "foo!"; } };
alert(String(myObj)); // "foo!"
Obiekt String.prototype
, gdzie jest przedmiotem wystąpień obiektu String dziedziczyć.
Wiem, że to jest mylące, mamy wartości String i obiekty String, ale większość czasu pracujesz tylko z wartościami łańcuchów, nie martw się teraz o obiekty typu String.
Czy powinienem wywołać String the String object i String.prototype the String prototype?
Należy zadzwonić pod numer String
"The String
constructor".
"Prototyp strun" jest w porządku.
Powinieneś wiedzieć, że "Wszystko jest NOT obiektu".
Porozmawiajmy o rodzajów istnieje pięć language types określone:
- String
- Ilość
- Boolean
- Null
- Undefined
A primitive value to "baza danych reprezentowana bezpośrednio na najniższym poziomie implementacji językowej", najprostsza informacja, jaką można uzyskać.
Wartości wcześniej opisanych typów mogą być:
- zerowej: wartość
null
.
- Niezdefiniowane: Wartość
undefined
.
- Numer: Wszystkie numery, takie jak
0
, 3.1416
, 1000
, itp .. Również NaN
i Infinity
.
- Boolean: Wartości
true
i false
.
- Ciąg: każdy ciąg znaków, taki jak
"cat"
i "bar"
.
Zgadzam się z tobą z "string" i nową różnicą String(), przyznaję, że tego nie wiedziałem. Ale nie zgadzam się z częścią danych i obiektów.Może łańcuchy, wartości logiczne i liczby nie są obiektami, ale są reprezentowane jako obiekty w JS i jeśli robisz coś takiego jak instancja String, wynik jest prawdziwy. – mck89
@ mck89, Miałem na myśli to, że prymitywna wartość jest najprostszym fragmentem danych, jaki możesz mieć, tak, możesz "traktować je jako obiekty" (np. Dostęp do odziedziczonych właściwości, '" foo ".chatAt' lub' 5 .. toFixed'), ale nadal są to tylko wartości, a nie obiekty. Informacje o 'String instanceof Object' są oczywiste, ponieważ' String' to * obiekt Function *, który dziedziczy po 'Function.prototype', który dziedziczy po' Object.prototype', dlatego 'String instanceof Function' daje także' true ' '. – CMS