X



+ JavaScript の質問用スレッド vol.126 +

■ このスレッドは過去ログ倉庫に格納されています
2018/06/02(土) 14:31:23.04ID:B1JKBGEy
JavaScript を自ら学ぶ人のための質問スレッドです。

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。


前スレ
+ JavaScript の質問用スレッド vol.125 +
https://mevius.5ch.net/test/read.cgi/tech/1518940081/

(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)
2018/10/27(土) 23:01:58.85ID:8fc2vBvs
>>205
そう思うのは自由だが、実際に関数型()の連中はかなり宗教だぞ。
そして関数型()が成果を出せなかったのも事実だろ。

俺はforにこだわっているのではなく、単に見た目そのままの書き方にするだけ。
つまり、これまでの話なら、以下だね。

> var tmp=a;a=b;b=tmp;
> var o = {n1: 1, n2: 2, n3: 3, n4: 4, n5: 5};
当然、ループ回したいだけならforで回す。

無理にreduce使う意味はないんだよ。reduce使ってる俺カッケーがしたいだけ。
それもしたければすればいいのだけど、問題は、
オブジェクト指向的には「1ヶ所に集める」ことが必要なのだが、連中は、それを理解しておらず、
「1行で書ける!」と言ってそれをコード全体に散りばめてしまうこと。
それは仮に1行で書けたとしても関数として切り出さないと不味いんだよ。
(だからそれが仮に一時変数を使って3-5行必要だとしても、関係なくなる)
「長くなるから関数に切り出す」で、短いのだからそこに書いてしまえ、になってしまっている。
これは明確な間違いだ。
ここら辺は長期的メンテナンスをすれば分かるはずなのだが、
話が通じないところを見ると、彼等にはその経験がないんだよ。君もね。

まあいい、とにかく何でもいいから長期的にメンテナンスしてみろ。色々分かるから。

reduceはそもそも筋が悪いんだ。
配列を縮退させるメソッドなのだが、そもそも縮退させるような物は最初から配列にしない。
だから一時配列で便利に初期化、みたいな例ばかりな訳でさ。
なんであんな糞使えないメソッドが導入されたのかが俺には謎だ。
2018/10/28(日) 00:03:50.77ID:iGBoWmbY
>>206
やっぱ藁人形w
誰も一行で書けるからreduceがいいなどとは言ってない。
ましてや関数型至上主義者ならなおさらそのようなことは言わないだろう。

> なんであんな糞使えないメソッドが導入されたのかが俺には謎だ。

つまり、「俺に分からないreduceなんてみんなも使うべきじゃないんだ!」
ガキか。
2018/10/28(日) 00:56:43.71ID:0+vzkOx8
>>207
それならそれでいい。
俺はお前の書き込み全部デタラメだと思ってるぞ。
2018/10/28(日) 01:27:41.86ID:iGBoWmbY
図星突いてなんかすまんなw
2018/10/28(日) 01:42:20.06ID:0+vzkOx8
>>209
だから、まず、
> 俺に分からないreduceなんてみんなも使うべきじゃないんだ!
が間違いなんだよ。

君にとって reduce が難しいからそう思えるのだろうけど、
実際、reduceが分からない奴なんて居ない。使いどころがないだけだ。
>>196も無理矢理でしかない。
indexOf等と比べてゴミなのは事実だろ。

というか、JavaScriptのスレには前からreduceが大好きな奴がいるが、
ここまで来るとjQuery廚と同じく布教目的か?
なら筋が悪いから無理だ。
2018/10/28(日) 02:58:24.46ID:86INTnoC
> 君にとって reduce が難しいからそう思えるのだろうけど、

自己紹介乙w

> reduceが分からない奴なんて居ない。使いどころがないだけだ。

はいはい。じゃ更新しといてやるよ。
「ボクが使いどころが分からないreduceなんて、みんなも使うべきじゃないんだ!」
ガキか。
使いどころで使ってんだよ。テメーが分からないからって強制してくんじゃねーぞクズ。
2018/10/28(日) 03:25:23.25ID:PnJQ4LJT
>>190でも似たようなことを書いたが
コード側の問題 と 人間側の問題をはっきり区別つけろ

reduceがわからないっていうのは人間側の問題だ
コードの問題じゃない
2018/10/28(日) 08:10:05.59ID:0+vzkOx8
>>211
だから、何度も言っているが、
× 使いどころが分からない
○ 使いどころがない
なんだよ。

結局、>>196も、『一時的に』配列として持たせてreduceしただけだろ。
最初からいきなり縮退させれば済むだけの話。

reduceは『配列として意味がある』(≒配列として『持つしかない』)物を縮退させるメソッドであって、
そもそもそのケースがJavaScriptの用途においてはほぼ無いんだよ。
そして他言語でもこのメソッド持ってないだろ。大して使えないからだよ。


>>212
俺の立場をはっきりさせた方がいいのか?なら、そちらと同じで、
・reduceを使ってもコードメトリクス的な「複雑度」については上がらない。(これが原因で『長期的に』読めなくなることはない)
・reduceは難しくはない。(これが原因で『短期的に』読めなくなることもない)
・使っているコードに遭遇しないのは、そもそも使いどころがないから。
>>196はイキった馬鹿が無理に使う例だが、まあ、やりたければやればいい。大局的な問題にはならない。
2018/10/28(日) 10:30:34.50ID:PnJQ4LJT
> ○ 使いどころがない

使い所はあるだろう?

