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

■ このスレッドは過去ログ倉庫に格納されています
2022/08/07(日) 15:57:40.26ID:TS5TGpUB0
!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.124
https://mevius.5ch.net/test/read.cgi/tech/1636525464/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
2023/03/19(日) 22:37:02.99ID:SC8SOdGAd
>>763
パーサーにケチつけてるよりはその方が建設的でしょうよ
2023/03/20(月) 03:23:46.29ID:iV2jn8x9a
>>738
VSCode の拡張機能では、

open in browser では、ローカルファイルアクセスになる。
この場合、CORS など、ブラウザの色々な制限がある

file:///C:/Users/Owner/Documents/test/index.html

一方、Live Server では、
自分のPC 内にサーバーを立ててから、そこから配信されるので、テストしやすい

http://127.0.0.1:5500/test/index.html

>>751
そういうのは、Excel, VBA, Access とかじゃないの?
ベンチャー企業やプロのバックエンドは、Ruby on Rails だけど
2023/03/20(月) 04:02:42.23ID:iV2jn8x9a
>>743
Promise.all/allSettled とか?
2023/03/20(月) 19:47:12.99ID:PTBUy+ct0
chromeの拡張機能で、「ngWord.json」内のデータを「background.js」経由で「content_script.js」に格納しようとしていたのですが、上手くいきません。コードでおかしな点等あれば、ご教授頂けないでしょうか。

【background.js】
fetch('ngWord.json')
.then(response => response.json())
.then(data => {
// content_script.jsにデータを送信
chrome.runtime.sendMessage({ngWords: data});
});

【content_script.js】
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.ngWords) {
const ngWords = message.ngWords;
console.log(ngWords); // 受信したデータを表示
}
});
2023/03/20(月) 19:56:51.89ID:hUotJVz90
>>767
バックグラウンドからタブに送信するならchrome.tabs.sendMessageじゃないかな?
2023/03/20(月) 20:37:35.10ID:PTBUy+ct0
>>768
「タブ」というのは、「content_script.js」のことでしょうか?
だとすると「chrome.tabs.sendMessage(tabId: content_script.js, ngWords: data)のように書く感じでしょうか。
2023/03/20(月) 20:53:08.72ID:mlA7fjwPM
雑な方法としてはアクティブなタブに送ればいいんちゃう?
2023/03/20(月) 21:36:27.87ID:hUotJVz90
>>769
そうです。background から content_script に送信する場合はchrome.tabs.sndMessage だったと思いますよ
chrome.tabs.query({active:true,(tabs)=>{
chrome.tabs.sndMessage(tabs[0].id,{
ngWordsg:data
})
}})
というような感じで
2023/03/20(月) 21:40:33.20ID:xjtq7KFo0
最初にコンテンツスクリプト側から何かメッセージ送れば
バックグラウンド側のchrome.runtime.onmessage.addListenerのsender.tab.idでタブID取れるっしょ
2023/03/20(月) 21:49:32.93ID:hUotJVz90
それならtab.id必要なくてsendResponseで返せるんじゃないかな?
2023/03/20(月) 21:53:15.40ID:PTBUy+ct0
【background.js】
fetch('ngWord.json')
.then(response => response.json())
.then(data => {
chrome.tabs.query({active:true,(tabs)=>{
chrome.tabs.sendMessage(tabs[0].id,{ngWords:data})
});
};

【content_script.js】
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.ngWords) {
const ngWords = message.ngWords;
console.log(ngWords);
}
});

このように修正しましたが、上手く取得できないようです。
2023/03/20(月) 22:00:26.17ID:hUotJVz90
そもそもngWord.jsonの中身とれてますか?ローカルファイルならweb_accessible_resources書いてchrome.extension.getURLで取るんじゃないでしょうか?
2023/03/20(月) 22:04:38.80ID:xjtq7KFo0
もしかしてスクリプト本当にそれだけなの?
だとしたらcontent_script.js実行される前にbackground.js終わってそう
2023/03/20(月) 22:24:56.04ID:PTBUy+ct0
申し訳ありません、私の知識不足で、よく分かりません。もう一度格闘して、改めて質問させて頂きます。ご教授下さり、ありがとうございます。
2023/03/20(月) 23:58:23.18ID:hUotJVz90
>>777
めっちゃ適当なこと言ってましたわ
web_accessible_resourcesとchrome.extention.getURLは関係ないっぽいです

