私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.84 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
for(i in ["hello","world"]){
console.log(i);
}
今気づいたけどfirefox4だと 0, 1が出力されるようになってるのね
console.log(i);
}
今気づいたけどfirefox4だと 0, 1が出力されるようになってるのね
>>848
ミスです。治したらfirefoxでは正常に動くのにieで動かなくなりました。何故でしょうか?
(function() {
var dir = new Object(), head = document.getElementsByTagName("script")[0];
dir["./common/js/"] = new Array("foo.js", "bar.js");
var script;
for (i in dir) {
for (var j = 0, len = dir[i].length; j < len; j++) {
script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", i + dir[i][j]);
head.appendChild(script);
}
}
})();
ミスです。治したらfirefoxでは正常に動くのにieで動かなくなりました。何故でしょうか?
(function() {
var dir = new Object(), head = document.getElementsByTagName("script")[0];
dir["./common/js/"] = new Array("foo.js", "bar.js");
var script;
for (i in dir) {
for (var j = 0, len = dir[i].length; j < len; j++) {
script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", i + dir[i][j]);
head.appendChild(script);
}
}
})();
script自体はちゃんと作れているようです。
alert(script.src);で確認しました。
どうやらappendChildができていないようですが・・・。
alert(head);もalert(head.appendChild);もちゃんと動きます。
alert(script.src);で確認しました。
どうやらappendChildができていないようですが・・・。
alert(head);もalert(head.appendChild);もちゃんと動きます。
for-in は実行順の保証がないので forEach か for が妥当かと。
ループ回数も保証されていないので、配列の処理にfor-inは使うべきではない。
互換性が低すぎるので、forEachも使うべきではない。
互換性が低すぎるので、forEachも使うべきではない。
Array.prototype.forEachならECMA 262 5thでも定義されてるし、
Firefox、Opera9.5、Safari3、Chrome、IE9で使える。
IE6,7にもArray.prototype.forEachを定義することはできるけど、あまりオススメはしない。
ちなみに、E4Xの for eachのことならFirefoxだけだ。
Firefox、Opera9.5、Safari3、Chrome、IE9で使える。
IE6,7にもArray.prototype.forEachを定義することはできるけど、あまりオススメはしない。
ちなみに、E4Xの for eachのことならFirefoxだけだ。
あ、しまった。
×head = document.getElementsByTagName("script")[0];
◯head = document.getElementsByTagName("head")[0];
>>857
そうですね。そういえば少し前に何かの記事でforinの中にfor文作るとすごいパフォーマンスが下がるみたいに書いてあったとうろ覚えしてます。
やっぱ無駄にfor文増やすより普通に./common/js/***で指定した方がよさそうです。
みなさん有難うございました。
×head = document.getElementsByTagName("script")[0];
◯head = document.getElementsByTagName("head")[0];
>>857
そうですね。そういえば少し前に何かの記事でforinの中にfor文作るとすごいパフォーマンスが下がるみたいに書いてあったとうろ覚えしてます。
やっぱ無駄にfor文増やすより普通に./common/js/***で指定した方がよさそうです。
みなさん有難うございました。
なんかの記事っていうのもあれか・・・。これです。
http://www.hyuki.com/yukiwiki/wiki.cgi?EfficientJavaScript#i11
こういうのちょくちょく読んでるんですが、当てにできるのかな・・・。
http://www.hyuki.com/yukiwiki/wiki.cgi?EfficientJavaScript#i11
こういうのちょくちょく読んでるんですが、当てにできるのかな・・・。
横からだが他にもおかしいところが山程ある
(function() {
var files = ["foo.js", "bar.js"],
length = files.length,
head = document.getElementsByTagName("head")[0];
for (var i=0; i < length; i++) {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "./common/js/" + files[i]);
head.appendChild(script);
}
})();
書くならこんな感じにする事
(function() {
var files = ["foo.js", "bar.js"],
length = files.length,
head = document.getElementsByTagName("head")[0];
for (var i=0; i < length; i++) {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "./common/js/" + files[i]);
head.appendChild(script);
}
})();
書くならこんな感じにする事
>>864
jsがfilesになっているのはできるだけ分かりやすい名前を使うっていう事しょうか。
for(var i = 0, length = files.length; i < length; i++)が普通だと思っていました。外に出した方がいいんですね。
あと配列のところですが、["foo.js", "bar.js"]よりもnew Array();で作った方がいいという記事をまえに見たのでそうしてました。
ここの「括弧で生成せずにnewを使う」のところです。高速化より見やすさを重視してという事でしょうか?
http://journal.mycom.co.jp/news/2009/11/11/015/index.html
jsがfilesになっているのはできるだけ分かりやすい名前を使うっていう事しょうか。
for(var i = 0, length = files.length; i < length; i++)が普通だと思っていました。外に出した方がいいんですね。
あと配列のところですが、["foo.js", "bar.js"]よりもnew Array();で作った方がいいという記事をまえに見たのでそうしてました。
ここの「括弧で生成せずにnewを使う」のところです。高速化より見やすさを重視してという事でしょうか?
http://journal.mycom.co.jp/news/2009/11/11/015/index.html
あーdirを一個に減らしてたから分かりづらかったのかもしれないです・・・。
(function() {
var dir = new Object(), head = document.getElementsByTagName("head")[0];
dir["./"] = new Array("qux.js");
dir["./common/"] = new Array("baz.js");
dir["./common/js/"] = new Array("foo.js", "bar.js");
var script;
for (i in dir) {
for (var j = 0, len = dir[i].length; j < len; j++) {
script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", i + dir[i][j]);
head.appendChild(script);
}
}
})();
ほんとはこんな感じにディレクトリ毎のファイルをscriptタグのsrcに指定してheadにappendChildするっていう感じでした。
連投してほんとにすいません。これで終わります・・・。
(function() {
var dir = new Object(), head = document.getElementsByTagName("head")[0];
dir["./"] = new Array("qux.js");
dir["./common/"] = new Array("baz.js");
dir["./common/js/"] = new Array("foo.js", "bar.js");
var script;
for (i in dir) {
for (var j = 0, len = dir[i].length; j < len; j++) {
script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", i + dir[i][j]);
head.appendChild(script);
}
}
})();
ほんとはこんな感じにディレクトリ毎のファイルをscriptタグのsrcに指定してheadにappendChildするっていう感じでした。
連投してほんとにすいません。これで終わります・・・。
>>865
ひどい日本誤訳だな。グラフよく見てみろ、ほんちょびっとだけリテラルのほうが速いぞ。
あと、この程度の差は数万回レベルのループとかじゃないと差が出ないので、気にしないのが良いと思うね。
気になるってんなら仕方ないけど…、病的と言われるレベルだってことは認識してほしいね。
あとEfficientJavaScriptは良記事だったとは思うけど、元記事が書かれたのは2006年11月だよ。
チェックしてないけど、古い情報が混ざってるだろうね。
ひどい日本誤訳だな。グラフよく見てみろ、ほんちょびっとだけリテラルのほうが速いぞ。
あと、この程度の差は数万回レベルのループとかじゃないと差が出ないので、気にしないのが良いと思うね。
気になるってんなら仕方ないけど…、病的と言われるレベルだってことは認識してほしいね。
あとEfficientJavaScriptは良記事だったとは思うけど、元記事が書かれたのは2006年11月だよ。
チェックしてないけど、古い情報が混ざってるだろうね。
命名規則なんて好きにしろ
後、その記事おかしくね?
リテラルの方が早いんだが…
後、その記事おかしくね?
リテラルの方が早いんだが…
Good Parts、なんだかんだでクロックフォード御大の好みがにじみ出てるからね・・・
先日出た「ハイパフォーマンスJavaScript」は、
これまで散逸しがちだった「突っこんだ話」が1冊にまとまってて便利だと思ったよ
さすがに原著の出版が2010年3月なので、ブラウザ関連の話は古びてるものも出てきてたけれど・・・
NCZ様々だなー
先日出た「ハイパフォーマンスJavaScript」は、
これまで散逸しがちだった「突っこんだ話」が1冊にまとまってて便利だと思ったよ
さすがに原著の出版が2010年3月なので、ブラウザ関連の話は古びてるものも出てきてたけれど・・・
NCZ様々だなー
リテラルの方が(文法的に)いいと推奨しているサイトがありますが、
理由がわかりませんでした。どうしてでしょう?
理由がわかりませんでした。どうしてでしょう?
コンストラクタ関数をnewを付けずに実行するとグロスコが汚れる
これを回避するためにはnewを使わないことだ
だからオブジェクトも配列もリテラルで書くべきだ
なんて言われても
ハンマーで頭を殴ると死ぬから家を建てる時には釘を使うな、って感じがするよなあ
これを回避するためにはnewを使わないことだ
だからオブジェクトも配列もリテラルで書くべきだ
なんて言われても
ハンマーで頭を殴ると死ぬから家を建てる時には釘を使うな、って感じがするよなあ
var xx = 0;
window.onload = function(){
var img = new Image();
img.onerror = function(){xx = 1;};
img.src = "x.jpeg";
}
IEだとxxに1が入るんですけど、firefox、opera、chromeなどは全て代入処理が行われませんでした。
どうしてでしょうか?
window.onload = function(){
var img = new Image();
img.onerror = function(){xx = 1;};
img.src = "x.jpeg";
}
IEだとxxに1が入るんですけど、firefox、opera、chromeなどは全て代入処理が行われませんでした。
どうしてでしょうか?
createみたいなメソッドの中にnewする部分を閉じ込めて通常コード
には出ないようにするんでないの。でもそれならコンストラクタを
newつけずに呼んだらその中で検出して対処するんだっていいと思って
いるけどね。
には出ないようにするんでないの。でもそれならコンストラクタを
newつけずに呼んだらその中で検出して対処するんだっていいと思って
いるけどね。
>>879
> newつけずに呼んだらその中で検出して対処するんだっていいと思って
> いるけどね。
それ、どうやるの?
function create(){this.x = 'X'}
var y = {};
y.c = create;
y.c()
とやったとき、newつけていないことを検出できる?
> newつけずに呼んだらその中で検出して対処するんだっていいと思って
> いるけどね。
それ、どうやるの?
function create(){this.x = 'X'}
var y = {};
y.c = create;
y.c()
とやったとき、newつけていないことを検出できる?
>>874
実行時にエラーチェックできるから。
実行時にエラーチェックできるから。
>>880
わざわざ他のもののメソッドにしたらそりゃ分からんだろうけど。
そもそもコンストラクタとして使うものにcreateとかいう名前つける?
小文字で始める?そういうコード普通に書いているというのなら私には何の
アイデアもないです。
わざわざ他のもののメソッドにしたらそりゃ分からんだろうけど。
そもそもコンストラクタとして使うものにcreateとかいう名前つける?
小文字で始める?そういうコード普通に書いているというのなら私には何の
アイデアもないです。
jqueryを覚えたらprototypeとかmootoolsとか覚えなくても問題ないですか?
わかりづれー
「コンストラクタ関数はnewする以外に使わないこと!」じゃ駄目なのかね
汎用的な利用が予想されるライブラリ的なものを作るのだったら
潜在的なバグの可能性になるかも知れないけどそれでもバグの理由は
「コンストラクタ関数をそのまま実行しても期待通りに動かない」からであって
「グローバルを汚す」のは副次的な問題じゃん
「コンストラクタ関数はnewする以外に使わないこと!」じゃ駄目なのかね
汎用的な利用が予想されるライブラリ的なものを作るのだったら
潜在的なバグの可能性になるかも知れないけどそれでもバグの理由は
「コンストラクタ関数をそのまま実行しても期待通りに動かない」からであって
「グローバルを汚す」のは副次的な問題じゃん
>>886-887
別にvarにしなくても普通にfunctionのままで予防的に/**/の行を追加とかは?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<title>sample</title>
</head>
<body>
<pre><script type="text/javascript">
function Counter() {
if(!(this instanceof Counter)) { return new Counter(); } /**/
this.x = 1;
this.add = function(d) { return this.x += d; }
}
var c1 = new Counter();
var c2 = Counter();
var c3 = Counter();
document.writeln(c1.add(1)); document.writeln(c1.add(1))
document.writeln(c2.add(1)); document.writeln(c2.add(1));
document.writeln(c3.add(1)); document.writeln(c3.add(1));
</script></pre>
</body>
</html>
別にvarにしなくても普通にfunctionのままで予防的に/**/の行を追加とかは?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<title>sample</title>
</head>
<body>
<pre><script type="text/javascript">
function Counter() {
if(!(this instanceof Counter)) { return new Counter(); } /**/
this.x = 1;
this.add = function(d) { return this.x += d; }
}
var c1 = new Counter();
var c2 = Counter();
var c3 = Counter();
document.writeln(c1.add(1)); document.writeln(c1.add(1))
document.writeln(c2.add(1)); document.writeln(c2.add(1));
document.writeln(c3.add(1)); document.writeln(c3.add(1));
</script></pre>
</body>
</html>
>>887
たとえば組み込みのObjectコンストラクタだと、
newするときに渡す値によって使われるコンストラクタが違うので、バグの温床になる
var o1 = new Object();
o1.constructor // Object
o1.toFixed // undefined
var o2 = new Object(1);
o2.constructor // Number
o2.toFixed // 存在する
Objectコンストラクタ以外でも、上にあるようなグローバルスコープの問題とかがあるから
リテラルで済ませられるときにはnewを使うなというのは正しいと思う
たとえば組み込みのObjectコンストラクタだと、
newするときに渡す値によって使われるコンストラクタが違うので、バグの温床になる
var o1 = new Object();
o1.constructor // Object
o1.toFixed // undefined
var o2 = new Object(1);
o2.constructor // Number
o2.toFixed // 存在する
Objectコンストラクタ以外でも、上にあるようなグローバルスコープの問題とかがあるから
リテラルで済ませられるときにはnewを使うなというのは正しいと思う
>>888
おまえはいったい何が言いたいんだ
おまえはいったい何が言いたいんだ
ieの場合、document.allとdocument.getElementsByTagName(*)はどっちが速いですか?
日本でもしものサマータイム導入に備えて今のうちにコード対応したいのですが
サマータイムに対応できるライブラリってありませんか?
サマータイムに対応できるライブラリってありませんか?
//練習に作った2010年電気代を安い順に並び替える
var a=new Array(4476,3757,3746,3659,3830,2116,3341,4314,4783,6033,3594,2395);
var c=new Array();var i,j,t,min,s;
for (j=0;j<a.length;j++){c[j]=a[j];}
for (i=0;i<a.length-1;i++){min=a[i];s=i;
for (j=i+1;j<a.length;j++){if (a[j]<min){min=a[j];s=j;}}t=a[i];a[i]=a[s];a[s]=t;}
for (i=0;i<a.length;i++){
poo=a[i];for (j=0;j<a.length;j++){if(c[j]===poo){h=j;}}
if(h<9){h="0"+(h+1);}
else{h=h+1}
document.write(h+"月"+":"+a[i]+"<br>");}
なんか無駄が多い気がする解決策ありますか?
var a=new Array(4476,3757,3746,3659,3830,2116,3341,4314,4783,6033,3594,2395);
var c=new Array();var i,j,t,min,s;
for (j=0;j<a.length;j++){c[j]=a[j];}
for (i=0;i<a.length-1;i++){min=a[i];s=i;
for (j=i+1;j<a.length;j++){if (a[j]<min){min=a[j];s=j;}}t=a[i];a[i]=a[s];a[s]=t;}
for (i=0;i<a.length;i++){
poo=a[i];for (j=0;j<a.length;j++){if(c[j]===poo){h=j;}}
if(h<9){h="0"+(h+1);}
else{h=h+1}
document.write(h+"月"+":"+a[i]+"<br>");}
なんか無駄が多い気がする解決策ありますか?
a=[[1,4476],[2,3757],~]
a.sort(function(a,b){
return a[1] > b[1];//個々は昇順降順適当に合わせて
})
a.sort(function(a,b){
return a[1] > b[1];//個々は昇順降順適当に合わせて
})
特定の月の最終日曜日(今月なら27日)を取得する方法が分かりません
単純に月の日数を取得して日曜日かどうか判断していく方法しか思いつきませんでした
コードは確認してないけどこんな感じですか?
もっとかっこいいアルゴリズムを教えて欲しいです
year = 2011;
month = 3;
lastday = new Date(year, month+1, 0).getDate();
for (var i=lastday; 1<lastday; lastday--) {
if (0 == lastday.getDay()) break;
}
alert("最終日曜日は"+lastday+"日です");
単純に月の日数を取得して日曜日かどうか判断していく方法しか思いつきませんでした
コードは確認してないけどこんな感じですか?
もっとかっこいいアルゴリズムを教えて欲しいです
year = 2011;
month = 3;
lastday = new Date(year, month+1, 0).getDate();
for (var i=lastday; 1<lastday; lastday--) {
if (0 == lastday.getDay()) break;
}
alert("最終日曜日は"+lastday+"日です");
var year = 2011;
var month = 3;
var _D = new Date(year, month, 0);
//"最終日曜日は"+(_D.getDate() - _D.getDay())+"日です"
var month = 3;
var _D = new Date(year, month, 0);
//"最終日曜日は"+(_D.getDate() - _D.getDay())+"日です"
function getDays(year, month){
if (month == 2){
if (year % 400)
return 29;
if (year % 100)
return 28;
if (year % 4)
return 29;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
万年カレンダーでググれば公式があるから
if (month == 2){
if (year % 400)
return 29;
if (year % 100)
return 28;
if (year % 4)
return 29;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
万年カレンダーでググれば公式があるから
>>897
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<title>sample</title>
<script type="text/javascript">
function calc() {
var y = parseInt(document.getElementById('t0').value, 10);
var m = parseInt(document.getElementById('t1').value, 10);
var d = (m<12) ? new Date(y, m, 1) : new Date(y+1, 0, 1);
var x = d.getDay(); if(x == 0) { x = 7; }
var s = new Date(d.getTime()-x*86400000);
document.getElementById('t2').value = String(s.getDate());
}
</script>
</head>
<body>
<div>Year:<input type="text" id="t0"> Month:<input type="text" id="t1">
<button type="button" onclick="calc()">Calc</button>
Last Sunday:<input type="text" id="t2" readonly></div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<title>sample</title>
<script type="text/javascript">
function calc() {
var y = parseInt(document.getElementById('t0').value, 10);
var m = parseInt(document.getElementById('t1').value, 10);
var d = (m<12) ? new Date(y, m, 1) : new Date(y+1, 0, 1);
var x = d.getDay(); if(x == 0) { x = 7; }
var s = new Date(d.getTime()-x*86400000);
document.getElementById('t2').value = String(s.getDate());
}
</script>
</head>
<body>
<div>Year:<input type="text" id="t0"> Month:<input type="text" id="t1">
<button type="button" onclick="calc()">Calc</button>
Last Sunday:<input type="text" id="t2" readonly></div>
</body>
</html>
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.94 + (1001) - [97%] - 2012/1/8 15:46
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.74 + (1001) - [97%] - 2009/12/1 6:08 ○
- + JavaScript の質問用スレッド vol.87 + (1001) - [97%] - 2011/6/21 6:33
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.141 + (881) - [95%] - 2021/4/19 9:00
- + JavaScript の質問用スレッド vol.134 + (1001) - [95%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.104 + (1001) - [95%] - 2013/1/28 4:00
- + JavaScript の質問用スレッド vol.124 + (1001) - [95%] - 2015/7/16 1:30
- + JavaScript の質問用スレッド vol.142 + (984) - [95%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.114 + (1001) - [95%] - 2014/5/3 10:45
トップメニューへ / →のくす牧場書庫について