[過去ログ] + JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
558: 547 2015/11/04(水)01:32 ID:pUq54Vxq(2/9) AAS
>>550
> ただ、それ以前に、「どんな型でもちゃんと処理しろ」というのはやはり負担が大きく、どこかしらでバグるだろうから、
そんなことはない
どんな型でも安全に処理すべきだし、私のポリシーは「1: 安全、2: 速度」だ
ECMAScript は型が緩いといわれるが、それは内部的に型変換して処理しているからだ
ほとんどの演算子、関数は内部的に始めの処理でキャスト(型変換)している
従って、始めの処理で引数をキャストしておけば「どんな型でも適切に処理」することは難しくない
ここで回答する時には「例外処理ぐらいは自分でやってくれ」のスタンスで意識的に省略することがあるが、>>537の指摘は妥当なものだ
例えば、RegExp.prototype.exec は第一引数を ToString (String型に変換) するのでどんな型でも適切に処理できる
外部リンク[exec]:www.ecma-international.org
>>531は String.prototype.match を使用しているが、これは String 型を引数に持たない場合に適切に処理できないので妥当ではない
ES 仕様で内部的に型変換してくれるのならそれを利用すべきだ
ネイティブ関数の内部処理でキャストする方が String() でキャストするよりも速度面で有利だからだ

しかし、速度重視のスタンスの割には getFirstLine1 で i1 === -1 の比較回数に触れられていないのが意外だ
私としては速度的にまだ満足できるレベルではなかったので、あなたが「最良のアルゴリズム」を出してくれることを期待していたのだが
getFirstLine1 は i1 の比較が最大で3回実行されるというのが無駄だと思っている
var has1 = i1 !== -1; のように結果をキャッシュさせる事も対策の一つとして考えられるが、比較回数を減らすのが重要だろう
外部リンク:jsfiddle.net

ECMAScript はスコープチェーンで変数を参照するのでグローバル変数は基本的に遅い
その為、String() を使うときにはクロージャに閉じ込める等してスコープ走査回数を抑える実装にする事がある
ここでは getFirstLine1 はグローバル関数なので気にする必要がないが、実際に運用では気をつけるべきだろう
また、String() ではなく、arg + '' で型変換する方法もあるが、この方法は ToString() とは違うので基本使わない
1-
あと 444 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.009s