まずcontent_scriptが実行されるタイミングでbackgroundからタブにデータを送れるはずなくて
かといってcontent _scriptからメッセージ送ってbackgroundでfetchしたデータを送ろうとしてもセキュリティー的になのか送れない

なのでbackgroundでfetchしたjsonをchrome.storage.local.setで保存してcontent _scriptからchrome.storage.local.getで読み込むが正解っぽいです

暇だったんで...
2023/03/21(火) 04:01:46.37ID:rEPYZ+tza
漏れはプロジェクトを作って、index.ts に、TypeScript で以下を書いて、
npm/yarn, webpack, babel でビルドすれば、
import で、JSON ファイルやLodash も読み込めるけど

import WordData from "./word_data_tmp.json";
console.log( WordData.length )

const ary = [ ...Array( 5 ).keys( ) ]
// => [0, 1, ....,4]

import shuffle from 'lodash.shuffle';

console.log( shuffle( ary ) );
// => シャッフルされる
2023/03/25(土) 14:02:02.15ID:MQIuadNDM
Next.jsでAPI Routesを使わないのは一般的でしょうか?
2023/03/25(土) 18:19:14.13ID:1/y/Yy4J0
「一般的」のような主観的なものてはなく、客観的な定義が必要なのでは
2023/03/28(火) 20:12:53.97ID:RtCr5Rz10
プロミスって何?

あとfetchってasync、await使うのと.then使うのでどっちがいいの?
2023/03/29(水) 11:27:02.70ID:NxiPtBQP0
>>782
普通に調べれば出てきますよ
調べても調べてもよくわからんって質問をどうぞ
2023/03/29(水) 12:55:23.79ID:y04hNuo/d
消費者金融機関だよ
2023/03/29(水) 13:11:20.35ID:6965UHWi0
>>784
絶対に許せないのでxhrにしますね
2023/03/31(金) 02:32:51.01ID:VdncSfH00
メイン画面でボタンをクリックすると
別ウィンドウが起動し、ニュースサイトを表示するプログラムを組んでいます。

別ウィンドウが起動した時に
そのウィンドウが閉じられたのか、開かれたままであるのかを
メイン画面で判定するにはどういうコードを書けばよいでしょうか?

別ウィンドウでサイトが開かれている間は
1、2、3・・・とカウントし、閉じられると0を
メイン画面にjQueryでレンダリングしようとしています。
2023/03/31(金) 03:09:38.31ID:29iJjOEC0
>>786
window.closed はどう?
2023/03/31(金) 11:32:39.06ID:VdncSfH00
>>787
ありがとうございます。
ちょっと試してみます。
2023/04/23(日) 22:40:30.72ID:k6QZkjYI0
先日(1週間くらい前)まで動いていたジャバスクリプトが動かなくなった。
ブラウザの不具合を疑って firefox、edge、さらに ie11 まで持ち出したらどれも動かない。
ウインドウズのセキュリティの締め上げかなと思って
スマホ(アンドロイド)で確認したがこっちも動いていない。
押し入れから昔のアイポッドタッチ(iOS9)を持ち出したが、やっぱ動かない。