いや、開発効率とか考えずに、可能不可能だけの話をしたいなら
アセンブラでもできるから高級言語の使い所はないって話になるけど
2018/10/28(日) 10:31:32.69ID:PnJQ4LJT
> ・reduceを使ってもコードメトリクス的な「複雑度」については上がらない。(これが原因で『長期的に』読めなくなることはない)

条件分岐、ループが減るので、reduceを使うと複雑度は下がる

当然のことながら僕新人なんですみたいな
人間の問題の話はしない
2018/10/28(日) 10:34:55.05ID:PnJQ4LJT
reduceは初期状態があって、データの数だけ
状態を変更していくというパターンにすべて使える

例えば、初期状態が0で、配列の数値を加算していくとか
もちろん加算だけじゃなくて任意の計算ができるし
初期状態も数値ではなくて配列などでも良い
2018/10/28(日) 10:41:06.94ID:3WoixC+I
reduceの問題は、reduceをしたくてreduceを使うのではなく
reduceを使って何かをする、というところにあると思う

後から又は他人がコードを読んだときに
何をしているのか、何のためにreduceを使用しているのかを
一旦考えないといけない

利便性はあると思うが
やりたいことそのものズバリを表している名前や動作ではない
というところが難点なのではなかろうか
2018/10/28(日) 10:45:25.52ID:PnJQ4LJT
> 何をしているのか、何のためにreduceを使用しているのかを
> 一旦考えないといけない

forでも同じ。なんのためにループしているのか
一旦考えてる
2018/10/28(日) 10:48:16.01ID:PnJQ4LJT
reduceの場合(人間に問題がない場合)
その名前から「初期値になにかの計算を計上していってる」ってことまで
単語一つで分る

同じことをforでやろうとすると、forは繰り返しているだけ(何をしたいの?)
変数を見つける。その変数になにかの処理を行って、同じ変数に入れている
ここまでコードを読んで、あぁreduce相当の事をやっているんですねとわかる

reduceという単語一つでわかるのと、
コードを読んでいかないとわからない
この違いがある
220デフォルトの名無しさん
垢版 |
2018/10/28(日) 12:50:26.40ID:txWR8pSk
クロームで見たとき5chで書き込むボタンを押したとき
ボタンを押す処理をする前に自分の考えた処理を付け加えたい場合
どのようなコードを書けばよろしいでしょうか?
もしよろしければ教えてくださいませ。
2018/10/28(日) 13:22:50.15ID:0+vzkOx8
>>217
同意だ。

>>216その他
言いたいことは分かるが、forの代わりにreduceを用いたところで大差ない。
reduceの場合も中身(関数)を読まなくてはならず、
そこが単純な関数なら、forで書いても単純だからだ。


結局は、
> reduceは初期状態があって、データの数だけ
> 状態を変更していくというパターンにすべて使える(216)
この汎用性を取った為、
> やりたいことそのものズバリを表している名前や動作ではない(217)
この問題が発生した、ということだ。

数値計算では average/sum/max/min 等のメソッドがarrayに欲しくなるが、
これらは reduce を用いて作れる。
ただ、これらを上位で reduce を用いて書くのは間違いで、
ラップしたメソッド array.average()等を使うべきだ。
だから直接使うのではなく、下位メソッドとして用意した、というのなら分かる。
問題は、JavaScriptで数値計算をすることはないので、この手の中位メソッドが思いつけないことと、
中位メソッド average() として分離した場合、中身がreduceでもforでもどうでもよくなることだ。
これらは所詮数行の関数であり、どっちでも大差ない。
よって、数値計算をする場合にも reduce 自体はあっても現実的にはほとんど意味がない。
そこでしか使わない特殊な縮退を書くときに便利、という程度だ。

reduceを使ってる俺カッケー馬鹿の問題は、reduceを使う為に、
average()を呼ぶべき所をreduceを使ってaverageを取ったりしてしまうことだ。
結果、余計に読むコードが増え、重複したコードが分散してしまう。
これはコードを書く側の問題だが、実際、この問題の方が大きいと思う。
2018/10/28(日) 13:28:18.39ID:0+vzkOx8
>>220
onsubmit で間に合わなければ mousedown か mouseover とかで
2018/10/28(日) 13:35:44.53ID:86INTnoC
>>213
> 結局、>>196も、『一時的に』配列として持たせてreduceしただけだろ。
> 最初からいきなり縮退させれば済むだけの話。
>
> reduceは『配列として意味がある』(≒配列として『持つしかない』)物を縮退させるメソッドであって、
> そもそもそのケースがJavaScriptの用途においてはほぼ無いんだよ。

君が遭遇したことがないだけの話だなw
「ボクが出会ったことないユースケースなんだから、みんなも遭遇したこと無いに決まってるんだ!」
経験不足だよ。

反例として、フィルターの種類、数、適用順を自由にユーザーに選ばせ画像に適用するクライアント側のコード書いたことあるがw
2018/10/28(日) 13:48:12.72ID:0+vzkOx8
>>223
URLくれれば見に行くが。
無理なら、reduceをどう使ったか分かるように言え。

