2014-02-16 6 views

Antwort

10

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.

2

Sie sind mit C/C++ verwechselt. Im Java-Script-Array ist ein anderes Objekt und eine String-Variable ein anderes. Versuchen Sie zu lesen this

2

In Javascript sind String und Array Datentypen nicht gleich.

2

In JavaScript === ist strenge Gleichheit, die zwei Werte für die Gleichheit vergleicht. Kein Wert wird implizit in einen anderen Wert konvertiert, bevor er verglichen wird. Aus diesem Grund müssen Sie verschiedene Objekte (String und Array) verwenden, die nicht gleich sein können. Deshalb gibt der Vergleich false zurück.

Mehr dazu können Sie auf finden Strict equality using ===

Verwandte Themen