こんなことってある?
アイポッドタッチなんてスクリプトが動いていたころとなに一つ変わっていないのに
なんでこの前は動いたのに今日は動かないんだ?
1年前のバックアップと差分比較してファイルが壊れていないことは確認した。
ちなみに自分がジャバスクリプトを作成するにあたって参考にしたスクリプトは
いまも普通に動いている。
2023/04/24(月) 07:00:31.38ID:z1nNn0o4H
エラーも出てないのか?
まったく反応してないのならhtmlで読んでないんじゃね?
2023/04/24(月) 08:37:00.30ID:Z0B9bFh/d
動いてた夢を見たんだ
2023/04/24(月) 09:21:53.70ID:U4o0cUkO0
>>789
ブラウザの不具合疑う前に
エラーログ出て無いか確認しろ
エラーログすら出てないならHTML側でちゃんと呼び出せてるか確認しろ
2023/04/24(月) 12:05:07.84ID:VtgoOt7B0
https の証明書が古い
2023/04/24(月) 13:08:00.47ID:MpRTlb310
>>792
エラーログを見たらあっさり解決しました。
夜更けに一人で大騒ぎしてごめんなさい orz

いまブラウザの開発者ツールでジャバスクリプトのエラーが見られるんだね。
びっくりした。

原因はHTMLの削除した部分にスクリプトで動かす部分があって
動かすべきものがないから次の処理に行けずエラーになっていました。
スクリプトばかり見ていてHTMLは盲点でした・・・。
2023/04/24(月) 13:15:26.56ID:3ESYAe520
開発者ツール超便利だよね
2023/04/24(月) 13:22:29.25ID:sSUQNn8cr
まあそういうオチだろうなとは

アドバイスを求めるならhtmlを修正したことは伝えるようにしてほしいところ
2023/04/25(火) 18:51:33.50ID:/Hd1NuvtH
解決したようでなによりなにより
2023/04/26(水) 19:26:29.99ID:lfd6T/fN0
http://abehiroshi.la.coocan.jp/

この阿部さんのHPの左のフレームから「舞台出演」を取得したいんだけど、

const frame = await page.$('frame[name="left"]');
 const contentFrame = await frame.contentFrame();

こんな感じでcontentFrameを取得するところまでは上手く行くんだけど、

 const aElement = await contentFrame.$('body table.today tr:nth-child(8) td:nth-child(3) p a');

次の要素を取得する段階になるとnullになってしいます
どうすれば阿部さんの舞台出演を取得できますか?
2023/04/26(水) 20:39:08.46ID:UfBGheQ30
>>798
.todayなんてclass付いてないぞい
2023/04/26(水) 22:57:11.72ID:Q5IzIMlUH
それってJS?
2023/04/26(水) 23:08:17.75ID:Q5IzIMlUH
そもそもnullを取得してるってことは所望のオブジェクトが取得できていないってことよん?
2023/04/27(木) 13:47:05.09ID:jYECG79eF
>>798
それ、ChromeのDevツールとかで、Elementの検索にセレクター入力してちゃんとヒットする?
2023/04/29(土) 00:34:06.33ID:FZLDUbkY0
['apple', 'パイナップル', 'pineapple (パイナップル)', 'りんご', 'pineapple']

['apple', 'パイナップル | pineapple', 'りんご']
に別名ふくめて重複削除して整形したいんですがスマートな方法ないですか
2023/04/29(土) 01:41:53.10ID:bskwYySl0
>>803
パイナップルの表記方法はどういう仕様なの?
スマートじゃない方法で実装できてるならそれを貼ってみたら?
2023/04/29(土) 01:58:50.79ID:FZLDUbkY0
>>804
別名がカッコで後ろに付く場合があったりなかったりをまとめたいんです
今は文字列に取り出して正規表現で割ってまた戻して~って頭悪くやってます
2023/04/29(土) 02:08:42.66ID:bskwYySl0
>>805
元の配列には、同じ値が複数、たとえば 'りんご' が何個も入ることがある?

ただ何にしても、現状がどの程度頭悪いのか分からんけどそこそこ泥臭くなるんじゃないかなぁ
2023/04/29(土) 02:20:05.97ID:FZLDUbkY0
>>806
あります
2023/04/29(土) 05:52:34.96ID:q0/EY4lO0
>>807
ちょっと面白そうだったので作ってみたけど、あんまりいい出来にはならなかった。
わざわざ見せるようなものじゃないんだけど、一応貼っとく。
アプローチとしては、単品アイテムまたは別名で括られた同一アイテム毎に配列実体を持たせて、重複排除しながらその実体に放り込んで最後に文字列化する。
複数の別名定義で 2つ以上の名前を括ったり、名前の登場順で連結するようにした。