つってもまあ、そのケースなら、関数を配列に入れてreduceしただけか?
なら>>196と同じだと思うが。
2018/10/28(日) 14:37:14.50ID:oeyLhtKk
reduce禁止くん、「reduceは『配列として意味がある』物を縮退させるメソッドであって、そのケースがJavaScriptの用途においてはほぼ無い」って言ってるけど、これわざわざ配列使わずにやるの?w
フィルターの順番変えたり途中位置に追加したり削除したりクソめんどくさそうw
reduce禁止くんについてく人は配列も禁止だそうだけど頑張ってねw
でもJavaScriptの用途においてそんなケースほぼ無いそうだから大丈夫だよね!w
2018/10/28(日) 14:54:16.69ID:0+vzkOx8
>>225
俺は禁止とは一言も言ってないぞ。
使い道がないから使わない、と言ってるだけ。
2018/10/28(日) 15:17:49.97ID:WORMx28e
>>220-222
「jquery event」「jquery preventdefault vs stoppropagation」で検索!

click は、要素をクリックする。
submit は、フォーム送信する

preventdefault は、イベントの既定の動作を、キャンセルする。
stoppropagation は、イベントの伝播を止める

JavaScript, jQuery の質問は、この板ではなく、web制作管理板へ書き込んで!
2018/10/28(日) 15:33:47.14ID:m8lElpnG
一番新しいプロジェクトでreduce何かに使ってたかなと思ったら
一つは空配列に必要なら追加していく形、
要は例えばmapだと同じ数の要素の配列しか返せないからその代わりにreduceを使っていたのと
もう一つは空オブジェクトを取って文字列の配列からオブジェクトにシンボルプロパティを生やしていく
っていうのに使ってた
2018/10/28(日) 16:11:54.33ID:0+vzkOx8
>>228
前者は filter + map でやるべきだ。
後者は >>191と同じだな。
意味的にはコンストラクタなのだから、関数として切り出すことに問題はないし、それで終わりだ。
2018/10/28(日) 17:30:33.07ID:m8lElpnG
filter+mapの方が良いとも限らないと思うよ
例えばAの場合はvalue.a、Bの場合はvalue.b、Cの場合はvalue.c、そうでなければ追加しないとすると
まずfilterで、AかBかCかというチェックを書いて
またmapでも篩分けしないといけないもの
reduceだといっぺんで済むでしょ
それと何箇所も使わないものをわざわざ関数に切り出しても何にも変わらないよ
2018/10/28(日) 17:35:32.63ID:m8lElpnG
あとはDの場合はvalue.d1とvalued2の両方を追加するとかもできるね
というかそもそもfilter+mapの方が良かったら最初からそう書いてると思うけど
2018/10/28(日) 18:54:29.84ID:0+vzkOx8
>>230-231
reduceが効果的に使われているというのならそのURLを紹介してくれ。
2018/10/28(日) 19:08:09.06ID:XoYPKH7l
>>221
> reduceの場合も中身(関数)を読まなくてはならず、
> そこが単純な関数なら、forで書いても単純だからだ。

reduceはコードを読まなくても、初期状態から状態を変えていってるっていうのがわかる
forはただのループでしかなので、それがわからない

理解できた?
234デフォルトの名無しさん
垢版 |
2018/10/30(火) 23:54:50.26ID:3PWXbmS6
java
235デフォルトの名無しさん
垢版 |
2018/10/31(水) 00:48:19.13ID:6MB62ZHP
ttp://black-flag.net/jquery/20131119-4881.html

このもっと見るボタンを押した時にだけ.jsonを読み込むサンプルなんだけど
.json形式で外部ファイル読み込むようにするんじゃなく本体のhtmlに組み込むにはどうやんの
2018/10/31(水) 01:09:10.31ID:f1tmQgGe
ググレカス
2018/10/31(水) 02:59:19.61ID:QZT9zuHU
このページには、やり方が書いてないだろ。
要素の挿入かな?

$("#parent").append("<p>あいう:<b>abc</b></p>");

jQuery などの質問は、この板よりも、web制作管理板へ書き込んで!
2018/10/31(水) 15:10:14.27ID:PW3C3AfV
>>237
よく分からん
申し訳ないけどそのままコピーして使えるように記述して
239237
垢版 |
2018/11/01(木) 00:45:15.87ID:PBz6MbCm
jQuery も知らんの?
$( ) は、jQuery関数

#parent の# は、id を表す。
<div id="parent"></div>

HTML, CSS, JavaScript, jQueryの、初心者用の本でも読んで、勉強して
2018/11/01(木) 03:20:19.15ID:1A1KjHiV
jQuery は読まなくていいよ
241デフォルトの名無しさん
垢版 |
2018/11/01(木) 08:31:05.31ID:gbrxGQSq
Electornってブラウザで動くのにnode.jsなんですか?
初心者すぎてその辺よくわからん
2018/11/01(木) 08:52:13.83ID:+p1vRE32
いいえV8です
2018/11/01(木) 09:04:59.81ID:PBz6MbCm
node.js は、普通のプログラム言語と同じで、ローカルPC のファイルにアクセスできる。
だから、node.js を使っているElectron は、VSCode を作った

VSCodeは、普通のIDE と同じ。
ただ、JavaScript で作られただけ
244デフォルトの名無しさん
垢版 |
2018/11/01(木) 13:23:12.38ID:7uO+0a7Q
じゃあnodeはローカルにもブラウザにもアクセスできるってこと?
2018/11/01(木) 20:22:01.79ID:PBz6MbCm
VSCode は、Electron で作られている普通のIDE。
ローカルPC のファイルにアクセスできる

Electron は、node.js + ブラウザのChromium。
画面は、HTML, CSS, JavaScript で作って、ブラウザで表示している

ほとんどの言語の開発で、VSCode を使う

漏れは、Ruby から、Selenium WebDriver を使って、ブラウザを自動操作している

