+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです) 検索の仕方が悪いのかな
全然見つからん…
是非教えて頂きたい JSとしてはただサーバーに問い合わせるだけだぞ?
Ajaxじゃん
実際ログイン管理をするのはサーバー 例えば、localStorage から値を取得して、それと比較して
一致していれば、
<div id="passw">OK</div>
不一致なら、
<div id="passw">ダメ</div>
とかに更新するだけだろ
実際には、localStorage じゃなくて、どこかのサーバーに問い合わせるけど <div id="message">…</div>
divタグ内の要素が増えたとき、もしくは
特定の関数が呼ばれたときハンドリングする方法はありませんか?
onchangeでもonreloadでも感知できません。 >>337-340
キーワードを調べてみてイメージはできたのでやってみます
ありがとうございました >>341-342
React では、DOM の追加・削除・変更のタイミングで、
ライフサイクル・メソッドが呼ばれるけど
>>343
DOM 操作なら、jQuery が簡単
それと、質問はこのスレよりも、web制作管理板のJS スレで聞いた方が良い。
向こうの板の方が、人が多いから Web制作板は荒れているので、プログラム板で質問しても良い
実際には人数が多いのではなく、少人数が馴れ合ってるだけ VSCodeはデフォルトでnode.jsのデバッグができるんですね
これはすごくいいのでは?
当然ですが標準モジュールもJavaScriptで書かれているので、
デバッガで追っていけば関数のインターフェイスや処理も良く分かります
PHPに比べてドキュメントの整備がいまいちに見えたのは、
ソースコードを見れば分かるだろということかもしれませんね Nodeの数少なく基礎的で単純なAPIに
あれ以上何の説明がいると言うんだろうか? >>345
せやね。俺はこっちも見てるのでどちらでも答えるよ >>347
「ゆとり女には無理」って説明だろうね。
つかNodeスレで聞けよな。
ただまあここら辺がPHPerが馬鹿にされる原因でもあるのだろう。
PHPは言語が糞過ぎて類推が利かなすぎる。だから全部マニュアルを読んで覚える物だと感違いしてるのさ。 >>347
php.netと比べればいくらでも改善の余地が見つかると思いますが? >>349
web制作版がクライアントサイドJavaScript、
プログラム板がサーバサイドJavaScript、
つまりnode.js用のスレだと認識していますが違うのですか?
おかしなことを言う人がいるものですね >>351
どこを見てそんな解釈が?
おまえは多分一生上達しないタイプだ。偶にいるんだよ、何でこいつは相変わらずセンス無いままなのだろう、て奴が。
多分、プログラマ辞めて違う職種に転職した方がいいぞマジで。見込みなしだよ。 >>351
その理屈だと本来WebProg板を探すべき VSCodeのIntelliSenseで出てくるヒントが
何か見覚えのないよく分からない記法なので、
これは何なのか?と思っていたのですが、TypeScriptのようです
普通のJavaScriptで書かれた情報が出てきて欲しいのですが、
どう設定すればいいのでしょうか?
>>352
頭の悪い意見ですね
説得力皆無です
>>353
それはごもっともです 入力補完は型定義ファイル(拡張子d.ts)によって行われる
そしてこの型定義ファイルとはTypeScriptのファイル
ということのようなので、TypeScriptによる説明しかないのでしょうか?
むしろTypeScriptを使えという圧を感じないでもありません、
(VSCodeもTypeScriptもMS製なので)
TypeScriptはAngularにも採用されているし、おそらくいいものなのでしょうけど、
今すぐに使いたいとも思いません
単にJSDocのコメントを表示して欲しいだけなのですが
それは出来ないのでしょうか? 相変わらず検索ということをしないなぁ
自分が書いた文そのままアドレスバーに打ち込めよ TypeScriptの記法が良く分からなかったのですが
よく見たら引数の型をはっきり書いてるんですね
これは、率直にいってJavaScriptより良さそうです
実際IntelliSenseがTypeScriptベースで、素のJavaScriptの情報を提供していないのは
それがJavaScriptよりもいいものだ、という確信があるからでしょう
IntelliSenseが何を書いているか分かる程度には
TypeScriptを勉強するのが一番いいと思いました
もしかして生JavaScriptは終わりつつある言語なのでは?
>>357
検索で済んだら質問スレいらないんですよ ここは君のふと思いついた疑問を垂れ流すスレじゃないから
本当に困った人ができるだけ検索するなり自己解決しようとしても分からなかったことを聞くスレだからね
自分で助かろうとする人を救うスレだから、勘違いしないように Haxe でも、FlashDevelop がデフォルトエディタだけど、
VS Code 用のプラグインもある
検索すれば? Haxeっていう言語は知らなかったのですが
>Adobe Flashおよび独自のNekoVMで実行可能なバイトコードにコンパイルされるほか、
>JavaScript、ActionScript、C++、C#、Java、PHP、Python、Luaへの
>ソースコードの変換が可能
すごくトリッキーな、面白い言語ですね
全然性質の違うJavaScriptにもCにも変換するというのがすごい Haxeについてのネット上の記事を読んでみましたが
AltJSとしてはやはり無理があるようですね
言語をコンバートできたとしても
APIの部分でのすりあわせがあるので。
開発者がゲームを作っている人らしく、
そういう人じゃないとまず作らないような、野生感満点のプロダクトですね 世の中には同じ疑問を持っているやつが沢山いて、そいつら向けの解説記事も沢山ある
検索してそう言う記事や文献がないと言う事は、その問題が解決されていないと言う事だ
検索で済めば質問スレは不要とか言ってるバカは検索能力が欠如していて、文献を読む能力も皆無なのだろう
googleがあれば質問スレなんか不要
と言う事で、次スレは立てないように >>358みたいな馬鹿は死ねでいいだろ
ただ、こういう馬鹿も一定数居るところを見ると、
有料で初心者質問チャットをすると成立するのかね?
知恵遅れのベストアンサーってこれか?と思って調べてみたが、換金は無理っぽいんだが。 毎年必ず初心者は出てくる
小学生、幼稚園児、乳児、いつからプログラミングを始めても必ず初心者の状態はある
だから初心者というのはいなくならない いやそういう意味じゃねえよ
検索しない馬鹿は死ね、だろ
つかこのスレ相変わらず日本語が通じねえな >>363
質問スレが気に入らないなら見に来なければいいだけですが?
幼稚な人が多いですね 次スレの代わりに
バカに検索キーワードを教えてあげるスレ >>368
ローカルルールさえ守れないゴミクズをゴミクズと呼ぶ事は法律でも憲法でも禁止されていないと
ゴミクズは消えろ ローカルルールを守らないスレ荒らしに回答する事は荒らしに加担する事なので慎むように クライアントJavaScriptでは
function test(){
console.log('function called');
}
var fnName = "test";
window[fnName]();
みたいな形で変数に関数名を入れて呼ぶことが出来ますが
node.jsでは出来ないのでしょうか?
そのスコープをオブジェクト化ものがあればいいのですが。 >>370
ここは質問スレです
質問するか回答するか消えるかして下さい
分かりましたね? プライドが高く自己アピールが激しい馬鹿はホント救いようがない >>372の件ですが
function test(){
console.log('function called');
}
var fnName = "test";
eval(fnName+'()');
で出来ました
evalは使うべきでないものという先入観があってすっかり忘れていましたが、
本当に使うべきではないのかをよく検討すべきですよね?
外からやってきたダーティーな値を引数にする場合や
パフォーマンスがよほどシビアな場合以外は
特に使っても問題ないと思います
どうなのでしょうか? eval とか、グローバル変数などは、仕事では使えない
ほとんどの本や、プロジェクトで禁止されている Nodeでは最上位オブジェクト名はglobalまたはrootまたはGLOBALだけど
function test(){}
で定義してもglobal.testにマッピングされないようなので、
global['test']()でも呼び出せないですね。
var a = {};
a.test = function(){};
a['test']();
程度にとどめておくのがいいかと。 ご回答ありがとうございます
>>378
JavaScriptにはスコープのオブジェクトみたいなものがない、
ということが問題なので、グローバルかどうかはあんまり関係ないですよね
関数の中に入れても、
グローバルスコープと違う呼び出し方ができるわけではないので
>>379
たしかに関数を入れるコンテナオブジェクトを用意した方が
コードがすっきりするし、いいですね
関数を配列に入れると可読性が下がるので抵抗があったのですが
オブジェクトに入れればいいんだなって気づきました
ありがとうございました VSCodeってGit連携もイケてますし、
JavaScript/TypeScript用のプレイグラウンドの拡張機能もありますし
node.jsとの相性最高なのでは?
いまいちイモい感じだったMSが、こんなモダンなエディタを無料で提供するなんて
いい時代ですね
>>381
何故そう思ったんですか?
不思議な発想ですね >>373
質問スレでは質問と回答以外は禁止とでも言うのか?
それは法律でも憲法でも無いよな
ゴミクズは消えろ >>376-377
バカでも答えられるバカな質問なので、つい答えたくなるが
荒らしには構うな Nodeとか関係なくグローバルオブジェクト=グローバルスコープがJSの仕様何だから>>379は間違いだけどな youtubeのapiとかgoogleのとか使いたいときって
NODE。JSというのをインストールすればいいんですか?
NODE.JSというのはサバ―サイドらしいんですけど
サバ―じゃなくてもいいんですか? >>384
どうみてもあなたこそが荒らしです
分かりますね? >>387
どうみてもあなたこそが荒らしです
分かりますね? 荒らしは質問スレなら問答無用に質問者に偉そうにできると勘違いしているゴミなので
質問者と回答者で協力し、技術圧で追い出しましょう
ひたすら技術的な話だけしていれば自然と消えて行きます >>380
スコープのどこに書くかで動作が若干違います
グローバルスコープで定義するとwindowにマッピングされます
function test1(){}
window.test1(); //呼び出し可能
しかし、関数内で定義した場合はwindowにマッピングされません
(function(){
function test2(){}
window.test2(); // 未定義エラー
})()
>>380の書き方からすると、この違いについて理解されていると思いますが、
スコープの最上位オブジェクトは存在しません(スクリプトからアクセスできない)ので、何かにマッピングされるということはありません
後者の状況でwindowから呼び出したい場合は
window.test2 = function(){};
(Nodeでは global.test2 = function(){}; )
という形で定義する必要があります
が、windowやglobaのプロパティ・メソッドとして定義することは
グローバル変数と同じ扱いなので、あまりお勧めしません 普通、各オブジェクトを1つずつ、グローバル変数にはしない。
そうすると、グローバル変数の数が多すぎる
モジュール(1つのファイル)全体で、1つのグローバル変数にする 韓国人とゆとりは殺せ
この意味が理解されないうちはこのスレが機能することもないだろうさ
>>389
おまえが荒らしだよ くっそ初心者の質問で悪いんですが、
指南してもらえると嬉しいです。
下記のコードで同じ画像を4つ横に並べようと思ってるんですが、並びません。
なんとなく理由は思い浮かぶんですが、
(getElementByIdで渡されたのは値ではなく、参照的扱い?)
どう書けばかっこよく書けるのか分かりません。
かっこいいJavaScripterになりたいので厳しめに教えてください。
<img id="gazou" src="image/gazou.png" width="200" height="200">
var dispGazou= function(){
for(var i = 0; i < 4; i++){
var k = document.getElementById("gazou");
k.style.marginLeft = (parseFloat(k.width) * i) + "px";
dA.appendChild(k);
}
} >dA.appendChild(k);
dA という変数が存在しない
スタイルの設定など、DOM 操作なら、jQuery が簡単
それと、質問はこのスレよりも、web制作管理板のJS スレで聞いた方が良い。
向こうの板の方が、人が多いから >>393
たいした工夫もなく書くとするとこんな感じかな。
これはjQueryを使ったやりかた
https://jsfiddle.net/8cLk4adb/
<img id="gazou" src="https://placehold.jp/12/c42d3f/ffffff/50x50.png">
<div id="result"></div>
for (let i = 0; i < 4; i++) {
$("#gazou").clone().removeAttr('id').appendTo("#result");
}
要は要素の複製をしてないのが悪いということ あ、説明忘れてた。removeAttrしてるのは、
同じIDを複数作ることは許されてないから >>394
すみません。下記が抜けていました。
dA = document.getElementById("dispArea");
<div id="disprArea"></div>
>>396
要素の複製は知りませんでした。
無事解決しました。
ありがとうございます。
レスして頂いたお二方、ありがとうございました。 httpモジュールやrouterモジュールを使って
node.jsでちょっとしたサーバを作っています
routerはexpressの一部を切り出したモジュールで、
express同様、
router.use(bodyParser.json());
みたいな感じにミドルウェアを登録します
リクエストボディ関連で良く分からない挙動が出ているので、
bodyParserで処理する前のリクエストボディを確認したいのですが、
どうやればいいのでしょうか? httpのrequestハンドラの中にブレークポイントを設定して
requestオブジェクトを見てみても、それらしいものがないものが見当たりません
socketとかconnectionを持っているので、
これを使ってストリームを読んだりするのでしょうか? >>402の件ですが
http://m12i.hatenablog.com/entry/2016/11/19/180937
ここを読んで分かったのですが、
requestオブジェクト自体がReadableストリームでした
なのでdataハンドラとendハンドラを使ってデータを読み込める
それがリクエストボディ、ということなんですね >>404
クライアントサイドJavaScript=ブラウザの上で動くJavaScript
サーバサイドJavaScript=OSの上で動くJavaScript
という意味です
Windowsやmacのような一般的なパソコンがあるなら、node.jsも使えますよ 俺も中学でJS知ったときはこんな感じで下手くそな自演して悦に入ってたわ
自尊心は高くアピールしたいけど臆病なんだよな、分かるよ >>407
じゃあ、あなたはその頃と全く成長してないですね
恥を知りなさい node.js界ではrequestにreq、responseにres
という変数名を当てていることが多いようですが
自動補完が発達した今では、
セコい省略をするよりも分かりやすい変数名を付ける方を優先すべき、
と思っていたのでモヤモヤします
reqやresを使う合理的な理由はあるのでしょうか? >>409
ようするに可読性が十分であるかが問題の焦点だよ
長過ぎる名前っていうのも実は場合によっては読みにくい
ローカル変数のような使い捨て変数に長過ぎる名前をつけるなんてありえないから
まず短い名前が許されるのは、その変数のスコープが小さい場合
俺のルールでは一文字の変数に略して良いのは、その変数が一行のスコープしか存在しない場合だな
例えば requests.map(r => foo(r)) みたいな感じな。
なぜ一文字でいいかというと、それはその一行を見るだけでrが何を意味するのかわかるからだ。
reqやresは関数やブロックの中でだけ使われる変数ならOKだ。
大体予想がつき、それを確定するにはその前後数行を読めばいいだけ
だから関数やブロックと言っても短い行数(どんなに長くても30行程度)である必要がある
だけど普通はその程度で書く。書かなければいけないレベル。だから短くても許される
省略してはいけないのは、略称を見ても予想がつかないもの。
この時予想がつくかどうかは、その人のバックグラウンドできまるわけだが
少なくともプログラミングをしているのだからソフトウェア用語は略しても
(スコープが小さいことが前提だが)予想がつく
あとはその業務で誰もがそう略しているといえるようなものだけだなそうでないものは略してはいけない
> 自動補完が発達した今では、
自動補完は「書く時」にサポートしてくれるものであって「読む時」にサポートしてくれるものじゃない。
ぶっちゃけ書く時間というのは無視できる。読むときのほうが何度も読むし時間がかかる
その時コードが読めればそれで十分なんだよ。だから予想がつく略であればOK
そのためにも数十行程度のスコープであることが前提
名前を省略するなっていうのは、とても大きなスコープの場合の話
技術力が高い人ほど、関数の行数は短くなり、わかりやすくなり、略した変数を使う権利が与えられるw
手段と目的を履き違えたらダメだよ。略がいけないのは読んだ人がわかりにくいからで
別にわかりにくくないのであれば、略してOK >>410
長々と乙だが、お前らゆとりの問題はそこなんだよ。
お前らがそんなレスをしている限り、お前らが居るスレが良スレになることはない。
誰を助けるべきか、よく考えろ。
パヨクがグダグダよく言っているが、あれは単なる論点のすり替えだ。騙されてはいけない。
韓国人やパヨクが嫌われているのは、迷惑行為をしているからでしかない。差別ではなく、区別だ。
お前はこのnode女を飼うつもりなのか?それでスレが良くなるとでも思っているのか?
お花畑すぎるのも、周りの人には大迷惑だということに気づけ。
ここら辺に関してゆとりは全く傍若無人だから嫌われるし、
俺は「ゆとりも殺さないといけない」と結論づけてる。
もっとも、被害を被るのは結局お前らであり、
また、自覚してないようだが、既にそうなっているんだがな。 >>410
ありがとうございます
resとかreqが使われるのは、コールバックの仮引数です
ローカル変数なので
あえて省略して刹那感を出しているのかもしれませんね
node.jsはモジュールを読み込む変数に一般名詞を使うことが多いので
一般名詞を使うとモジュールっぽく見えてしまう、ということもありそうです
>>411
何を言っているんですか??
馬鹿な人はだいたいネトウヨですね
しかしJavaScriptスレにまでネトウヨが湧くとは・・(呆れ >>411
いつも通りお前JavaScriptの話をしてないな >>410
そうそう、名前よりスコープを短く保つの大事 スコープは短く。それができたなら変数名を短くする権利が与えられる
が正解な ゴミクズの質問は
1 ゴミクズ以外の誰でも検索すれば一発でわかる
2 正答が存在しないことがわかりきっている
1はローカルルールにやめろとかいてあるし
2はこんな場末の掲示板でやっても見せ合いオナニーにしかならん
本当にゴミクズ >>412-413
まあお前らが居る限り、
俺がどんだけ努力しても(俺流のやり方では)スレが正常化しないと分かってしまったからね。
俺は田んぼに肥料をやってたくさん米をならすことは出来るが、
それが全部お前らイナゴのエサになってしまうだけだと分かったら、
先にイナゴを殺すしかないだろ。だから、俺は
韓国人死ね
ゆとり死ね
な訳だ。ただし俺が老害化していて、俺の考えが間違っている可能性
(ゆとり流の別解法が存在する可能性)も勿論残っているから、俺はとりあえず傍観モードな訳だ。
お前らの回答には間違いも散見されるが、それについて指摘するつもりもない。
お前らのやり方で正常化するようなら、お前らの勝ちでいいし、俺ら老害は去るべきではある。
ただ本来は、お前らがルールだというのなら、お前らが新たに立てた別スレでやるのが筋であって、
旧来のスレを乗っ取ってやっているお前らにはどだい無理だというのも自明なんだが。
(お前らはお前らだけで人を集めるだけの魅力/能力がない、と自己証明している。
本当に良いスレが出来れば自然と人はそっちに流れるものでしかないんだが)
他言語スレ見て見ろ。JavaScriptのスレが如何に酷いかはよく分かる。
そして、2chのスレはどこでも同じような雰囲気だ。
それは「そういう物しかできないから」であり、また、「そうじゃないと持続しない」からなんだよ。
2chはずっとシステムを変えてない。
その中でお前らみたいに色々努力する奴も必ずいるし、俺も俺なりに抗ってみた時期もある。
でも結局、落ち着いているところに落ち着いている、というのが今の2chだ。
それ以上の物を作るのは相当に難しい。
今なぜこうなっているのかすら理解できないお前らみたいな馬鹿にはこれを凌駕するのは到底無理なわけだが、
まあそれでもお手並み拝見はするべき、だから傍観してる。
>>417の言うことは全く正解だ。
なぜ検索しないのかは俺にもさっぱり分からない。つか、検索した方が早いだろ。 >>412
要は、ある程度普及した略語は略語として扱おう、ぐらいに思っといたら良いと思うよ。
iって変数はだいたいループカウンタだなあ、ぐらい。 ふと思ったんですが、非同期関数の中から投げられた例外ってどうなるんでしょうか?
処理がtryブロックをとっくに抜けたタイミングで
コールバック関数の中から投げられた例外って、catchできないですよね・・? try {
setTimeout(()=>{
throw '!';
},1000);
}catch(e){
console.log('cought:'+e);
}
console.log('tryの外');
とやったら、やはりcatch出来ませんでした
catchする方法はないのでしょうか?
そもそも例外と非同期処理の間に相容れないものがある気がします
処理が失敗した時、
その失敗にどう対応するかは後で考えようという場合に、とりあえず例外を投げるようにしておく、
という方針がありますが
それが使えないということですよね? >>421
setTimeoutはどのオブジェクトに生えてるメソッドだと思う?
そうwindow。いつもは省略しているがwindow.setTimeoutが
正式なメソッド名
だからwindow自身にエラーをキャッチする方法がある
それが何かは俺の次のやつに書かせようw あと非同期処理にはpromiseを使う
promiseにはcatchする方法がある >>420-421
オライリーの「初めてのJavaScript 第3版」に書いてあるけど、
例外処理は、コールバック関数の内外とか、
コンテキストが異なるものには、対応できない
co, Koa のジェネレータ・ランナーを使えば、
例外処理を、同期的に書ける >>421
throwする代わりにreject()すれば取り合えずcatch出来る
https://jsfiddle.net/bvL9qwmn/ >>428
え? 何に対して理由を書いてほしいの?
書くけど? >>429
彼(>>424)がレスした相手を確認してみたら¿ >>430
確認してもわからないから、どれに対する理由がほしいのかって聞いてるんだが?
言えないなら、それまでってことでいいよ つまり、
韓国人死ね
だろ。つかマジで、最低限の会話が成立しないと無理だろ。 ご回答ありがとうございます
知らない言葉も出てきて、すぐには消化できないのでゆっくり見ていきます
ありがとうございました ■ このスレッドは過去ログ倉庫に格納されています