元スレ+ JavaScript の質問用スレッド vol.113 +
JavaScript覧 / PC版 /みんなの評価 :
801 = :
初回だけ評価すればいいif文で毎回評価するのは無駄
ベンチマーク以前にアルゴリズムの問題だと思う
804 = :
>>803
http://www.hcn.zaq.ne.jp/___/WEB/WebIDL-ja.html
こういう仕様を参考にすると良いんじゃないかな
805 = :
>>803
Array.prototype.forEach の挙動を参考にしてみては?
http://es5.github.io/#x15.4.4.18
806 = :
一応、挙動を書くなら
- arg1 が Callable でなければ TypeError を返します
- arg2 が String 型でなければ ToString します
arg2 が関数だった場合の挙動はもうわかりますよね?
807 = :
for(var i=0;i<arr.length;i++){
と for(var i=0,e;e=arr[i++];){
と for(var i=-1,e;e=arr[++i];){
の比較ってjsperfに載っていますか?
arr内に偽値を含まないことが確実です
809 = :
>>804
長くてまだ読んでませんがゆっくり読もうと思いますありがとう
>>805-806
省略可能なのはarg1のほうです
引数を複数取る関数の、前のほうの引数が省略可能な場合です
ありがとう
810 = :
>>809
通常は arg1 を省略可能、arg2 を必須にはしません。
arg2 が必須なので arg1 は省略不可能になってしまう為です。
803氏のいわれる arg1 を省略可能の意味がわかりませんが、arg1 と arg2 の役割を逆にするのが適切だと思います。
811 = :
> APIとかでたまにありますが
と断りを入れているように既存のコードでも見かけます
google chrome extensionsのAPIにそういうのが多いです
例 :http://developer.chrome.com/extensions/windows#method-getCurrent
jQueryも$.get(arg1, arg2, arg3, arg4)のarg2を省略して$.get(arg1, arg3)と指定できます
省略できる引数が多い場合はハッシュでまとめて渡せるようになっていたりもしますが。
通常か通常でないか、適切か適切でないかは別としてこういう引数の取り方をする関数が存在しているわけで
そういう場合の挙動ってどうするのが自然なのかなと思ったわけです
805さんの言うように、可能な限りそういう関数を作らなくてもいいようにしたいとは思います
ありがとう
812 = :
>>811
「自然な挙動」をご希望だったので私は標準仕様である ECMAScript に合わせた挙動を提案しました。
少なくとも私の知る限りでは第一引数をオプションにして第二引数を必須にする ECMAScript 仕様はありません。
jQuery や Google Chrome 拡張でそれがあるのなら、各製作者が思い思いに自分がわかりやすいと思う実装をしているだけで共通仕様があるわけではないと思います。
なので803氏が望む挙動をするライブラリのコードを読むのがいいのではないかと。
例えば、jQuery.get は jquery-2.1.0.js の8221行目にあり、引数の数/型に応じて挙動を変えています。
http://api.jquery.com/jQuery.get/
ただし、jQueryの仕様は「ECMAScript にない=誰が見てもわかる仕様ではない」という点で「自然な挙動」ではないように思えます。
813 = :
オーバーロード的な
815 = :
よくあるのはa.b(foo, bar, baz)のbarとbazが省略可能で
a.b(foo, bar)やa.b(foo, baz)やa.b(foo)と書けるケース
barの取る型が関数型でbazの取る型が数値型だとしてそこにa.b(foo, 3, 4)などと渡されたとき
bar = 省略、baz = 3で4はいらない子として捨てられ無事動作するのか
関数型を取るbarに数値型が渡されたとしてタイプエラーを出して動作しないのか
816 = :
省略可能が後ろじゃないのはそんなに不自然じゃないと思う。例えばjQのanimateなんかは
animate( style [, callback] );
animate( style , duration [, callback] );
animate( style , duration , easing [, callback] );
のように使える
ほんで、たとえば文字列が来るべきところにそれ以外が来たからって
toStringしちゃうか、例外処理するかはポリシーじゃね?
817 = :
jQueryは何でも受け入れる印象があるのでjQueryを参考にしていいのか不安
819 = :
>>817
それはわかります
820 = :
>>815
a.b(foo [, callbackfn] [, number]) の多重定義で a.b(foo, 3, 4) が呼び出されたのなら TypeError が妥当だと思われます。
引数3つで呼び出されたのなら、a.b(foo , callbackfn, number) としての挙動を示せばいいだけで難しく考える必要はないかと。
ECMAScript 標準メソッドでは「引数に求められる型にキャストした後に実行する」のが基本ですが、Callable だけはキャストできないのでTypeErrorを返します。
ECMAScriptは型がゆるい(内部処理でキャストを多用する)言語だけあってTypeErrorになることは多くありません。
821 = :
>>817
jQuery は動くことを最優先としているきらいがあって厳格な仕様ではないですね。
多重定義は ECMAScript にないので「自然な挙動」とは思いませんが、あえて参考にするなら Java 等の「多重定義が存在する言語のインターフェース」を参考にすべきだと思います。
822 = :
「もしaが0より大きければ」は
if (0<a)
とはっきり書いた方がいいですか?
if (a)
だと、aがbooleanなのか数値なのか分かりにくいと思います
823 = :
>>822
if (0<a) と書いた方がいいですね
理由も書いておられるのでなぜ書かなくてもいいと思ったのか、気になります
824 = :
0か正の数しか入らないなら別にいいんでない
そうじゃないなら
if(a)だと負の数もtrueになるし数値以外も入るならけっこうtrueっちゃう
825 = :
書かない方が短くなるので、それもありかと思ったのですが
やはり書いた方がいいのですね
ありがとうございました
826 = :
わしの界隈だとスマホ化が進みネイティブアプリに移行してjsの需要が減っておる
みなさんはどうであろうか?
827 = :
だから書店の棚が減っていたのか
829 = :
chromeのcontenteditableでは
改行が<div><br></div>という変なHTMLですが、
firefoxと同様に行末にキャレットがある時は<br><br>
それ以外は<br>を挿入するようにしたら、問題ないようです
それとも問題あるのでしょうか?
なぜこんなくそHTMLを生成するのか知っていたら教えて下さい
830 = :
明確な回答が欲しい質問じゃないんですが
自分の作った変数を封じ込める手法はいくつかあると思いますが
var myObject = {};
をグローバルに一個だけ作って、その中で完結するやり方は
皆さん的にはどうですか?
実戦経験豊富そうなので、こういうケースではこうだというような
ご意見をいただければありがたいです
831 = :
>>830
一つのグローバルオブジェクトに集約する手法は個々の機能を無理やり一つのオブジェクトにまとめた感があって好きじゃない
それを外に出す必要がなければ、クロージャに閉じ込めて役割ごとにオブジェクトを作る
外に出す必要があるなら、必要な数だけ汎用性の高いオブジェクトを作って外に出す
832 = :
>>811-821
ESにも多重定義はある、例えばTypedArrayが顕著な例
こういう風にコンストラクタを分けるとよろし
http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/typedarray.js
>>822-825
(0 < a) は良くない、まずaという変数名がダメ、すぐ辿れるどうでもいい一時変数なら逆に凝る必要がない
タグの開始にも取られるのでダメ、自然数なら (n > 0) (n !== 0) (n) のどれかがいい
>>826-829
しつこい
>>830
良くない
良くないけど現状それほどいい手段がないので悪くない
来年以降はES6モジュールを使うこと
834 = :
832の回答がまじなのかボケなのか分からない
835 = :
一応確認だけどJSで一回だけリロードって出来る?
もしやれる方法があれば教えて下さいな。
仕組み上無理承知で聞いてみるw
それっぽいことでもいいけどiframeやajaxに作り変える位なら
定期リロード(初回までは待つ必要があるけど・・・)させるよ。
htmlのヘッダーに書くキャッシュ禁止がことごとく利かないんだよね・・・
a.html→a.cgi(a.html書換え処理)→a.htmlで
ファイルはちゃんと更新されてるのに表示が更新されない事が多々ある。
わざわざcgiで1秒待たせても意味なかった。
そもそもlolipop前の自宅サーバー時はまったく問題なく出来てたのに、
ブラウザの更新ボタン使わないと100%更新後ページの表示とはいかなくなってしまった。
状況や自宅サーバー時はうまく出来ていたことからブラウザ側のせいじゃない可能性が大。
多分サーバー側にキャッシュがあるのが原因だろう。
なのでブラウザがノーキャッシュではなく、更新を明示的にしないと無理っぽい。
837 = :
location.reload()が出ないように説明したつもりだけど・・・
再読み込み時に一回だけ更新。
日本語が変だがこれ以外の表現方法が無いw
ちなみにa.html→a.cgi→b.html→a.htmlとb挟んでも
aは編集される前のものが出てきた・・・
840 = :
locationはエンドレス繰り返しになるじゃない?
htmlが編集されるたび一回だけ更新すれば事足りるんだよ。
ブラウザのキャッシュ禁止は意味なさげな状態。
ブラウザより先にキャッシュがあるみたい。
(サーバー変更前までは問題なかった)
.htaccessでやってみた。
もしかしたらうまくいったかもしれない!
やっぱサーバー自身がキャッシュもってたのかも。
毎回症状が出るわけではないので・・・まだわからないけれど。
ありがと。
842 = :
841です、すみません、途中で送っちゃいました
document.write以外で方法ってありますか?
849 = :
jquery使った方法なら
$(function(){
$('div a').each(function(){
$(this).replaceWith($(this).text());
});
});
850 = :
jqueryだとすごく簡単にできるんですね
ありがとうございます
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [100%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [97%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.115 + (1001) - [97%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.114 + (1001) - [97%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.103 + (1001) - [97%] - 2012/11/9 15:30
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
トップメニューへ / →のくす牧場書庫について