https://i.imgur.com/tY8Yg78.gif
2023/04/29(土) 06:04:20.63ID:ZqMIj65v0
あわわ、26-32行目は整理できた

const new-content = [];
alias_ref[item] = alias_content.length;
2023/04/29(土) 20:12:37.30ID:wJzxOo1h0
JavaScriptでタイマー処理をしています。
指定した秒数(ここでは10秒)経過したらタイマーを停止する様にしていますが
タイマーが止まりません。助けてください、、、

$(document).ready(function(){
$("#id_div_test").click(function () {
setInterval(TestFunction , 1000);
});
});

var i_current_second = -1;
function TestFunction()
{
i_current_second++;
if( i_current_second == 10)
{
clearInterval(TestFunction);
}
}
2023/04/29(土) 20:34:34.21ID:ulzy/WI80
>>810
使い方間違っとるな
そういうときはまずリファレンスを読め
https://developer.mozilla.org/ja/docs/Web/API/setInterval
2023/04/29(土) 20:36:30.58ID:WiY5v75xM
clearIntervalの引数に入れるのはsetIntervalから帰ってくるnumber
型エラーでハマるのアホらしいしts使うか無理なら//@ts-checkをファイルの先頭に書いとけ
2023/04/29(土) 20:54:08.29ID:wJzxOo1h0
>>812
わかりません。。。どう書けば良いでしょうか?
2023/04/30(日) 00:03:19.23ID:x92s4/Ng0
>>812
できました!
2023/05/07(日) 14:48:48.64ID:NS1NVPz40
>>810
こういうのはそのまんまChatGPTに聞けばヒントなり、回答、修正案なんかも返してくれ
る。
----
この問題は、`clearInterval`に渡す引数が誤っているために発生しています。`setInterval`に渡したのは `TestFunction`関数ですが、`clearInterval`に渡すのは `setInterval`が返すタイマーIDです。このタイマーIDは `setInterval`を呼び出すと返されます。

以下は修正されたコード例です。

$(document).ready(function(){
$("#id_div_test").click(function () {
var timerId = setInterval(TestFunction , 1000);
// タイマーIDを保持するために変数に代入する
});
});

var i_current_second = -1;
function TestFunction()
{
i_current_second++;
if( i_current_second == 10)
{
clearInterval(timerId); // 正しいタイマーIDを渡す
}
}

ここでは、`timerId`変数を`setInterval`の戻り値として宣言し、`clearInterval`に渡すようにしました。これにより、タイマーが正常に停止するはずです。
2023/05/08(月) 05:12:47.92ID:AmPaXWnYM
>>815
ここいらんやんけ…
2023/05/08(月) 09:31:16.79ID:nWGvwrRY0
>>815
setIntetval してるスコープの timerId を clearInterval するスコープから参照できる?
2023/05/08(月) 19:39:25.41ID:0kSPeCjv0
エラーが出たらまた聞けば直してくれる
あとほ聞き方の問題だね
2023/05/08(月) 22:29:23.94ID:BI0XZhvO0
>>815
え?そんな事までChatGPTできるの???すごくね??
どんなシステムになってんだろ。
2023/05/08(月) 23:30:02.71ID:ieW4qdsxM
条件によってスクリプトを途中で止めさせたいんだけど三項演算子じゃreturnするしないを分けるのは無理?
if exitFlag return false
2023/05/08(月) 23:46:59.68ID:PuDhFqQc0
>>820
多分無理だと思うけど、なんで if じゃいけないの?
2023/05/08(月) 23:51:00.55ID:ieW4qdsxM
>>821
三項演算子の中で使ってるからなんか気持ち悪い
2023/05/09(火) 00:52:34.88ID:eLWpr74i0
f = (flag) => flag ? false : true;