Rubyで、ローカルPCの画像ファイルにアクセスして、
HTML, CSS, JavaScript で画面を作って、画像をブラウザで表示している

言語が異なっても、基本的な仕組みは同じ
2018/11/02(金) 12:33:09.51ID:cO1fXqzs
ブラウザの拡張機能やアプリと同じだよ
普通のUIはChromiumで普通のWebページ側のメインプロセス、
それとNodeのバックグラウンドプロセスが通信でやり取りする形
ただその通信が幾らか隠蔽されてるのでメインプロセスからでも特権的なAPIが自然と使える
247デフォルトの名無しさん
垢版 |
2018/11/04(日) 21:51:54.73ID:OZGwMP5b
7..toString(2)の..って何ですか?
2018/11/04(日) 22:10:06.82ID:8k2w1dNt
>>247
小数点とプロパティアクセサ
2018/11/04(日) 22:22:36.06ID:eCImE5iu
>>248
なるほど
7.toString()だと
SyntaxError: identifier starts immediately after numeric literal
7が数字から始まる不正な変数名だと認識されるという理解でよろしいか?
2018/11/04(日) 22:32:31.49ID:Yqdp3OyY
中学英語も出来ないのかよ…
識別子が数値リテラルの直後から始まってます
2018/11/04(日) 22:34:19.63ID:Yqdp3OyY
7は数値リテラルと認識されてるんで変数名と認識されてるわけではない
2018/11/04(日) 22:35:32.03ID:omq6KmHr
>>247
そんなのは無視でいい。

初心者はそういうところばかりに目が行くようだが、上達を妨げるだけ。
そんな書き方する馬鹿なんていない。
2018/11/04(日) 22:44:48.73ID:Nn4ZdlZB
>>250
identifierは中学で習う英単語には出てこないが?
http://www.eigo-duke.com/tango/tangoindex.html
高2でようやくidentifyがでてくる

immediatelyは高1。numericもliteralも高校でも出てこない
2018/11/04(日) 22:47:52.87ID:ILD/0n4M
7..toString(2)
(7.).toString(2)
(7.0).toString(2)

どれでも文字列の、'111' と表示される

(7.0)
(7.)
7.

どれでも数値型の、7 と表示される
2018/11/04(日) 23:00:03.48ID:Nn4ZdlZB
な、なな、なんと!?
2018/11/05(月) 06:30:57.02ID:Q73fn8MU
7.0toString()
とできないように
7.toString()
とできないということ
257デフォルトの名無しさん
垢版 |
2018/11/05(月) 11:56:57.88ID:R68h5DCa
name="form1" の form を参照するのに document.form1 って書き方があるけど、これがうまくいかないケースがあったので理由が知りたい。
自分のページは mydomain にあり、外のドメイン extdomain のJSライブラリを使ってる。
そのJSライブラリはAJAXを使って extdomain の中で処理を行ない、完了後にコールバックしてくれる。
mydomain のページ中 form1 が submit されるイベントでこんな感じでライブラリを呼び出し、コールバックまで処理が来てる。

function smtForm1()
{
:
外部ライブラリ(smtForm1Callback);
return false;
}

function smtForm1Callback()
{
var f = document.form1;
:
}

このコールバックの中で form1 を参照したいんだけど、上記のコードだと f は undefined になる。
form1 に id="form1" も加えて document.getEementById("form1") とやると参照できたものの、document.form1 じゃダメな理由が分からない。
実は同じコードが同じ外部ライブラリ使って同じブラウザで動く環境もあるから、サーバのセキュリティがらみの設定の問題のような気がしながらもよく分からずにいる。
原因とかチェックポイントとかアドバイスください。
2018/11/05(月) 12:10:08.11ID:9r10P92V
呼び出し元はどう本体呼び出してんの?
スタックトレース見てみたら?
2018/11/05(月) 13:12:30.96ID:A6aiMvMs
もしかして
document.forms.form1
2018/11/05(月) 22:57:46.85ID:i/g7f+lV
「js document」で検索!

Document
https://developer.mozilla.org/ja/docs/Web/API/document

document は、DOM ツリー のエントリーポイント。
document.write などが有名

自作のフォーム名などが、document のメソッド名になる事はない。
document のメソッド名は、あらかじめ決まっているから
261257
垢版 |
2018/11/05(月) 23:16:36.71ID:R68h5DCa
>>258
どうやら外部ライブラリは body の中に scriptタグを作り出し、そこでロードされるスクリプトにコールバックを呼び出すだけのコードが書かれてるらしい。
だからグローバルスコープからのコールバック呼び出しかな。
この scriptタグの生成によって document の再構築でも起こって、まだ form1 が取り込まれてない状態になってるとかかな?

>>259
いや、普通は document.form1 で参照できてる。

>>260
メソッドじゃなくプロパティじゃないかな。
document 直下にフォームの name のプロパティが出来上がる。
という動作はブラウザでJavaScriptが盛り込まれた頃からの仕様だと思ってたけど、非推薦かなんかになってたりする?
2018/11/06(火) 01:27:51.27ID:bRR/Nar/
>>261
仕様ならMDNなり仕様書なりに載ってるはずだから、とりあえず探してみれば?

