元スレ+ JavaScript の質問用スレッド vol.87 +
JavaScript覧 / PC版 /みんなの評価 :
51 = :
IE以外は連続ダイアログ抑制するんじゃないの?
52 = :
>>44
そういう場合も何か一つ継続条件を置くね
do {
if (条件) {
// 処理
continue;
} else if (条件) {
// 処理
continue;
}
} while (継続条件);
continue を何度も使うなら break 一つの方がシンプルだと思うけどね
基本的に continue は使わない
53 = :
>>50
正確にはwhile(true)でもいいけど無駄
while(対象データが終了フラグ以外)にして他に条件があるならif(条件){break;}すればいい
全部の条件をwhile()に持ってくる必要はないよ
55 = :
これだけ議論が続いてもfor(;;)派が一人も出てこないことに絶望した
57 = :
だからこそ永遠に戦い続けるのだ
58 = :
thisについて質問です。
1: JavaScriptのthisは、applyなどされない状態で(仕様上)何の値を指すのか?
2: イベントリスナーのthisがelementを指すのは、仕様ではなくブラウザの実装によるものか?
以上、どうか教えてください。お願いします。
59 = :
厳格比較の===を使いたいんだけど、null || undefinedを判定したい時にちょっと困る。
if(x === y || ((x === null || x === undefined) && (y === null || y === undefined)))
と書かないといけないし。
実際のところは
if(x === y || (x == null && y == null))
という感じでもちゃんと動くのかな?
どちらにせよ面倒で嫌だ。
61 = :
>>59
x, y に期待する型がない?
例えば、x, y が同時に Number 型でない場合を期待するなら
if (typeof x !== 'number' && typeof y !== 'number')
62 = :
>>61
例えばだけど、xとyには"文字列"/null/undefinedが入っている。
なので、===を使わずに==で書いても全然問題ないんだが、
万が一数値などが紛れ込んでしまって
x == 0, y == " "
みたいになったときに一致させたくない
63 = :
その例だと
if (typeof x !== 'String' && x !== null && x !== undefined)
で例外投げるべきじゃね?
64 = :
>>63
横やり失礼。数値と文字列とnullとundefinedが混在する場合にはどうすればいいかな
65 = :
>>63
例外を投げるのと、===を使うのとは別の話だと思う
その関数内で、比較のたびにその例外のコードを書くのはナンセンスだけど
関数の先頭で例外を飛ばしたから比較は==でいいかというと、そうではない
66 = :
1:仕様で決まっているのは()で明示的に呼び出すときだけ
コールバックのthisが何であるかは暗記もの
2:JavaScript1.0で規定、HTML5で再定義
IE9がDOM-Eventsをサポートした以上はどう考えてもいらない子
67 = :
http://www.overset.com/2008/08/30/animated-sortable-datagrid-jquery-plugin-jtps/
ここにあるテーブルをソートしたりするjQueryプラグインなんですが、
動的に追加したテーブルをソートすると次回からの
$("#tbltbody").empty();
が効かず、新たなデータも追加されません。
できるだけソースコードをいじらずに対処したいのですが、お知恵を貸して頂けませんか?
68 = :
HTML5が勧告されるまで標準仕様上は、先行実装状態?
69 = :
>>59
メイン処理が文字列なら
引数がundefinedかnullのときにさっさとデフォルト値でも入れろ
undefinedかnullのときに特別処理をするのなら
冒頭でチェックする必要なんかない
順番にString-String、undefined-nullのように分岐して
最後まで引っかからなかったら例外でも投げろ
70 = :
追記
ソートさえしなければページングなども追加したテーブルで正常に動きます。
71 = :
>>67
自己解決できそうです
ではでは
72 = :
>>69
だから、例外を投げるのと===を使うというのを同一視するなよ
引数に文字列が入っていることが確実なら==を使ってもいい、という話じゃないだろ?
73 = :
JSLintでは、===を使わなかった場合に警告を出すよね
作者も常に===を使うべき、と言っているし
if(x === y || (x == null && y == null)) が一番わかりやすいが、
これでもJSLintは警告を出す(==を使っているから)
if(x === y || ((x === undefined || x === null) && (y === undefined || y == null)))
こう書くしかないのかな。
74 = :
>>62を読むと null, undefined を厳密比較するのが目的ではなく、実際の処理で必要ない値を例外にしたいように読めるけど>>59とは別の人?
「処理を変えずに短く書きたい」だと工夫しようがないと思うよ
目的やその後の処理次第で最善の方法は変わる
75 = :
=== を使うってことは「型まで厳密に調べます」ってことなんだから、
typeofでもなんでも使いまくってチェックするようなコードに当然なる。
「厳密に調べたいけど簡単なコードにしたい」って、そりゃ矛盾してる。
76 = :
世の中には同じようなことを考える人がいて、
"use restrict";
で==の機能がまさにそれと同じにする提案がある
http://groups.google.com/group/jsmentors/browse_thread/thread/d552623443f70df9/539021aa0c4c8bfa?pli=1
77 = :
===を使うのは不用意な型変換によるバグを防ぐためのものなのに
いつの間にか==を使わないことが目的になるという本末転倒
undefinedでも、プロパティ値がundefinedであるのと
プロパティを持たない (p in obj) で意味が違うしな
78 = :
>>77
imgタグのalt=""と同じようなもので、lintを通すための書き方になるんだよな
でもlintで警告を消したい気持ちもよくわかる
80 = :
>>78
imgの@altはDTDに対して型妥当、つまり正しいインスタンスであるかのチェックなので
作法として使うべきかどうかとは別の話
81 = :
>>80
JSLintだって、withなどの危険な構文を使用していないことのチェックだぜ
82 = :
質問です。
JavaScriptを外部ファイルにしている場合、スクリプト内で
自身の外部ファイルのパスを取得する方法はあるのでしょうか?
getElementsByTagName("script") で取ってsrcを調べる時に、
それが厳密に「自分自身のパス」であるかどうかを調べるのに、
スクリプト内にパスを決め打ちで書くしかないのかどうかってことです。
83 = :
ここまで>>63への突っ込みなし
'String' とか null でない時に例外投げてどうするのとかw
84 = :
>>81
SGML/XMLのValidatorに通らないというのは、
文書型・要素型というクラスと照合した時に
データの中に妥当でないインスタンスが混じっているという意味なのであって
つまり型あり言語におけるTypeErrorと同義だ
with自体は構文違反でも何でもない
85 = :
>>62
まだいるのならその後の処理で必要な型を示してくれ
文字列処理なら文字列型以外を例外にすればいいだけ
null や undefined に限定して考えるから数値が来た場合に困るんだよ
次は true が来た場合にどうするんだ、ってことになる
87 = :
>>82
どうせ@deferを書いちゃいないだろうから
外部スクリプトのトップレベルでdocument.scripts[document.scripts.length-1].srcを見れば
そのスクリプトのURIだ
88 = :
コールバックという意味がwikiとか見てもよくわかりません
javascriptでコールバックを活用したプログラムの例を一つ教えてもらいたいです
89 = :
>>88
onclick
example:
var div = document.createElement("div");
div.style.backgroundColor = "red";
div.style.width = "100";
div.style.height = "100";
document.body.appendChild(div);
var callback = function() {
alert("ボタンが押されたらcallbackされる関数");
};
div.onclick = callback;
90 = :
>>88
[0, 1, 2, 3].forEach(callback, this);
obj.watch('prop', callback);
document.addEventListener('click', callback, false);
document.createTreeWalker(document, 1, callback, false);
document.setUserData('my-data', { foo: 'bar' }, callback);
これらのコールバックのthisを全部当てたらほめてやる
91 = :
if (!a) {
}
JSLintってこれだとエラーがでないのが不思議
93 = :
>87
なるほど。
対象のスクリプトはどうせ同サーバなんで@defer書く意味はほぼないですし、
その方向で調べてみます。ありがとうございました。
96 = :
ありがとうございます!
97 = :
>>91
問題ないと思うけどなんで不思議?
98 = :
>>91
それだけならエラー出るよ
再現しないコードを貼る人が多くて困る
99 = :
>>97
==の曖昧なチェックはNGなのに!aはOKなのって不思議じゃない?
>>98
そこは勝手に補完しろよ別に質問なわけじゃないんだから
100 = :
>>97
型に厳密ではないからじゃねえの
ま、どうせ暗黙の型変換がはしる文脈なら利用した方が
明示的に型変換しておくより速い場合もあるけどな
引き合いに出して悪いが>>89なんかCSSのエラー補正まで走らせてるんだぜ
それに比べりゃかわいいもんだ
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.77 + (1001) - [97%] - 2010/5/8 19:06
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.107 + (1001) - [95%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.117 + (1009) - [95%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.137 + (1003) - [95%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.127 + (1001) - [95%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [95%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.94 + (1001) - [95%] - 2012/1/8 15:46
トップメニューへ / →のくす牧場書庫について