console.log(f(true));
console.log(f(false));
2023/05/09(火) 00:52:45.73ID:RQydgiqHd
>>819
ChatGPTをプログラム用途で使ったこと無いなら一度つかってみると良いよ。
ググる手間がかなり少なくなる
もちろん、間違い返答の可能性もあるからそこら辺はうまく扱う必要があるけどね。
あとGitHub Copilotはもっとヤバいよ。プログラマーなら一度は使うべき
2023/05/09(火) 01:40:34.46ID:r9kkpYgp0
OSS のソース読むときにも ChatGPT は便利だよ。
内部関数名とか聞いても何するものか教えてくれる。
この間 OpenSSL のソース読んでて助けられた。
暗号のコードなんて読んでもよくわからないしw
2023/05/09(火) 07:51:33.95ID:y5YEea020
>>824
GitHub Copilot
そんなのもあるんですね。
2023/05/09(火) 10:14:34.85ID:y5YEea020
ChatGPTでsqlでハマった点を質問してみたんだけど
ヤバイな。一瞬で分かり易く解説してくれた。

どんなプログラムを組んでるんだ。凄すぎる。
2023/05/09(火) 14:59:12.62ID:y5YEea020
chatGPTえぐいんですけど。
2023/05/18(木) 17:50:03.04ID:An6NATd90
javascriptでctrl+Wでブラウザタブが落ちるのを無効にする方法はありますか?
2023/05/23(火) 06:51:40.61ID:tIBpGAYNH
それはJSの設定?Winの設定?
2023/05/23(火) 20:39:57.19ID:85f2/18wa
最近勉強してvarの何でもありな傍若無人さに気が付いた
例えば関数実行後に初期化してもホイスティングで勝手にundefiedが代入されるからエラーにならず混乱の素、
ブロックスコープ内で使うとその生成を無視するから混乱の素
なのでプロなのにES6以降の環境で未だにvar使ってる人って新人にも劣ると思った
ES6以降でEcmaから非推奨と言われてるのに未だにvar使わなければいけない理由ってある?
今後var使ってる人見たら問答無用で勉強しない人と判断しても良い?
2023/05/23(火) 20:57:14.94ID:PscArQu/0
キモ
833デフォルトの名無しさん (ブーイモ MM16-F7IQ [133.159.150.75])
垢版 |
2023/05/23(火) 22:34:28.22ID:y7+F4Fx6M
>>831
>例えば関数実行後に初期化してもホイスティングで勝手にundefiedが代入される
これいろいろ間違ってる

>未だにvar使わなければいけない理由ってある?
REPLで繰り返しコードブロックを実行したい場合なんかにvar使う
あとはブラウザ以外の環境でES3しか動かない環境とかね

>今後var使ってる人見たら問答無用で勉強しない人と判断しても良い?
良いと思うけど君もそっち側に片足突っ込んでるから気をつけて
2023/05/24(水) 10:07:05.19ID:qaFXRxUx0
スコープの基本だね
レキシカルなのかパラメーターなのか
DOMをいじるとみんな参照になるし変数大切ね
2023/05/24(水) 10:45:52.94ID:R9+x876F0
匿名イベントを削除する方法って無い?
ググりまくっても全く見当たらんから仕方ないのでElement.prototype.addEventListenerフックしてフィルタしてるんだけど非常に遠回りな事してる気がしてならない
836デフォルトの名無しさん (ブーイモ MM86-F7IQ [163.49.208.121])
垢版 |
2023/05/24(水) 11:04:01.62ID:CrZEaXEyM
>>835
イベントリスナーへの参照を保持してないと
removeEventListenerは使えない
あとはAbortSignalを使う方法がある
MDNのaddEventListener辺りに全部書いてる
2023/05/25(木) 06:53:07.70ID:djzVD0JU0
くそ素人で申し訳ない
ブックマークレットでCookieを編集する時に有効期限も同時に編集したいのだけれど
どうしたらいいのだろうか