それ以前にまともな奴ならそんな物使わないが。
nameは重複許可だから、それは仕様バグであり、使い物にならない。
仮に仕様であったとしても、削除/変更されるのは時間の問題だ。地雷臭が酷すぎる。
お前も含めてJavaScripterは全員馬鹿だからここら辺を理解出来ないようだけど。
2018/11/06(火) 07:04:44.97ID:A8Uqo2gA
nameが何にためにあるのかを知っていれば
重複可なのが当たり前でそのformを1つだけ参照するものがあっても
常識の範囲で有意義に使えることが分かる
まあ馬鹿にはわからないだろうが
2018/11/06(火) 09:04:41.69ID:9jHKU1L0
同じ名前の人が二人いるとかおかしいじゃないですか
2018/11/06(火) 09:46:57.23ID:bRR/Nar/
>>263
唯一性をユーザー側で保証出来るのならid使え、ってことになってるだろ。

旧API(のつもり?)を使用し続けるのなら、それが今どういう状況になっているのか、自分で把握しておく必要がある。
そんな質問している時点でアウトでしょ。
とりあえず仕様書やMDNを漁って、「今でも使えるものか」確認しないと駄目だと思うよ。
ただそれ以前に、それが仕様であったとしても、動かないんなら意味無いけど。
(お前が「仕様だ!俺は悪くない!」とごねたところでコードが動くようにはならない)

大体、document.forms.xxx ならさておき、ドキュメント直下 document.xxx は不味いとすぐ分かるだろ。
それが仕様であったなら、早々に非推奨になって削除されるべきだし、実際多分そうなんだろ。
仕様がどんどん改訂されるプラットフォームなのだから、良くも悪くもトレンドに沿ってないと駄目なんだよ。
それだって、idで参照するようにしていれば、最初からそんな疑問すらわかないわけでさ。
仕様だから使える!と思ってる時点で馬鹿確定なんだよ。

お前も含めて、JavaSripterはコードを書き捨てばかりしているから、大局観が全く育ってない。
動かないから書き直す、ではなく、
何故書き直す羽目になったのか、どう書いていれば書き直さずに済んだのか、それを考える癖を付けた方がいい。
繰り返すが、それ、id/classで参照する今風のコードなら、問題すら発生しなかったわけでしょ。
お前ら、マッチポンプをしていることにすら気づいてないだろ。
266デフォルトの名無しさん
垢版 |
2018/11/06(火) 09:47:16.32ID:WbDKfplt
>>257
これかな
https://stackoverflow.com/questions/7436277/document-formname-is-undefined/14804179#14804179
267257
垢版 |
2018/11/06(火) 10:49:05.82ID:2Hp5KyS3
>>266
英語読みきれてなかったらスマンだけど、それはアプリケーションサーバの設定の問題でローカル開発環境では form の name が出力されてなかったってことかな?
であればちょっと違うかも。

>>265
言わんとしてることはよく分かるよ。
でもそういう話じゃなく、同じコードが動いたり動かなかったりするからなんでって聞いてるの。
どうやってもその書き方じゃ動かないという話なら、機能として削除されたんだろうとも思うわけ。
>>257 の例だと、コールバックじゃないところでの例えば smtForm1内での document.form1 は問題無いし、それどころか同じものを別サーバへ設置するとコールバックの中でも動いたりする。
同じブラウザで。サーバはどっちも同じ apache で。ブラウザに渡ってる HTML も全く同一で。
しかしブラウザ依存でもないようで、動かない時はどのブラウザでも同じように動かない。
だからクロスドメイン周りの設定に差があるのかとサーバからの HTTPヘッダを比較してもこれと言った差も無いようで、よくわからんって話さ。
ただこのページに仕込んである他のJSの挙動が置くサーバによって違ってるのかもしれない。ページが安定した後の document に影響があるようなことは無いだろうと思って言わなくて悪かったけど。
ちなみに他のJSってアクセス解析の類い。
んじゃそれ外して試せばいいじゃんとなるだろうけど、いつか確かめるけど事情により今すぐは難しい。

といった感じで実用面では他のより良い手段でやればいいことなので問題があるわけじゃないんだけど、理由は知っておきたいという話。
どこでハマるか分からんし。
2018/11/06(火) 11:11:11.71ID:9jHKU1L0
> どこでハマるか分からんし。

だからみんなjQuery使うんだよ
2018/11/06(火) 11:21:39.49ID:4sD8op2P
もう誰もjQueryなんて使ってない
2018/11/06(火) 11:53:23.90ID:bRR/Nar/
>>267
> 同じコードが動いたり動かなかったりするからなんでって聞いてるの
それはそうだから、でしかないだろ。

まず、今現在「仕様」かどうか確認しろよ。
それで「仕様」でないのなら、それは偶々動いていただけであって、それだけでしかない。
ブラウザは大幅に更新されてる。
元々それを動かすコードをブラウザが持っていたとして、
仕様から外れた時点でそれをどこで落とすかはブラウザ開発者の自由だし、
結果的に一部残っていて動いたり動かなかったりするのも問題なしだ。
そしてそうなってるだけだろ。

「仕様」でなければ何の不思議もないし、「仕様」であればバグ報告すればいいだけだろ。

そしてその範囲を知る意味もない。
ありがちなパターンとしては、「古いコードもある程度までは動くようにする」為に、
初期構築(最初の構築)だけはそのコードを通し(つまり旧来方法でのアクセスも可能)、
追加で動的構築したDOMについては追跡してない(つまり旧来方法でのアクセスは不可能)といったところか。
ただこれを知ったところで、いつ変更されるかも分からんし、意味無いだろ。

