2011-07-05 12 views
13

Zastanawialiśmy się w tym thread, czy była prawdziwa różnica między używaniem .substr(0,1) a użyciem .charAt(0), kiedy chcesz uzyskać pierwszą postać (w rzeczywistości może ona dotyczyć każdego przypadku, w którym masz tylko jeden znak).Jaka jest różnica między .substr (0,1) lub .charAt (0)?

Czy któryś z nich jest szybszy od drugiego?

Dzięki za odpowiedzi!

Max

+0

Możesz spróbować profilować je ... również, odpowiedzi mogą być zależne od przeglądarki ... –

+1

Możesz zrobić benchar (http://jsperf.com/). –

+0

@Felix Kling: dzięki za link, zakładki! – JMax

Odpowiedz

17

Pomiar jest kluczem!

Przejdź do http://jsperf.com/substr-or-charat, aby przeprowadzić test porównawczy sam.

substr (0,1) działa na 21 100 300 operacji na sekundę na moim komputerze, charAt (0) działa 550,852,974 razy na sekundę.

Podejrzewam, że charAt uzyskuje dostęp do ciągu znaków jako tablicy wewnętrznie, zamiast dzielić ciąg znaków.

Jak stwierdzono w komentarzach, uzyskanie dostępu do znaku bezpośrednio za pomocą ciągu [0] jest nieco szybsze niż użycie znaku charAt (0).

+1

Odpowiedź Maxa była dla Javy, nie JS ... Wygląda na to, że wyniki są złe! – Alnitak

+0

Ta pierwsza liczba jest podejrzanie wysoka. to prawda, chociaż ten link jest niesamowity – templatetypedef

+0

Ach, numery były w złym kierunku! –

4

O ile cały scenariusz nie jest oparty na konieczności szybkiego manipulowania ciągami, w ogóle nie martwiłbym się aspektem wydajności. Użyłbym charAt() na tej podstawie, że jest czytelny i najbardziej szczegółowe narzędzie do pracy dostarczonej przez język. Ponadto, substr() nie jest ściśle standardem, a chociaż jest bardzo mało prawdopodobne, że nowa implementacja ECMAScript pominie to, może się zdarzyć. Oparte na standardach alternatywy dla str.charAt(0) to str.substring(0, 1) i str.slice(0, 1), a dla implementacji ECMAScript 5, str[0].

Powiązane problemy