[過去ログ]
+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net (1002レス)
+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net http://peace.5ch.net/test/read.cgi/hp/1444186237/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
537: Name_Not_Found [sage] 2015/11/03(火) 16:48:35.24 ID:??? どちらかというと俺は>>530の関数で第一引数がString型でない時に例外が発生する仕様が気になる >>531も同様の問題を抱えているが、>>534のように書けば修正されるな http://peace.5ch.net/test/read.cgi/hp/1444186237/537
538: Name_Not_Found [sage] 2015/11/03(火) 17:59:55.41 ID:??? >>537 配列を引数にとると例外すら発生しなかったので修正した http://jsfiddle.net/cau4mx8d/1/ http://peace.5ch.net/test/read.cgi/hp/1444186237/538
558: 547 [] 2015/11/04(水) 01:32:27.89 ID:pUq54Vxq >>550 > ただ、それ以前に、「どんな型でもちゃんと処理しろ」というのはやはり負担が大きく、どこかしらでバグるだろうから、 そんなことはない どんな型でも安全に処理すべきだし、私のポリシーは「1: 安全、2: 速度」だ ECMAScript は型が緩いといわれるが、それは内部的に型変換して処理しているからだ ほとんどの演算子、関数は内部的に始めの処理でキャスト(型変換)している 従って、始めの処理で引数をキャストしておけば「どんな型でも適切に処理」することは難しくない ここで回答する時には「例外処理ぐらいは自分でやってくれ」のスタンスで意識的に省略することがあるが、>>537の指摘は妥当なものだ 例えば、RegExp.prototype.exec は第一引数を ToString (String型に変換) するのでどんな型でも適切に処理できる http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.exec >>531は String.prototype.match を使用しているが、これは String 型を引数に持たない場合に適切に処理できないので妥当ではない ES 仕様で内部的に型変換してくれるのならそれを利用すべきだ ネイティブ関数の内部処理でキャストする方が String() でキャストするよりも速度面で有利だからだ しかし、速度重視のスタンスの割には getFirstLine1 で i1 === -1 の比較回数に触れられていないのが意外だ 私としては速度的にまだ満足できるレベルではなかったので、あなたが「最良のアルゴリズム」を出してくれることを期待していたのだが getFirstLine1 は i1 の比較が最大で3回実行されるというのが無駄だと思っている var has1 = i1 !== -1; のように結果をキャッシュさせる事も対策の一つとして考えられるが、比較回数を減らすのが重要だろう http://jsfiddle.net/cau4mx8d/4/ ECMAScript はスコープチェーンで変数を参照するのでグローバル変数は基本的に遅い その為、String() を使うときにはクロージャに閉じ込める等してスコープ走査回数を抑える実装にする事がある ここでは getFirstLine1 はグローバル関数なので気にする必要がないが、実際に運用では気をつけるべきだろう また、String() ではなく、arg + '' で型変換する方法もあるが、この方法は ToString() とは違うので基本使わない http://peace.5ch.net/test/read.cgi/hp/1444186237/558
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.115s*