> どこでハマるか分からんし。
「仕様」かどうかはさておき、「みんな」が「今」使ってない方法を使ったら駄目、ってことでしかないだろ。
そういったコードは、必要に応じて書き換えて「今」のトレンドに乗るようにするか、
jQueryみたいに「バージョン○○では…」と自前で管理しきるしかない。
どっちもする気がないのなら、それはお前の問題だ。

初心者にありがちな、全て「仕様」で確定している、という勘違いなら、頭を切り換えた方がいい。
厳密に仕様準拠なら、「必ずundefinedが返る」のが正しいが、
JavaScript界隈はそういう厳密さより、上記のように旧来コードも動くような曖昧さを残した方が好まれる。
結果、今の君のように、「ある日突然コードが動かなくなって???、環境依存???」な事も発生し、
それが長期的に生産性を下げる要因になっているのも事実だが。
2018/11/06(火) 12:09:12.29ID:5TKL1Nze
>>267
> でもそういう話じゃなく、同じコードが動いたり動かなかったりするからなんでって聞いてるの。
グローバル変数に関する規定はあるが、documentは分からん
納得できるまで、自分で調べてくれ
https://momdo.github.io/html/window-object.html#named-access-on-the-window-object
https://momdo.github.io/html/dom.html#the-document-object

あと、それを使うと決めたあなたの判断基準が分からん
2018/11/06(火) 13:49:56.96ID:9jHKU1L0
>>269
> もう誰もjQueryなんて使ってない
いちいち嘘つくなよ。どうせ俺がバラすんだから逆効果にしかならんぞw

https://w3techs.com/technologies/overview/javascript_library/all

w3techsによると2017年1月の時点で71.9%のサイトがJavaScriptのライブラリとして
jQueryを使用していることが判明し、それ以降もシェアの増加が続いていたが、
2018年4月〜2018年10月の約半年間で変化が見られず、ようやく73.3%〜73.4%で
増加が停止したようである。

しかしながら、減少の傾向は見られず、マーケットシェア(JavaScriptを使用しているサイトでの使用率)
https://w3techs.com/technologies/history_overview/javascript_library は97.2%を
示していることから、jQueryからの移行が始まったと言うより、上げ止まりであると考えられる

jQuery以外では、この1年でBootstrapが2%程度、Underscoreが1%程度増加している以外は
ほとんど変動はなく、期待されていたAngularは過去最高の0.5%から0.1%減少した0.4%に、
Reactは過去最高の0.6%から0.5%と大きく減少し、0.1%に下がっていることが判明した。

またいずれのライブラリも使用していないサイトは24.5%で
2017年まで減り続けていたがこの一年ではほとんど変化はない。

この状況が大きく変化するときは来るのだろうか?この先の動向が注目される
2018/11/06(火) 14:36:25.99ID:Fd8yf0Li
前線の開発者が新規にwebアプリ作る時はもう使わんというだけで
全体から見たらそんなのごくごく希少さね
2018/11/06(火) 14:42:55.62ID:9jHKU1L0
Angularが減ったのはまだ誤差の範囲内だと思うけど
Reactがこんなに減ったのはなんでだろうな
2018/11/06(火) 14:44:59.13ID:4sD8op2P
保守ではjQueryあるけど新規は全くない
俺なところはほぼAngular
最近はJAVA有料化の流れのおかげでnodejsも上げてきてる
2018/11/06(火) 14:56:30.64ID:9jHKU1L0
そもそも新規の仕事ってのがないってだけなので、
jQueryがまったくないという言い方はおかしい

同様にAngularやReactを使うこともないんだから
新規の仕事が無いのでね

たいていは過去やったことの続きか、
別の客に同じようなものを提供するので
そこで使われてるjQueryがそのまま使われる
2018/11/06(火) 20:15:00.55ID:ObpCKggA
>>264
全国の鈴木一郎に謝れ!
2018/11/06(火) 20:34:37.04ID:A8Uqo2gA
ここまで探せば1分で見つかる仕様提示 無し
https://html.spec.whatwg.org/multipage/dom.html#dom-document-nameditem
2018/11/06(火) 22:25:14.22ID:8rUvp8iU
>>278
「3.1.3 DOM tree accessors」の中だったか
参考までに、どうやって検索した?
2018/11/06(火) 22:53:30.78ID:9jHKU1L0
とりあえずバグなんで、ブラウザの対応待ちですわ
客にも、ブラウザが悪いんで、直るまで待ってくださいって言った

なぜか逆ギレされたけど
2018/11/06(火) 23:01:46.77ID:bRR/Nar/
>>280
自演か?
それを257が言うのはともかく、お前が言うのはおかしいだろ。
2018/11/06(火) 23:08:25.32ID:9jHKU1L0
自演ではないね。
そういう事がありましたってことだよ
起こったことはちゃんと書かないとw
2018/11/06(火) 23:13:35.68ID:bRR/Nar/
>>282
まず立場をはっきりさせろよ。
まあお前のレスを見る限り、正直、257のケース以外のところで怒らせてると思うけどね。
2018/11/06(火) 23:29:44.69ID:9jHKU1L0
>>283
俺の立場は「誰が書いたか?」ではなくて「書いてある内容」しかみない
だから俺にも立場を求めるな。
2018/11/06(火) 23:44:03.25ID:bRR/Nar/
>>284
やはり通じてねえw
そこがお前の駄目なところで、客もそれに怒ったんだと思うぜ。
まあ、完全に空回りだからもういいが。
2018/11/07(水) 00:45:22.01ID:UCphLCxy
>>285
流行り通じてねぇw


 とりあえずバグなんで、ブラウザの対応待ちですわ
 客にも、ブラウザが悪いんで、直るまで待ってくださいって言った
 
 なぜか逆ギレされたけど


