Warum ist (string === array)
falsch ist?
Sie verwenden strict comparison (===
), die auch überprüft die Datentyp der Werte. Offensichtlich ist ein primitiver String Wert nicht der gleiche Datentyp wie ein Objekt, und Objekte sind nur wirklich selbst gleich. Beweis:
var foo = [1,2,3];
var bar = [1,2,3];
console.log(foo === bar); // false
console.log(foo === foo); // true
Nun, wenn Sie loose comparison (==
), der folgende Vergleich zu verwenden, waren zurückkehrt true
:
console.log([1,2,3] == '1,2,3'); // true
Warum? Da das Array zuerst in eine Zeichenfolge konvertiert wird, führt dies zu demselben Zeichenfolgenwert. Aber das bedeutet nicht, dass die Werte gleich sind (einer ist immer noch ein Array und der andere eine Zeichenkette). Deshalb sollten Sie immer einen strikten Vergleich verwenden.
Was ist der Unterschied zwischen einem String und einer Reihe von Zeichen in Javascript?
Strings nicht Arrays sind, weil sie von differentprototypes (*) erben und haben somit unterschiedliche Instanzmethoden. Zum Beispiel haben Arrays eine method join
und Strings haben eine method match
.
Von einem Standpunkt aus, Arrays und Strings sind ähnlich aber, weil sie beide Array-artige Objekte sind.
Was bedeutet array-like bedeuten? Dies bedeutet, dass das Objekt eine length
Eigenschaft und numerische Eigenschaften hat.Eine Zeichenfolge hat eine length
-Eigenschaft, die Ihnen die Anzahl der Zeichen in der Zeichenfolge angibt, und Sie können auf einzelne Zeichen der Zeichenfolge mit str[i]
zugreifen. Beispiel:
var arr = ['a','b','c'];
var str = "abc";
console.log(arr.length); // 3
console.log(str.length); // 3
console.log(arr[0]); // a
console.log(str[0]); // a
console.log(arr === str); // false
console.log(typeof str); // string
console.log(typeof arr); // object
*: Eigentlich gibt es sogar einen Unterschied zwischen primitiven Zeichenkette und String-Objekten, aber ich will nicht zu tief hier zu gehen. Technisch primitive Strings haben keine Methoden, da sie keine Objekte sind, aber in den meisten Fällen können Sie primitive Strings wie Objekte behandeln.