探検


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

2023/12/09(土) 17:40:39.92ID:Mnb70srnr
!extend:checked:vvvvvv:1000:512
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。次スレは>>950が>>2の「次スレの立て方」を元に立ててください

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

■前スレ
JavaScript の質問用スレッド vol.125
https://mevius.5ch.net/test/read.cgi/tech/1659855460/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
279>>277の続編 グダグダな自問自答 (ワッチョイ 6faf-NH4A [2400:2200:438:4658:*])
垢版 |
2025/01/25(土) 04:32:37.95ID:TAq0uG+90
🥳なるぼど、もしかして、

for(let t=1000; t<=3000; t+=1000){
setTimeout(function() {
console.log(t/1000)}, t)
}
でどう❓

👤んー、恐らくは、机上では、
非同期の部分は、setTimeout内の
関数(コールバックの意)だけ、故に
それは、以下と等価

for(let t=1000; t<=3000; t+=1000){
}
setTimeout(function() {
console.log(t/1000)}, t)

然るに、机上ぢゃ、そこで
t は undefined故に動かない

🥳 でへへ、それがちゃんと
🤡 マジ❓
🥳 マジですよー❢ルンルン❢
👤 机上OKで実際はNGはよくあるが
  机上NGで実際はOKは有りえ無い
🥳 それは、机上した👤は、
  🐴🦌 かつ、
  ポクは、超天才の証明なのだァァァ
👤 ・・・
280>>277 の続編の続編 (ワッチョイ 6faf-NH4A [2400:2200:438:4658:*])
垢版 |
2025/01/25(土) 08:48:00.93ID:TAq0uG+90
👤ま、setTimeoutは使用はヨロシイぞ
 しかし、そのロジックは再帰でなく
 単なるループだ。for文のループ

🤡再帰?、再帰って地獄かもよ?
setTimeout(function() {
console.log(1)
setTimeout(function() {
console.log(2)
setTimeout(function() {
console.log(3)
}, 1000) }, 1000) }, 1000)

🥳コールバック地獄大好き
てか、再帰プログラミングて地獄なの❓