元々は
javascript:document.cookie=%22ipb_member_id=〇〇%22;document.cookie=%22ipb_pass_hash=〇〇%22;

って感じなのだけれど1日くらいしたらすぐ消えてしまう
2023/05/25(木) 11:10:49.64ID:vvIauVZOd
どっかのRFCに載ってるはず
2023/05/27(土) 14:04:26.57ID:MkhutBump
>>837

そいつは有効期限も一緒に設定しなきゃならんな。

javascript:(function(){
var date = new Date();
date.setDate(date.getDate() + 30); // 30日後に設定
document.cookie = "ipb_member_id=〇〇; expires=" + date.toUTCString() + "; path=/";
document.cookie = "ipb_pass_hash=〇〇; expires=" + date.toUTCString() + "; path=/";
})();

こんな感じでやってみ。
これでipb_member_idとipb_pass_hashが
30日間有効になるぜ。
ただし、ブラウザの設定やCookieの設定によってはJavaScriptから触れないこともあるから、
その辺は自己責任でな。
840デフォルトの名無しさん (ワッチョイ 375f-mp2X [106.72.33.97])
垢版 |
2023/05/28(日) 15:24:03.43ID:n14WZ+eY0
documentのinnerHTMLやtextContentの書き換えをしたとき、ブラウザのDOMの計算(?)や再描画(?)は変更があった部分のみか、ページ全体で行われるののどちらでしょうか?
2023/05/28(日) 23:28:10.35ID:8mVMxOyu0
>>839
ありがとうまじ助かった
2023/05/29(月) 06:35:55.98ID:eVNfBOW80
CookieってPHPみたいなサーバーサイドから設定するのとJSから設定するのどっちが良いんかね?

同僚から受け継いだシステムはPHPでやってたが
2023/05/29(月) 07:03:02.74ID:nuFuFtG60
HttpOnlyの存在考えるとサーバーサイド一択じゃね?
2023/05/29(月) 08:05:53.64ID:7kZHwtIo0
ステートレスな通信を補助するものだから、処理の起点側でつけると良い
ただ、一般的にはサーバサイドになると思うよ
2023/06/19(月) 13:57:37.11ID:iYcFBKEZ0
if ((a == b && c != d) || (e == f && g != h)){
alert ("正解");
}

こういうコードの書き方は出来ますか?
二重括弧の使い方は正しいでしょうか?
2023/06/19(月) 14:42:31.77ID:iYcFBKEZ0
ちょっと調べてたんですが、こうでしょうか?

if (((a == b) && (c != d)) || ((e == f) && (g != h))){
alert ("正解");
}

「a == bとc != dの条件が両方ともtrue」か「e == fとg != hの条件が両方ともtrue」なら"正解"と警告を表示したいのですが…
三重括弧なんてあります?
2023/06/19(月) 14:49:42.42ID:G503Uwj70
>>845で大丈夫やろ。
なんで試さんの?
2023/06/19(月) 14:54:44.66ID:Glrukv1f0
演算子優先度の理解が追い付いて無いなら好きなだけ括弧使えばいい
2023/06/19(月) 14:58:41.52ID:3rS08iXar
何重カッコでもいけるけど演算子やカッコが増えると可読性が落ちて条件式を読み解くのが辛くなる
コードは長くなっても条件式をいくつかに分割して変数に入れた方が読みやすくなるよ

const x = (a == b) && (c != d)
const y = (e == f) && (g != h)
if(x || y){
alert ("正解");
}
とか
2023/06/19(月) 15:02:17.21ID:iYcFBKEZ0
皆さん、ありがとうございます
変数に入れるのがいいですね
やってみます
2023/06/19(月) 23:22:27.82ID:xNSaH23va
イテレータ、Map、Setがややこしくて😩なんだけど実務で使う?
一応理解したけどカスタムイテレータ作ってそれをオブジェクトに追加してfor...ofなんて無理だな
プログラマーならバリバリ使うのかな?それとも知識として仕組み知っとくだけ?
2023/06/20(火) 13:18:59.52ID:es0ShzRur
Mapはキーと値の組み合わせのコレクション
Setは重複のない値のコレクション
どちらも実務で出番はある
イテレータは中身を1個ずつ取り出せるものの総称