ということが、起こったんですよ。彼の現場ではね!
って話だろうがw
2018/11/07(水) 00:45:39.54ID:UCphLCxy
× 流行り通じてねぇw
○ はやり通じてねぇw
288デフォルトの名無しさん
垢版 |
2018/11/07(水) 05:11:53.04ID:tcZfPZ7D
+new Date()の+って何ですか?
2018/11/07(水) 06:48:51.19ID:2P8ub5kW
>>280
ブラウザはOSやグラフィックドライバなどのバグにきちんと対処してるぞ
2018/11/07(水) 06:50:32.64ID:2P8ub5kW
>>288
+-のプラス 単項演算子
2018/11/07(水) 07:32:08.33ID:+978RLDn
>>267
>別サーバへ設置するとコールバックの中でも動いたりする
実行環境が異なると、使っているライブラリも変わる

それと一般的には、動いたり動かなかったりするのは、非同期処理を勘違いしているとか。
promise とかで、ちゃんと解決してない

処理A, B の順番では動くけど、B, A の順番では動かないとか

1回目は、ファイルの読み込みに時間が掛かるから、エラーになっても、
2回目は、キャッシュから読み込むから、エラーにならないとか

ちゃんと非同期処理をやっていないのに、タイミング次第で動いているアプリは多い。
その特徴はエラーになったり、動いたりすること

ログを見れば、わかる
2018/11/07(水) 07:44:13.90ID:Ahw1ICjC
>>286
> 客にも、ブラウザが悪いんで、直るまで待ってくださいって言った
「言った」の主語が>>280に読める、と>>281は言ってる

>>287
> ○ はやり通じてねぇw
日本語頑張れ
2018/11/07(水) 09:25:05.22ID:avMw4Nf2
>>291
概ね同意だ。

善し悪しはさておき、WHATWGにあるのなら、今現在も仕様としてブラウザ開発者側に認識されているだろう。
なら、既に実装されて十分動いていたコードが意図的に落とされることはない。となると、

1. そもそも257のコードに問題があって、それが何らかの理由で顕在化しただけ
2. 元々ブラウザにバグがあって、それが検出されずにずっと残っていただけ
3. ブラウザのコードの更新時に、レグレッションテストに引っかからずバグを挿入してしまっただけ

のどれかだが、可能性が一番高いのは 1. だね。
俺自身はブラウザなんてバグだらけで全く信用ならないプラットフォームだと認識しているから、
こなれてない書き方は出来るだけしないようにしている。
そこではまっても本当に時間の無駄でしかないから。
だからそんなコードはさっさと書き直せ、という立場だ。

ただ、ブラウザのバグだという立場なら、バグ報告をするにしてもコードを切り分けていかないといけないし、
仮に 1. なら、idで書き直しても動かないケースが発生するはずだから、
どのみちそのコードに関しては詳細検討が必要になってしまったね。まあ頑張れ。
ある意味、「仕様外」だったほうが楽だったのではないかな?
もっとも、バグ報告したとしても、直すのも開発者側の自由だから、このまま放置される可能性もあるが。

JavaScripterは全般的にそうだが、最近の初心者は、仕様の隅を使いたがる傾向がある。
仕様を隅々まで知って、それを『使い切る』事がいいことだ/上級テクニックだと勘違いしている。
そういうところでしか差別化出来ないから、そういう小手先テクニックに異常にこだわるわけだ。
ただ、それが仕様内でも、それを動かすのは人間が作ったソフトウェアであって、
そこにバグがある可能性があり、実際、ブラウザなんてバグだらけだ。
こなれてない書き方をするのなら、それなりの覚悟と能力が必要だって事だ。
勿論それをやるのも自由だけど。
(もっとも、257がこなれてないか、と言われれば、こなれているが古い書き方、かな?)
2018/11/07(水) 11:04:13.33ID:PR5Ic2pS
最近の初心者が仕様の隅まで知りたがる?w嘘つけwww
仕様の隅まで知りたがるのはCおじさんとか古い人たちだろ。あの年代はCの仕様を勘違いしてたことがバレようものなら翌日から同僚に蔑まれてえんがちょされるような世代。
最近の特にWeb系のやつらなんか、必要になったらググって出てきたコードコピペする世代じゃんwwwww
295257
垢版 |
2018/11/07(水) 11:27:49.74ID:9inYuNmK
いろいろありがとう。
>>267 で言ったアクセス解析のJS(これまた別のドメイン extdomain2 にある)を外したら動くようになった。
このJSはページロード初期に動いて終わりだと思ったら、タイマーで定期的に動き続けてるようだ。
ビーコン的に外と通信してるわけでもなさそうだから何やってるのかは分からないし、>>257 の smtFrom1 と smtForm1Callback の間でその JS の処理は割り込んでないようだけど、
少なくとも初期に DOM をいじってるようだからその影響なんだと思う。
それでも smtForm1 では document.form1 を参照できてるから、関数コール元の由来によって document が何通りか存在してるのかも、なんて思い当たった。
具体的に何が原因かを再現するミニマムなコードを見つけたいからもうちょっとやってみるけど、現状の詳細を伏せたままここで話を深められるほど単純なことでもなさそうだから、ちょっと引きこもります。
ありがとう。
2018/11/07(水) 12:50:29.23ID:avMw4Nf2
>>295
> 具体的に何が原因かを再現するミニマムなコードを見つけたいからもうちょっとやってみるけど
そのスタンスなら君は君なりに整合性が取れていると思うよ。まあ頑張れ。
言うなれば俺はそういうのから逃げてる。
俺は思うように動かしたいだけであって、
JavaScript自身や環境のデバッグをしたいわけではない、というスタンスだからだ。

