Pytanie: Czy kolejność operandów ma znaczenie przy ocenie równości lub tożsamości w JavaScript?Czy kolejność operandów ma znaczenie przy ocenie równości lub tożsamości w JavaScript?
W kodzie jest (0 == value)
szybszy lub bardziej poprawny niż (value == 0)
? (Należy zauważyć, że to pytanie jest równie ważne dla operatora tożsamości, ===
.)
Ponieważ operatory równości i tożsamości są przemienne, nie uważam, że kolejność operandów powinna wpłynąć na wydajność oceny, chyba że jest coś nieodłącznego. korzyść z literału lewego po obliczeniu samego algorytmu równości. Jedynym powodem jest to, że zastanawiam Niedawno używane przez Google Closure Compiler się sprowadzać niektóre JavaScript, i zauważyłem, że
if (array.length == 0 && typeof length === 'number') {
zostały skompilowane do
if(0 == b.length && "number" === typeof c) {
.
W obu wyrażeniach równości - jedno luźne i jedno ścisłe - zamknięcie odwróciło kolejność moich operandów, umieszczając Literał literalny i literał łańcuchowy po lewej stronie ich odpowiednich wyrażeń.
To mnie zainteresowało.
czytam przez Równość Operatorzy odcinku ECMAScript 5.1 Language Specification (sekcja 11.9, str. 80-82) i okazało się, że podczas gdy algorytmy równości zacząć od zbadania argumentów lewostronnego po pierwsze, nie ma żadnych oznak, że to szybciej lub lepiej użyć literału jako tego operandu.
Czy jest coś takiego w sprawdzaniu typów ECMAScript, które sprawia, że badanie literałów jest optymalne? Czy może to być jakieś dziwactwo optymalizacji w kompilatorze zamknięcia? A może szczegół implementacji w starszej wersji algorytmu równości ECMAScript, który został unieważniony w nowszej wersji specyfikacji?
myślę, że ten „błąd” jest jako efekt uboczny jak Google parserów i odbudowuje swój kod i nie ma nic wspólnego z objawów niepożądanych lub prawidłowego ness kolejność operandów – Raynos
Aby sprawdzić szybkość, po prostu uruchom testy w [JS Perf] (http://jsperf.com). To oczywiście zmierzy tylko dostępne przeglądarki, które uruchamiają tworzone przez ciebie przypadki testowe, zamiast oferować teoretyczną/"obiektywną" ocenę. –