Javascript 型判定の方法とその処理速度について:humming birdでの投稿の時点ではまだ分からなかったこと。
端的に言えば『[].constructor』より『"foo".constructor』の方が処理に時間が掛る。
文字列リテラルだけではなく、真偽値リテラル、数値リテラルも同様に他(例えば Array)と比べて処理に時間が掛る。
その理由が以下。
引用:
文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。...
Literals - MDC
これは文字列リテラルの説明ですが、真偽値リテラルと数値リテラルも同様の理由と考えるのが妥当と思われる。
「instanceof」を使うと違いが分かる。
Example:
"foo" instanceof String // false
表にすると以下のようになる。
Value | Result | |
---|---|---|
String | "foo" | false |
new String("foo") | true | |
Number | 0 | false |
new Number(0) | true | |
Boolean | true | false |
new Boolean(true) | true | |
Array | [] | true |
new Array([]) | true | |
RegExp | /(?:)/ | true |
new RegExp() | true | |
Object | {} | true |
new Object() | true |
つまり、「文字列リテラル"foo"はインスタンスはStringのインスタンスではない。しかし、コンストラクタはStringですよ」という、ちょっと首を傾げる結果を返すということだ。
理由が分かってスッキリした。\(^o^)/
でも、頻繁にメソッドを使用するならString オブジェクトを利用した方がイイってことにならないか?
Firefoxで処理に掛る時間を計測するとその差は約3倍。
construtorメソッドしか調べてないが、いちいち new String() とかするなんてハッキリ言って...
そんなのメンドクサイ(-_-;)
0 Comments:
コメントを投稿