👤いや(⁠゜⁠o⁠゜⁠; アウウ いやいや(⁠・⁠o⁠・⁠;⁠)
🤡再帰的アルゴリズムとは
 for等のループ的アルゴリズムなら
 オレは、どっちも好きだ
 コールバック地獄は嫌いだし
 async proなんちゃらも嫌いだけど
👤矛盾した主張だな
🥳コールバック地獄とfor文組合せよう。
👤🤡 それ検討したが挫折 バイバイ
281>>277 の続編&#179; (ワッチョイ 6faf-NH4A [2400:2200:438:4658:*])
垢版 |
2025/01/25(土) 13:17:37.74ID:TAq0uG+90
💃(←初登場:ナゾの女性 という設定)
あら、これ再帰プログラム❓
信じられなーーい。ありえなーーい。

マジ、超本物の再帰プログラミングは、
自身の関数を呼び出すのが本物です。
スナワチ、以下の通りよ。

var cnt = 0 ; // Global変数にしてみた
setTimeout(fff(), 1000) ;
function fff() {
console.log(cnt);
cnt++;
if (cnt < 5) setTimeout(fff(), 1000) ;
}

アナタ達の再帰は、再帰とは言えません。
モチロン、asyncとかfor文は不要ですよー
async forは🈲止です。

🥳これが本物の再帰なのか
コールバック地獄と同様に、
意味がわからないコードだぜっ。
本物の再帰プログラミング嫌いです。
てゆぅか、コールバック地獄大好き

🤡めちゃくちゃコードレビュー
だからぁぁぁーーforやって
async await promise が一番ですよぉっ

👤そもそもjsvsscriptなんてやめちゃえー
で、CSSでアニメーションやれ。
2025/01/25(土) 15:30:48.00ID:e0C8gdKs0
>>277-281
質問スレにいつまで居座るつもりなのかね
283デフォルトの名無しさん (ワッチョイ 6faf-NH4A [2400:2200:438:4658:*])
垢版 |
2025/01/25(土) 16:34:31.47ID:TAq0uG+90
あっそうだ、setTimeout の再帰はおいておいて
setInterval というのも在るのか。それは、時間がないから
そろそろ、オイトマとするtimeにするかも知れない
ま、再帰しなしsetTimeoutで、かつ async promiseは使用しない
のが、一番バッチリという感触。今は。では、またいつか。5日ではないいつか
(^_^)/~ 👤🤡🥳💃一同 実は同一人物だけど(⁠・⁠_⁠・⁠;⁠)
284やっぱ過疎化防止で、また来ちゃった (ワッチョイ deaf-opVO [2400:2200:438:4658:*])
垢版 |
2025/01/27(月) 06:54:39.55ID:/Hv0VvQW0
ふと、どうでもヨイ疑問が湧いた。

for(let t=1000; t<=3000; t+=1000){
setTimeout(function() {
console.log(t/1000)}, t)
}

と、

for(let n=1; n<=3; n+=1){
setTimeout(function() {
console.log(n)}, 1000*n)
}

どっちも問題はないけど・・・
どっちが見やすい?。
誤差とかわかり易さとかの観点で

てか、どっち に しようかな。
てか、どっち の 仕様がいいのかな。
てか、どっち を 使用しようかな
2025/01/27(月) 20:38:29.10ID:DmLoR8Bu0
>>284
ChatGPTに聞いてみたけど、全部は掲載できないので結論だけ転載

1. 「時間」を基準にして明示的に処理を進めたいなら t
2. 「ループ回数」を基準にするのが直感的なら n
個人的にはtの方が汎用性が高く、特に時間管理が重要なケースでは使いやすいと思います。
2025/01/27(月) 20:44:15.26ID:DmLoR8Bu0
1. 可読性
tを使ったコードでは、時間そのもの(1000, 2000, 3000)が直接書かれており、「時間に基づいた処理」という意図が明確。
一方、nを使ったコードでは、「ループの回数を基準に処理」していることが読み取れる。
一般的には、「時間を意識した処理」ならt、「回数を意識した処理」ならnを使ったほうが直感的です。
2025/01/27(月) 20:44:38.45ID:DmLoR8Bu0
2. 精度と誤差
setTimeoutは指定した時間で必ず正確に実行されるわけではなく、若干の誤差が発生します。どちらもこの点においては同じですが、**tの方が「時間の計算結果が直接書かれているため誤差の発生ポイントが少ない」**という印象を受けます。
例えば:
1000 * n // 計算で導出
1000, 2000, 3000 // そのまま指定
上記の違いから、誤差を気にするならtの方が直接的で分かりやすいです。
2025/01/27(月) 20:46:35.01ID:DmLoR8Bu0
3. メンテナンス性
tのコード
時間間隔を変更したい場合、初期値・上限値・増加値だけを変更すればよく、スケール感の変更がしやすい。
nのコード
「1000を掛ける」という計算式が直接書かれているため、変更時に計算式部分にも目を配る必要がある。
2025/01/27(月) 21:16:45.23ID:T51mrGlF0
一般常識があるやつならtを使うメリットなんて一つも無いと分かるはずなんだがChatGPTはいまだにこんな意味のない回答するんだな

俺の使ってるChatGPTと同じとは思えない
2025/01/27(月) 21:44:29.89ID:mnVLXxyY0
ChatGPT君はわりと利用者に忖度した回答するので、利用者次第で馬鹿にもなる
2025/01/27(月) 21:56:48.37ID:DmLoR8Bu0
いや、質問をそのままGPTにペーストしたよ
利用者の意見なんて1つも入れてない
2025/01/27(月) 22:13:58.10ID:mnVLXxyY0
質問の仕方に利用者の知識量とか思考が入り込んで、ChatGPTはそれに応じた回答をする。回答のレベルは質問のレベルに合致する
2025/01/28(火) 03:33:19.87ID:7uzvZSX70
それはそうだけど、正確性からそんなに大きく逸脱はしてないでしょう
というか、客観的に大多数に正しいと思われる解決法を提示してくれるから助かる
無料のは今だに嘘が混じってる事が多いんだけど、有料のPlusは結構正確になった
参照してる知識量が無料のものの何倍もあるみたい
2025/02/06(木) 13:59:21.74ID:FTswYlc4a
外国のサイトにある動画から字幕を抜き出したくて色々試したけど上手く行かなかった(www.francetvinfo.frというとこ)
でもffmpegだとあっさり成功した
もしJavaScriptに詳しければffmpegというツールに頼らず抜き出せたのだろうか?
chatGPTに聞くとDOMで作成してるみたいな答えが帰ってきたので字幕作成はJavaScriptで行っているのかなと思った
今字幕抜き出せた喜びとツールに頼った悔しさが入り混じってるけど皆なら自力で抜き出せた?
295デフォルトの名無しさん (JP 0H96-qIVI [133.106.33.6])
垢版 |
2025/02/13(木) 12:33:25.69ID:DZyx9aKAH
失礼します。
insertBeforeでHTML要素にnodeを追加する際、複数ある要素(class)の1番最後にのみnodeを挿入したいのですが、可能でしょうか?


<div class="unko"></div> //1
<div class="unko"></div> //2
<div class="unko"></div> //3
<div class="unko"></div> //4
<div class="unko"></div> //~以下ランダムで増減


このように、ユーザーが投稿するコメントのようなランダムで増減するclass要素があり、その繰り返しの1番最後にnodeを挿入したいのですが、

hoge[0].parentNode.insertBefore(elmDiv, hoge[0].nextSibling)

これを改良して

hoge[※最後の要素].parentNode.insertBefore(elmDiv, hoge[※最後の要素].nextSibling)

とするにはどうすればいいでしょうか?

そもそも不可能である場合、不可能であると断言して頂けると幸いです。
2025/02/13(木) 13:01:37.54ID:xGLXSNfR0
:last-of-typeとか:last-childとかで出来るけどそういうの知らなくても”配列の長さ-1”くらいは思いつこうよ
297295 (ワッチョイ b149-GKZ3 [180.221.149.54])
垢版 |
2025/02/13(木) 13:14:34.23ID:8KNio/Em0
> 296
つまりあまたはわたしをアホとおっしゃるのですか?
298295 (ワッチョイ b149-GKZ3 [180.221.149.54])
垢版 |
2025/02/13(木) 13:15:37.17ID:8KNio/Em0
💩
2025/02/13(木) 13:39:50.07ID:tamKTj1t0
>>295
hoge[hoge.length-1].insertAdjacentElement("afterend", elemDiv);
2025/04/05(土) 12:51:42.18ID:7VBJ2biq0
関数定義するとき、
function funcName() { ~}
と
const funcName = () => { ~ }
で、関数内でthisの参照先を気にしないとすると、どっちの書き方のほうがいい、とかありますか?

なんとなくconst~で書いてたときがあるんですが、VSCodeでアウトライン表示したときに、functionで定義するとメソッドのアイコンになるけど、constで書くと変数扱いになるで他の変数と(ツリー上)区別が付きにくくなり、functionの書き方に戻しました。
2025/04/05(土) 21:28:14.07ID:sUMv9Ks50
>>300
巻き上げがあるから関数宣言はやめた方がいい
2025/04/05(土) 21:48:41.97ID:lcZxDDXa0
巻き上げがあったら困る場合だけ関数式

関数宣言のほうが
- 巻き上げがあるからトップダウンで書ける
- 名前付きの関数なのでdebugabilityが高い
ので迷ったらまずはこっち
2025/05/08(木) 23:46:11.91ID:fGnrU9Lw0
constに入れておかないと、チーターに簡単に上書き改竄されたりすんのか
2025/05/11(日) 01:02:25.07ID:N+caZpkb0
水前寺清子?
2025/05/11(日) 17:20:56.05ID:NQ286Pqc0
バイナリをいじる場合はconstとか関係ない。
2025/05/30(金) 22:49:08.32ID:1o7EfCHn0
愚痴ですが…
当方プログラミングはC言語やVBA、ほんの少しPythonを触ったことがあるぐらいのド素人です
今はサポートされてない昔の測定機器のSDKですが、dllファイルがVBAからライブラリとして読めない現象が発生
原因分からず、VBA詳しい友人にdllファイルをアンコンパイルして解析してもらうとC++で書かれているためそもそもVBAで読めないと言われました
ChatGPTにも相談すると中間Wrapper作りますよ!と言われ、紆余曲折有りながら出来上がったものをVBAで読み込んでも動作せず
諦めてダメ元で公式のサポートを頼るも、日本国内の代理店からは対応できないと断られ、やむを得ず国際電話で計測器メーカー直轄の韓国の拠点へ電話
後日メール返すとのこと
疲れた
2025/05/30(金) 22:50:16.72ID:1o7EfCHn0
ちなみに今回の対応も韓国への国際電話も自腹です(^q^)
何やってるんだろうな俺
308デフォルトの名無しさん (ワッチョイ e3b4-nntB [2400:4151:a4a0:6500:*])
垢版 |
2025/10/11(土) 20:33:48.15ID:n5gETjNc0
video_elm.addEventListener(
"ended",
function(){
alert("全て見た");
}
);
動画を再生しきると「全て見た」と出るけど
video_elm.currentTime = 0;で再生位置を最初に戻してまた再生しても
「全て見た」と出ませんでした。
このイベントは1回限りなんですか?
309デフォルトの名無しさん (ワッチョイ 1d5f-fd5n [2400:2200:612:5bdb:*])
垢版 |
2026/01/16(金) 08:52:05.90ID:dLJRzfDt0
JointJSでattrでtext更新し続けるとchromeのrenderキャッシュが増え続けてmemory圧迫するからtext描画の部分だけcanvasにした方がよいとチャッピーに言われたんだけどそういうもん?回避方法ないの?
310デフォルトの名無しさん (ワッチョイ 9bba-anSw [2400:2200:4fe:9fa3:*])
垢版 |
2026/02/16(月) 13:32:37.18ID:4EYrvU/A0
const [r,g,b,a] = [128,0,0,0];

var rgba = 0;
rgba += r << 24;
rgba += g << 16;
rgba += b << 8;
rgba += a;
console.log(rgba); //負の2147483648
console.log(typeof rgba);

var rgba = 0;
rgba += r * (2 ** 24);
rgba += g * (2 ** 16);
rgba += b * (2 ** 8);
rgba += a;
console.log(rgba); //正の2147483648
console.log(typeof rgba);

1行目は、表示は、マイナス2147483648
3行目は、表示は、プラス 2147483648
でした。値が違うのですが
JavaScript言語のバグですか❓
ちな、2行目、4行目、は共に
numberだった。

JavaScriptのnumberって64bitだから
2147483648程度の値ならオーバーフロー
しないハズですよねぇーーー
2026/02/16(月) 13:55:53.05ID:okZ0+WMH0
JavaScriptの数値(Number型)は64bit浮動小数点数ですが、
ビット演算子を通すと、自動的に32bit符号付き整数に変換されます。
312デフォルトの名無しさん (スフッ Sd33-RN7a [49.104.24.129])
垢版 |
2026/02/16(月) 14:07:06.35ID:x7411cF0d
バグなんてありません
あるのはダサい仕様だけです
2026/02/16(月) 14:15:49.10ID:Igc0CmxY0
+で足すアホが悪い
var rgba = 0;
rgba |= r << 24;
rgba |= g << 16;
rgba |= b << 8;
rgba |= a;
314310 (ワッチョイ 6b50-xeog [2400:2200:5b7:2d7f:*])
垢版 |
2026/02/20(金) 16:36:25.71ID:+SoXUfFX0
310です。いつも素早い解答ありがとう。
皆様の的確な解答により
やりたいコードのコーディングが実現できました。
const [r,g,b,a] = [128,0,0,0];
var rgba = r * 16777216
+ g * 65536
+ b * 256
+ a;

var rr = (Math.floor(rgba/16777216))%256;
var gg = (Math.floor(rgba/65536)) %256;
var bb = (Math.floor(rgba/256)) %256;
var aa = rgba %256;

console.log(rgba);
console.log([r,g,b,a]);
console.log([rr,gg,bb,aa]);

を実行したところ
2147483648
[128,0,0,0]
[128,0,0,0]

\(^o^)/ \(^o^)/ \(^o^)/
って感じです。イロイロご指導ありがとうごさいました
315デフォルトの名無しさん (ワッチョイ df50-CF4A [2400:2200:5b7:2d7f:*])
垢版 |
2026/02/25(水) 07:34:58.63ID:9CZcDHFS0
たびたび、失礼します。今日も質問です。

var p = 1;
var q = AAA(p);
console.log(q); // 1002だ。ヘンです!

function AAA(x) {
x++;
BBB();
return x;

function BBB() {
// 関数BBBは引数・返却値 無いぜ
x = x + 1000;
}

}


というjavascriptなのですが
1002って表示されるんですよ。
ボクは、絶対に2と表示が正解にも関わらず、なのに
javascriptがバグってるんワケないから、
ボクの、頭が、バグってると思うのですが
どうしても、不意に落ちません。 教えて下さい�@

あと、
関数内関数BBBは、クロージャってヤツですか。 
教えて下さい�A

以上2点のご教示頂けると、ありがたいです。
316315 自問自答 (ワッチョイ df50-CF4A [2400:2200:5b7:2d7f:*])
垢版 |
2026/02/25(水) 07:50:17.33ID:9CZcDHFS0
いや、スマホの検索(AI検索) すげぇーーー🙀
>>315の件、詳細に解答しやがった。ま、それを
100分の1位に、オレがまとめて回答すると
以下の通り

BBBはAAAのクロージャ(内包)です。
で、
BBB は AAA のメモリ領域を書換える。
1002 になるのが正常な動作です。

っていうのを長文で回答した。🙀AIやべぇー

ていうか、クロージャって関数ぢゃないぢゃーーーん
単なるサブルーチンぢゃーーーん。

以上、単なるボヤキでした。
では、失礼します。
2026/02/25(水) 14:27:09.91ID:MOGILlKo0
var/let使え
318長文失礼します (ワッチョイ df50-CF4A [2400:2200:5b7:2d7f:*])
垢版 |
2026/02/26(木) 13:49:33.87ID:pGls9qSC0
var p = 10000;
console.log( MAINfn(p) ); //11000
function MAINfn(x,y) {
{ var z = null;sRtn(1.1);return z;}
function sRtn(ratio) {
z = x * ratio;
}
}

では、11000と表示されますが
var z を let z に変えただけなのに
11000とは表示されず nullと表示

何でですか。

ちなみに、スマホAI検索の回答は
sRtnが実行されないから などと
辻褄合わせの答えで納得いきません

なぜsRtnが実行されないそのワケが
説明されてないし、
そもそも、sRtnはlet zに変えても
実行されると思います。

AIは嘘つきなので嫌いですが、
5chのヒトは嘘でも気にしません。
なんで、11000とは表示されずnullと表示
されるワケをご教示して頂けないでしょうか
2026/02/26(木) 14:27:58.45ID:w/+Pjkbg0
変数の巻き上げ
2026/02/26(木) 14:28:03.40ID:zMrzFLYU0
var は関数スコープ、let はブロックスコープだからです。
let は ブロックスコープ なので、{ } の外にある sRtn からは z が見えません。
sRtn 内の z への代入は、MAINfn のブロック内の z には影響しない(またはエラーになる)ため、
return z は null のまま返ります。
2026/02/26(木) 16:53:15.63ID:AKqxtDI60
乗算結果が入るzはグローバル変数。
returnしているzはnullで初期化されだれも変更しないz。
2026/03/15(日) 09:41:18.22ID:UKUWEdYL0
アロー関数自体は別にいいんだけど
引数が1つだけなら( )がいらないって仕様に決めた奴は死んで欲しい(´・ω・`)
323デフォルトの名無しさん (ワッチョイ 2dfe-OhYC [2400:2200:731:7570:*])
垢版 |
2026/03/15(日) 12:34:49.43ID:9YfN1k0H0
別にいいじゃん
324デフォルトの名無しさん (アウアウウー Sa7a-sFF2 [106.155.1.97])
垢版 |
2026/03/15(日) 13:03:02.36ID:qaLJXPfya
Rubyの悪口はもっとやれ
2026/03/29(日) 01:58:43.91ID:g8KpGm050
AIにvarで書かれたことないな
今の知識カットオフで書くことあるんだろうか
326>>314 (ワッチョイ b363-YSzR [2400:2200:772:90ce:*])
垢版 |
2026/04/25(土) 09:52:48.52ID:z0M5IvXG0
314て、ちょい昔の俺の投稿なんだけど・・
ま、それはさておいて、スマホのAIすげぇーーー
てゆうか、備忘録だ

Q)
javascriptデータ型で32bit符号ナシを宣言するウラ技を知りたい。人工知能よ秘密にせずウラ技を教えろ
↑
補足:原文どおり

A)32bit符号ナシへの変換ウラ技
手軽に変換したい場合は val >>> 0
↑
補足:原文は長文∴当方で一行へまとめた
327デフォルトの名無しさん (アウアウウー Saa3-AZ9P [106.155.3.198])
垢版 |
2026/04/25(土) 10:35:08.92ID:bqqm8T8Za
0 | val
2026/04/25(土) 11:38:32.82ID:tyCYh/lRM
64bit浮動小数点数だから54bit整数何じゃね?
329デフォルトの名無しさん (ワッチョイ bd63-bepD [2400:2200:772:90ce:*])
垢版 |
2026/04/27(月) 11:57:03.07ID:4v1VoqAN0
人工知能と会話して、上手く人工知能に
誘導尋問したら、ま、人工知能が、ヤバいこと教えてくれた。
 >>> 0(ゼロ埋め右シフト)
 がJavaScriptでは、
 数値を 符号無32bit整数(Uint32)
 で強制解釈させるための
 最速のハックです。

ちなみに、俺がおもったとおり、
グローバルとローカルでは、あっちの方が速いかもだ。ま、教科書の常識通りの答えを、始めは答えるけど・・・。 すげぇーーー

単なる呟きでした。では、また今度。
レスを投稿する


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