> 関数コール元の由来によって document が何通りか存在してるのかも、なんて思い当たった。
知っているような気がするが、仕様上は document は複数存在しえる。
ただし、通常はそのようにコードが作られておらず、結果、まともに動かないから妥協されてる。
以下から辿れる。
> Node.ownerDocument 問題の詳細については W3C DOM FAQ を参照してください。
>
> Firefox では現在このルールを強制していません。
> Firefox 3 の開発中には強制していた時期もありましたが、
> このルールを強制すると多くのサイトが機能しなくなってしまうため取りやめになりました。
> 将来的な互換性を高めるため、Web 開発者にはこのルールに従ってコードを修正することを推奨します。
https://developer.mozilla.org/ja/docs/Web/API/Document/importNode

なにか、2-3年前にJavaScriptのスレ(ここだったかWeb板だったかは不明)で
同じようなことを言っていた奴が居たような気もしたが…。(あまり自信ない)

一応複数 document については、実装はされてるっぽい。
例えば、ChromeのDevTools(F12の奴)のTimelineでJSHeapの使用量グラフを出せるが、
そこに document が何個かのグラフも出る。
ただし俺にはあの document の数が何に一致するのかいまいち分からないが。
(具体的に外部documentを取り込むときに増えるのは分かるが、よく分からん時に増えるときもある)
2018/11/07(水) 12:52:09.02ID:lrycyXQF
仕様の隅とかカッコつけなくて良いから
ただ「俺はそんな仕様知らないし勉強する気もない」だけでしょ
自分の意見を表明するだけで良いところを
ひたすら他人を絡めようとする奴は程度が知れてる
2018/11/07(水) 12:55:39.20ID:oTVd6hn3
防衛機制の一種だろうな。
誰でも自分が無能と認めるわけにはいかないのさ。
2018/11/07(水) 13:32:20.41ID:avMw4Nf2
>>297-298
それが俺の自説を補強することにしかなってないことに気づけないのが、
お前らが馬鹿たる所以だよ。
マジでJavaScripterは馬鹿しかいない。これは断言出来る。
他言語と比べても相当酷い。
2018/11/07(水) 15:22:39.79ID:PR5Ic2pS
\__________________/
           V
           ___                _
       / ____ヽ           /  ̄   ̄ \
       |  | /, −、, -、l           /、          ヽ きみ頭だいじょうぶ?
       | _| -|○ | ○||         |・ |―-、       |
   , ―-、 (6  _ー つ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |     |
    | ̄ ̄|/ (_ ∪ ̄ / 、 \        \. ̄`  |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `− ´ |       | _|        /          |
2018/11/07(水) 18:00:52.56ID:avMw4Nf2
>>295
あと、実は、2.もあるかもね。
まともな奴(=バグ報告出来るレベルの奴)はそんな設計しないから、
バグ報告すら上がってきてない可能性もある。

1a. id
1b. document.forms[name]
1c. document[name]

でどれも動くとしても、まともな奴ならaかbだ。
「非推奨」なんて言われなくとも、推奨はaに決まっている。
そして、

2a. ノードそのものを渡す
2b. 名前を渡して、document[name]でアクセスしてもらう

ここもおかしいだろ。普通はaだ。
(決め打ち出来る状況だからだろうが、普通はその手の場合は決め打ちは無理だし)

おかしなコードが何故動かないか調査するのに精を出すよりも、
おかしなコードを修正する方に精を出す方が有意義だと思うが、まあこれは個人の自由だ。
ただ、俺は「仕様内」でもブラウザで動くかは信用ならんと実感しているから、
俺ならさっさと修正して終わりにするが。
(ブラウザのバグだとか言いだしたら長くcloseしない案件になってしまう。
ブラウザのバグ取りが目的ではないし)
2018/11/07(水) 19:49:33.17ID:qlBNSZgc
正直、>>278以外に参考になるレスがない
>>279は気になってるんだが、本人から回答は貰えそうにないか…
2018/11/07(水) 21:46:32.86ID:2P8ub5kW
>>302
まずDocumentクラスの仕様を見るでしょ?
https://html.spec.whatwg.org/multipage/dom.html#the-document-object
// DOM tree accessors の getter object (DOMString name); を見つけるでしょ
その説明を見て終わり
304デフォルトの名無しさん
垢版 |
2018/11/07(水) 22:16:45.82ID:+978RLDn
VSCode の拡張機能、ESLint には、package manager のyarn の、インストールが必要。
yarnには、node.js のインストールが必要

yarnは、npm でインストールしなかった。
Windows10 に直接インストールした

yarnは、数MB のJavaScript で作られているのか。
Ruby のBundler, npm の影響を受けている

where node
C:\Program Files\nodejs\node.exe

where yarn
C:\Program Files (x86)\Yarn\bin\yarn
C:\Program Files (x86)\Yarn\bin\yarn.cmd
C:\Program Files (x86)\Yarn\bin\yarn.js
2018/11/07(水) 22:29:07.63ID:/kHK9X1+
「Ruby」でNG登録するのがお手軽・簡単です。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況