Gibt es in JavaScript einen Unterschied zwischen typeof x == 'y' und typeof x === 'y'?

8

Mir ist der Unterschied zwischen strengen und losen Vergleichsoperatoren bekannt. Offensichtlich unterscheidet sich x == y von x === y . Aber wenn ich Code sehe, der typeof verwendet, verwendet er immer === .

Wenn der typeof -Operator immer eine Zeichenkette auswertet (wie 'boolean', 'number' usw.), würden dann nicht typeof x == 'y' und typeof x === 'y' immer das gleiche Ergebnis liefern? Und wenn ja, warum die Verwendung von === ?

Ich weiß, dass es schneller ist, strenge Vergleiche zu machen, aber außer in extremen Fällen sollte der Leistungsgewinn nicht wahrnehmbar sein. Eine weitere Idee ist, dass es immer klarer ist, === immer zu verwenden, da Probleme mit ähnlichen Operationen wie x == undefined versus x === undefined verursacht. Lohnt es sich, diese Fälle auf == zu reduzieren, um die Minifikations- und Transfercodierung zu verbessern, oder ist es besser, === beizubehalten, um die Laufzeitleistung und allgemeine Klarheit zu erhalten?

    
Beejor 12.06.2015, 22:38
quelle

1 Antwort

6

Es macht absolut keinen nützlichen Unterschied in diesem Fall.

  

Der Operator typeof gibt eine Zeichenfolge zurück, die den Typ des nicht bewerteten Operanden angibt.
Ссылка

Wir wissen, dass es immer eine Zeichenkette sein wird, und es werden nur ein paar vordefinierte Werte sein. Daher gibt es keinen expliziten Grund, den strict-Operator beim Vergleich der Ergebnisse von typeof zu verwenden Allerdings sollte der strikte Vergleichsoperator für die Lesbarkeit verwendet werden und mögliche mögliche Ausnahmen zu dieser Anweisung vermieden werden.

Aber

  

Lose Gleichheit mit ==
  Lose Gleichheit vergleicht zwei Werte für die Gleichheit, nachdem beide Werte in einen gemeinsamen Typ konvertiert wurden.

Davon abgesehen, sollte es etwas schneller sein, den strikten Vergleich zu verwenden, da es keine Konvertierung gibt, aber der Unterschied ist so gering, dass es keine Rolle spielt, und Mikro-Optimierung ist eine sehr schlechte Sache

Bearbeiten

Laut der Dokumentation 11.9.3 und 11.9.6 wenn sie vom selben Typ sind, sollte es keinen Unterschied geben.

    
Tiny Giant 12.06.2015, 22:45
quelle