カスタムイテレータに関してはmdnもおすすめのジェネレータ関数を覚えておけばいいかと
バリバリではないにしてもここぞというときに役に立つ
2023/06/21(水) 18:20:14.61ID:He5qrAkL0
tableタグのtrをjqueryかjavascriptでアニメーションアコーディオンがうまくアニメーションしないんだけど
slideToggleで開発ツールではheightの数字は変化しているんだけど・・
もしかしてtrにheightという概念が無いから?

<tr class=name><td>名前1</td></tr>
<tr class=detail><td>中身1</td></tr>
<tr class=name><td>名前2</td></tr>
<tr class=detail><td>中身2</td></tr>
・・・
2023/06/26(月) 12:08:05.73ID:QXVTwCFE0
変数って定義する前はundefinedが入ってるんでしょうか?
2023/06/26(月) 20:02:32.96ID:nZR6QJ/D0
>>854
変数定義前は変数がない
変数定義時に値を代入しなければundefinedで初期化される
2023/06/26(月) 21:13:06.03ID:QXVTwCFE0
>>855
ありがとうございます。
2023/06/29(木) 21:35:42.23ID:I06beN9ya
Promiseメソッドなんなの独自ルール多すぎでしょ。もはや別言語に感じる。これよく使用される?
2023/06/29(木) 22:34:31.96ID:mZg1DRHQ0
Promise周りは最初は取っつきにくいけど、凄く使いやすく作られてるし、物凄くよく使うよ。
2023/06/29(木) 23:09:38.14ID:OBXN/r9b0
async awaitでしかfetchをかけない自分と、thenでしかfetchを書けない前任者のせめぎあい

xhrはなぜか知らんがもう時代じゃないらしいし
860デフォルトの名無しさん (アウアウウー Sab9-Br7/ [106.128.36.203])
垢版 |
2023/06/30(金) 10:14:20.96ID:Lj29KtNna
的外れな質問だったら申し訳ありません…
クラスAが長くなってしまったこと(1500行くらい)、類似クラスBとある程度共通化できそうな部分があったので関数Cとして
別ファイルに切りだそうと思いました。
その際、関数CからAの複数のメンバ変数/メソッド(Bも同じ名前の変数/メソッドを持っている)を利用したいのですが、
一つ一つ引数で渡していくと記述が煩雑だし、仕様も変わる可能性があります。
そこで、Aのインスタンスから関数Cにthisを引数として渡すようにして、関数Cからは仮引数this.メンバ変数 などのようにして自由にAのメンバにアクセスできるようにしました。

以上のやり方で、動作はしているようですが、なんか良くないやり方の様な気もしています。
上記のやり方は一般的な方法でしょうか。何かデメリットはありますでしょうか。
2023/06/30(金) 10:55:58.80ID:qu6f9mWQ0
クラスAたBの同名の変数と関数をBaseクラスにしてAとBに継承すれば同名の変数関数を持ってることが保証できてうっかり名前変えてしまったとかのバグ防げるんじゃない?インターフェースみたいに
それから引数じゃなくてbind使えば関数C内でthisを自然な感じで使えるとか
862デフォルトの名無しさん (アウアウウー Sab9-Br7/ [106.128.39.112])
垢版 |
2023/06/30(金) 13:05:23.88ID:2BLecjKja
有り難うございます。
デメリットとしては後でA~Cをいじった時にバグの温床になりやすいこと、くらいの認識で良いんですかね。
基底クラスを継承するかたちにすることも考えたいと思います。
確かにbind/callを使った方が、動作は同じでよりシンプルな気がしてきました。
2023/07/01(土) 04:46:01.59ID:nMEzWNF9a
is_a, has_a

継承か包含か、古典的な質問
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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