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

レス数が950を超えています。1000を超えると書き込みができなくなります。
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/07/29(土) 14:21:53.16ID:LQ1ElLyya
>>880
>>881
とにかく理解するのに必死で苦しみました。jJavaScriptが簡単とは全く思いませんでした
2023/07/29(土) 14:27:58.50ID:LQ1ElLyya
try,catch,finally文の存在異議が分からなかったけど、今さっき急にasync/awaitのエラーハンドリングに向いてるのに気が付きました
つまりthen,catchのPromiseチェーンをより楽に書けるのに今さっき気が付きました。こんな感じで上手くいかないですね
2023/07/29(土) 15:03:53.70ID:wB1gRUiQ0
.then().catch()の方が綺麗に書けて(副作用的な意味で)好きだなぁ
2023/07/30(日) 02:24:04.00ID:oecUblNe0
>>879
言語として簡単かっていうとどうだろうね。
Webブラウザがあれば動かせる上にデバッグ環境まで付いてるから、誰でもすぐ始められるし、作ったものをどこででも動かしてもらえるという手軽さはあると思うけど。
2023/07/30(日) 14:24:24.68ID:av5XIWe10
自分はプロトタイプ型オブジェクト指向から入ったから気にならないけどクラス型でプログラム書いてた人は違和感凄いんだろうな

あとクロスブラウザ対応しなきゃいけなかった人達もJSはしんどかったんだろうなと想像
2023/08/04(金) 01:16:43.56ID:LzfYm8xL0
rd41 = "";
alert (rd41);
これで「rd41は未定義です」ってエラーは出ますか?

alert(rd41);
これだけだと「rd41は未定義です」ってエラーが出ますよね

実際のコードはalertでは無いのですが、rd41に無を代入して何も表示させたくないのです
rd41 = null;
だと、nullと表示されてしまいます
2023/08/04(金) 01:36:14.69ID:LzfYm8xL0
chatGPTに質問したら答えが返ってきた
https://i.imgur.com/5NbJI6w.jpg
2023/08/04(金) 09:00:08.06ID:2wk44tWe0
>>887
delete を調べてみるとどうだろう。
やりたいことによってはブロックスコープで足りるかも。
個人的にはブロックスコープを活用して、変数を小まめに狭い範囲に閉じ込める書き方をおすすめしたい。
2023/08/04(金) 09:14:51.09ID:TEvOuQNU0
>>887
ECMAScriptに「未定義」というエラーはない
Strict Modeで実行すれば、両コードともにReferenceErrorになるだろう
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Strict_mode
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError
2023/08/04(金) 09:37:58.66ID:EZ9l15Zsr
>>887
>rd41 = "";
>alert (rd41);
>これで「rd41は未定義です」ってエラーは出ますか?
なんで試してみないの?
2023/08/14(月) 23:07:53.97ID:QNJSoVjn0
時報みたいなのを作成中でそのhtmlのページさえ開いておけば
9時、12時、18時(プリセットとかは無く固定)に特定のwavサウンドファイルがaudioElement.play() で再生される用にしています
(タブが非アクティブだとなんか動かない時があったのでwindow.openで表示させてます)
chromeのポリシーみたいなのでユーザーが明示的なアクションをしないと音声の自動再生はされないみたいで
それの良い回避策ってありますか?
実用性考えると携帯のアラームが百倍使いやすいけど
自分用にチープなのを作って遊んでるんだけど解決策が思いつかなくて・・・
2023/08/15(火) 01:53:58.77ID:Efj8IW440
>>892
そういう質問はchatGTP得意や
聞いてみれば
894デフォルトの名無しさん (ワッチョイ 7e63-SF+K [153.218.139.115])
垢版 |
2023/08/21(月) 00:13:21.70ID:v7lFaH3H0
【環境】Windows 11, Chrome最新版
【何をしたのか】PHPで動的に出力されたテキストに replace (new RegExp)
【エラーメッセージ】コンソールには何も出ません
【期待する結果】ページ内に複数生成される動的クラス内テキストを置換したい
【サンプルコード】
<p class="tx-body">おはようございます*2023.08.15</p><span clas="tx-date">0000</span>
<p class="tx-body">ごきげんよう*2023.08.20</p><span clas="tx-date">0000</span>



tx-dateクラスの中身をtx-bodyの*以降の文字列に置き換えたく、以下を<body>の後半に書きましたが期待する置換変化が起きません、エラーも出ません、
根本的なところわかっていないのだと思うので恐縮ですがお手上げ状態です

window.addEventListener('load', function() {
const ItemList = document.getElementsByClassName("tx-body");
const ItemDate = document.getElementsByClassName("x-date");

for(i=0; i<ItemList.length; i++) {

var tBody = ItemList.item(i).textContent;
var tDate = ItemDate.item(i).textContent;
var replaceDate = tBody .split("*")[1];

tDate = tDate.replace(new RegExp(replaceDate,'g'),'');
}
})


以上ご指導よろしくおねがします
2023/08/21(月) 11:40:28.26ID:cB09UaOod
>>894
まずconsole.log()や開発者ツールを使って自分の書いたコードがどこまで想定通りに動いてるか確認してみよう
2023/08/21(月) 11:51:22.81ID:7Ts4WfMN0
>>894
コードを見る限り、置換を行うためのコードは一見正しく見えますが、複数の潜在的な問題が考えられます。まず、コード内のいくつかのポイントをチェックしてみましょう。

1. **クラス名のスペル**: `tx-date` クラスが正しく `x-date` クラスになっているか確認してください。

2. **期待する置換変化の確認**: 期待する置換変化がどのようなものか確認してみてください。コード内で `tDate` の内容を `console.log()` を使って出力し、実際の値が正しいか確認できます。

3. **変数 `replaceDate` の設定**: `tBody.split("*")[1]` の部分で、正しい位置に `*` が存在しているか確認してください。`split()` メソッドは対象の文字列を指定の文字で区切って配列にしますが、もし `*` が存在しない場合、期待通りの結果が得られない可能性があります。

4. **置換操作の適用**: `tDate` に対して行った置換操作が、実際のDOM要素に反映されていない可能性があります。`tDate` の内容を変更した後、対応するDOM要素の内容を更新するコードが不足しているようです。

これらのチェックポイントを確認した上で、コードを修正するか、デバッグすることをお勧めします。また、具体的なサンプルHTMLコードや置換の例を提供していただければ、より具体的なアドバイスを提供できるかもしれません。
2023/08/21(月) 12:25:10.86ID:cB09UaOod
このワッチョイ **4bは質問スレにchatGPTの回答貼るだけのボットみたいなもんだからスルー推奨
NG入れといてもいい
2023/08/22(火) 23:04:06.56ID:rPfWctd8a
2か所とも、clas="tx-date" になっている!

class でしょ
2023/08/22(火) 23:12:31.83ID:rPfWctd8a
>const ItemDate = document.getElementsByClassName("x-date");

x-date は、tx-date じゃないの?
2023/08/23(水) 00:10:28.94ID:B78POXf5a
一旦、要素 tDate_elem を取得しておいてから、
その textContent に値を設定する。
つまり更新

const tBody = ItemList.item(i).textContent;

const tDate_elem = ItemDate.item(i) // 要素
const tDate = tDate_elem.textContent;
console.log( tDate ); //=> 0000

const replaceDate = tBody.split("*")[1];
console.log( replaceDate ); //=> 2023.08.15

tDate_elem.textContent = replaceDate; // 設定

表示
おはようございます*2023.08.15
2023.08.15

ごきげんよう*2023.08.20
2023.08.20
2023/08/23(水) 10:39:07.30ID:oZ78uDd8d
>>900
それはもう質問に答えたというよりデバッグと修正を代行したのであってこのスレの主旨には合わない
おそらく他の人もそういう認識だからこの件に口を出さないんだと思うよ
2023/08/23(水) 19:53:27.23ID:ktllvUDta
jQuery なら、もっと簡単

$( function ( ) {

$('.tx-body').each(function (index, elem) {
const tx_body = $(elem);
console.log(index + ': ' + tx_body.text());
const replaceDate = tx_body.text().split("*")[1];
console.log(replaceDate);

// tx_body 要素の次の兄弟で、tx-date クラスがある要素。絞り込み
const tx_date = tx_body.next('.tx-date');
console.log(index + ': ' + tx_date.text());
console.log('tx_date.length: ' + tx_date.length); // 0 or 1

// 該当する要素があれば設定する。つまり更新
if (tx_date.length === 1) {
tx_date.text(replaceDate);
}
});

} );
903デフォルトの名無しさん (アウアウエー Sa22-NwC7 [111.239.174.98])
垢版 |
2023/08/25(金) 21:08:52.47ID:+90wXQAMa
chrome拡張どう作ったらいいのでしょう?
こんな感じではリダイレクトが連続してしまってだめでした
urlsのフィルターの仕方、もしくはリダイレクトをせずにそのURLにアクセスする方法が分かれば解決できるとは思うのですが・・・

//aaa.com/xxxx/ へのアクセスを aaa.com/abc/xxx/ へ変換したい (以下は動作しない)
chrome.webRequest.onBeforeRequest.addListener(
function(details)
{
if (details.url.match(/abc/))
{
return {}; //←ここを書き換える方法が分かればいける
}
else
{
details.url = details.url.replace(/aaa.com/g,"aaa.com/abc");
return {redirectUrl: details.url };
}
},
{
urls: [ "*://aaa.com/*/" ], //←ここを書き換える方法が分かればいける
},
["blocking"]
);
2023/08/26(土) 04:11:22.52ID:wsJDYSi/a
「chrome.webRequest.onBeforeRequest」で検索!

webRequest
https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/API/webRequest
2023/08/26(土) 12:48:58.33ID:mvAl1l0Ba
そこ見てどうすればいいのか分からないからここに来た・・・
2023/08/26(土) 17:41:19.65ID:/LQp1jGld
return detail.documentUrl

とか?
2023/08/26(土) 18:56:03.08ID:mvAl1l0Ba
return detail.documentUrl;
return {redirectUrl: detail.documentUrl};
どちらもダメ。リダイレクトのURLを返すことになるから、リダイレクトの無限ループに入っちゃう

それなら、リダイレクト止めればいいじゃんって思うんだけど
return {cancel: true};
のようにするとナビゲーション自体が止まってアクセスできなくなっちゃう
2023/08/26(土) 19:46:44.48ID:HE/rWC1F0
空のオブジェクト返せばいいんじゃないの?

こんなの見て参考にしては?
https://gitlab.com/ClearURLs/ClearUrls/-/blob/master/clearurls.js?ref_type=heads
2023/08/26(土) 21:15:33.19ID:AeqeuiS+0
無限ループしてるって事は条件分岐失敗してるんじゃないの?
console.logデバッグでもしてみたら?
2023/08/27(日) 12:33:38.16ID:QiCv/PxZr
>>903
リダイレクト後のurlに?foo=barとかクエリ文字列付けてみるとかは?
これでフィルタにかからなくなるみたい
もちろんこれでサーバが誤動作起こさないのが前提だけど
911デフォルトの名無しさん (ワッチョイ cf63-n242 [153.218.137.10])
垢版 |
2023/09/03(日) 21:37:03.60ID:0BSqvC2P0
サイト内にフォームが設置してあるページが複数あります
お問い合わせ、新規登録、ログイン、パスワードリマインド、などです
一時的に inputタグを入力不可にしたのですが
querySelectorAll("input,button").forEach( e => e.disabled = true );

複数あるページのうちお問合せだけは入力できるように、
現在は下記の効率の悪い記述になっています、、
document.querySelectorAll("#contact input, #contact button").forEach( e => e.disabled = false);

それぞれのページの<body>に idを付与していてそれで判別しているのですが
<body id="contact">
<body id="login">
<body id="remainder">

もっとスマートにお問い合わせページだけ入力できる
ヒントをお願いできませんでしょうか?
2023/09/03(日) 21:48:21.38ID:qR1Ry2o90
【環境】windows10 chrome 最新版
【何をしたのか】開発ツールコンソール上でサンプルコードを実行すると
条件文が undefined にもかかわらず if 文内 console.log(1) が実行される
【エラーメッセージ】なし
【期待する結果】 なぜこうなるのか理由が知りたいです
【サンプルコード】
console.log(localStorage && (localStorage.getItem('deck')));
if(localStorage && (localStorage.getItem('deck'))) console.log(1)
if(undefined) console.log(2)
2023/09/03(日) 23:01:09.12ID:zsKKxMoe0
>>912
console.log(localStorage && (localStorage.getItem('deck')));
の結果は本当にundefined?、undefinedの上の行に何か表示されてるよね?
2023/09/03(日) 23:17:01.93ID:II4MkDPZM
>>911
下記セレクタでイケるはず(問い合わせページ以外でinput要素とbutton要素を抽出)

body:not(#contact) :is(input, button)
2023/09/03(日) 23:33:36.04ID:II4MkDPZM
>>912
下記のログ出力はどうなる?

console.log(localStorage.getItem('deck') !== undefined ? 'バカめ!!よく確認しろ!!' : 'undefined です');
2023/09/04(月) 13:53:40.48ID:R0PWdUab0
>>913
コンソール出力結果は

undefined
1
undefined

です

>>915
バカめ!!よく確認しろ!!
undefined

になります
2023/09/04(月) 14:44:17.50ID:0gdMzEOZM
getItemは該当キーに対する値がなければundefinedではなくnullを返すのでlocalStorageが存在していれば

console.log(localStorage && (localStorage.getItem('deck')));は
null
undefined
と出力される

undefinedの上が空行になってるならdeckに対する値が入ってる
それが空文字ならfalsyなのでconsole.log(1)は実行されない
truthyな不可視文字(例えば改行コード)が入っていればconsole.log(1)も実行される
inspectやencodeURIで中身に何が入ってるか確かめればはっきりさる
2023/09/04(月) 14:45:10.48ID:I1Zu7zQTM
はっきりさる!
2023/09/04(月) 15:37:52.51ID:R0PWdUab0
あー わかりました
"undefined" っていう文字列がすでに入っちゃってたみたいです

丁寧に回答いただいてありがとうございました!
2023/09/04(月) 15:59:10.40ID:KQbfSHx50
ウキキ🐒
input セレクタで解決しましたカッコイイ記述ありがとうございます
2023/09/05(火) 12:01:10.43ID:y2XoXHZcr
>【何をしたのか】開発ツールコンソール上でサンプルコードを実行すると
>条件文が undefined にもかかわらず if 文内 console.log(1) が実行される
不可解な挙動に遭遇したとき、自分が何か勘違いしてないかまずそこを疑ってみようという教訓
あとtruthyやfalsyな値の取り扱いは慎重に
2023/09/28(木) 14:42:04.81ID:Pzc86hhG0
ほんまに、助かったで!
2023/10/04(水) 23:59:59.93ID:77DZdeZo0
if(rd41.value){
dofn()
}

これが正しく実行されないのですが(暴走するというか、意味不明な実行結果が現れます)、if文の中で関数の呼び出しは出来ないのでしょうか?
もしそうなら、このコードを正しく動作するように書き換えることは出来ますか?
2023/10/05(木) 02:54:19.96ID:pCa3KI6i0
普通に動作しました
すみません
2023/10/16(月) 00:30:39.82ID:tJl0Ngd50
質問です
下記のURLは音楽サイトJangoの再生ページURLです

 https://www.jango.com/stations/400536192/tunein
 https://www.jango.com/stations/397649609/tunein
 https://www.jango.com/stations/272072365/tunein

これらのページをブラウザで開いた時に出てくる水色のメッセージ
パネルをJavaScriptで閉じる方法を教えてください

Jango plays unlimited music for free and with no commercials.

というメッセージの右隣にある[×]マークをクリックしたいのですが

document.getElementsByClassName("MuiAlert-action")[0].click()

では上手くクリックすることができませんでした
2023/10/16(月) 00:54:14.00ID:SqBXoLFp0
document.querySelectorAll(“.MuiDialog-container,.MuiBackdrop-root”).forEach(e => e.remove())
2023/10/16(月) 08:33:51.49ID:tJl0Ngd50
>>926
早速ありがとうございます
ただ、注意深くコピペして実行させたのですが
残念ながらメッセージパネルは閉じられませんでした
2023/10/16(月) 09:38:31.66ID:9MW6cr+O0
document.querySelector(".MuiSnackbar-anchorOriginTopCenter").remove()
2023/10/16(月) 10:55:49.91ID:tJl0Ngd50
>>928
すいません、それもダメみたいです
2023/10/16(月) 11:01:33.63ID:tJl0Ngd50
ブラウザ上の全然関係ない場所をクリックして自己解決しました

document.elementFromPoint(1, 1).click()

根本的な問題から逃げたようで悔しいですけどw
2023/10/24(火) 20:00:13.55ID:xAzUmtPF0
>>925
誰一人解決できなかったのか?
すまん、俺もわからんw
2023/10/25(水) 13:36:08.76ID:JRNrMb5/0
名前付き引数としてプロパティをもつオブジェクトを引数にする場合のJSDocの書き方ってどう書くのが正しいのでしょうか?
ネットで調べて以下の画像のように書くと、VSCodeで関数の説明で表示される時にプロパティ側の日本後説明部分が表示されません。
http://imgur.com/xhSQcMc.png

構文のほうには型は反映されてるので読み込めてはいるようなのですが…
2023/10/26(木) 10:06:04.96ID:QIG+kzYs0
source = ['いぬ=ドッグ', 'ぬこ=猫咪', 'キャット=にゃんこ', 'ねこ=キャット', 'わんこ=小狗', '老鼠=ねずみ', '小狗=ドッグ', 'マウス=ねずみ', '猫咪=キャット']
これを
result = [['いぬ', 'ドッグ', 'わんこ', '小狗'],
['ぬこ', '猫咪', 'キャット', 'にゃんこ', 'ねこ'],
['老鼠', 'ねずみ', 'マウス']]
これに集計するにはどうしたらいいですか
2023/10/26(木) 12:52:26.88ID:jSMDhhI40
>>933
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
2023/10/26(木) 12:52:36.47ID:jSMDhhI40
>>933
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
936デフォルトの名無しさん (ワッチョイ a710-7pXc [180.12.82.129])
垢版 |
2023/10/26(木) 13:05:50.11ID:m2KCtDyt0
canvasでarc関数でx:100,y:100の位置に青で塗りつぶした半径3の円を描いたんですが
これと同じ位置に同じ半径で同じ色で塗りつぶした円を描くと四角形ぽくなってちょっと大きくなって表示されます。
背景を塗りつぶして1回目に描いた円を一度消去してから2回目の円を描いても同じでした。
文字の場合でも同じ位置に同じ文字を重ね書きすると太くなっちゃいました。
どうすればちゃんと同じ位置に同じ物を描いても太くならないようにできますか?
2023/10/26(木) 22:17:18.42ID:npbiXWKI0
>>933
それは質問ではなくて丸投げと言います
2023/10/27(金) 08:04:19.82ID:93zv19AS0
>>933
競技プログラミングのスレで聞いて!

これは、UnionFind で、3つの木になる

UnionFind は、プログラミング・コンテスト・チャレンジブック(蟻本)に載っている
939デフォルトの名無しさん (ワッチョイ 639d-XI6K [109.236.1.125])
垢版 |
2023/11/13(月) 18:52:10.34ID:qEXCkkFf0
alertのテキストをコピペする方法とかってご存知ありませんか?

どなたか知恵をお貸しください
2023/11/13(月) 22:10:22.42ID:FIfUHr+c0
質問したいなら詳しく書こうね
2023/11/14(火) 02:43:20.79ID:MYkZh+2q0
>>939
alertのテキストをコピーするには、通常はウェブページ上でalertが表示されている状態で、テキストを選択して右クリックし、"Copy"や"コピー"を選択する方法があります。ただし、ウェブサイトのalertはJavaScriptで生成されるもので、そのテキストを直接コピーする方法は制限されていることがあります。可能であれば、そのテキストを手入力でコピーすることができます。
2023/11/14(火) 19:07:48.92ID:WEqhXBJy0
検索すれば?
コピーを防ぐ方法は、幾つかある

ブラウザのF12 ボタンの開発者ツールで調べるとか
2023/11/14(火) 20:45:30.47ID:Mc/CoQSw0
>>939
マルチボスト先に答えがある
https://mevius.5ch.net/test/read.cgi/hp/1478002550/706-
2023/11/15(水) 11:30:55.95ID:FHoogchzH
>>936

亀だけど
fill()が複数回呼ばれると円が太るみたい
ctx.arc(100, 100, 3, 0, Math.PI * 2);
ctx.fill();
ctx.arc(100, 100, 3, 0, Math.PI * 2);
ctx.fill();
でなく、
ctx.arc(100, 100, 3, 0, Math.PI * 2);
ctx.arc(100, 100, 3, 0, Math.PI * 2);
ctx.fill();
でやると円が太らなかったよ
945デフォルトの名無しさん (ワッチョイ e374-n7Dx [211.124.81.22])
垢版 |
2023/11/15(水) 12:39:52.38ID:D0hDoGTF0
亀が2chに書き込みにやってきた
2023/11/17(金) 20:41:48.61ID:oUDu0vRd0
console.log()のlogってどういう意味ですか?
printとかputじゃなくてlogで出力って珍しいですね
947デフォルトの名無しさん (ワッチョイ e302-8oJ/ [27.94.242.45])
垢版 |
2023/11/18(土) 14:13:31.53ID:mHEv1Kbm0
consoleオブジェクトのログ情報を出力するためのlogメソッド…
948デフォルトの名無しさん (アウアウウー Saa1-UHOz [106.180.4.201])
垢版 |
2023/11/18(土) 16:58:25.29ID:rXJKESWNa
blogのlog
2023/11/18(土) 18:26:17.47ID:vb+682X10
彼岸島の名産品
2023/11/18(土) 23:53:58.59ID:rj8Lk8BJ0
…どこまで信じたらいいの?

>>947
ありがとうございます
2023/11/19(日) 10:42:09.47ID:HAfvoabg0
いえいえ
2023/11/20(月) 16:19:56.96ID:q8v/AXQl0
const arr =Array(3).fill([]);
arr[1].push(0);
console.log(arr);

この場合arrは[[], [0],[]]になっていることを期待するのですが実際には[[0], [0], [0]]となっています
まったく納得いかないのですがなぜですか
2023/11/20(月) 16:41:25.42ID:LC62eXy40
>>952
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#value
>配列を埋める値。もし value がオブジェクトであれば、配列のそれぞれの要素はそのオブジェクトを参照します。
2023/11/20(月) 16:49:32.78ID:q8v/AXQl0
>>953
fillがそういう仕様なんですね
納得です
ありがとうございました
2023/11/21(火) 08:31:09.87ID:reAksYQu0
いえいえ
2023/11/21(火) 23:06:08.47ID:Hk8WzggI0
変数宣言の際に、letよりconstを積極的に使うべき、とされているのはなぜでしょうか?
後で値を変えられるletの方が便利だと思うのですが
2023/11/22(水) 00:26:41.03ID:nlRha+4K0
JSにかかわらず変数は使ってる道中に値変換したり変数使いまわしてるとエラーの種になりやすいし、それを防止するのが大きいかな
配列やオブジェクトの値はconstでも変えられるし

昔はそういうごちゃごちゃ動く変数のトレースするのもプログラム組むやつの能力ってされてたなぁ
2023/11/22(水) 03:01:31.39ID:KDSVu4Ne0
コードを上から読んでいく時にconstだとこの値は後から変わることがないと決めつけて読むことができる
letだとどこかで書き換えられるのに注意しながら読まないといけない
959デフォルトの名無しさん (ワッチョイ e302-8oJ/ [27.94.242.45])
垢版 |
2023/11/22(水) 10:49:23.49ID:5A+ZhXZi0
可読性の部分が大きいよね
varで変数定義しているクソコードなんかリファクタリングしたくないだろ?
960デフォルトの名無しさん (ワッチョイ e302-8oJ/ [27.94.242.45])
垢版 |
2023/11/22(水) 11:06:59.29ID:5A+ZhXZi0
constで最初から定義した後にそれが動的な値だった場合タイプエラーを起こしてからletに書き換える事はあるけど最初からletで定義しちゃうと後々constに書き換えた場合もしそれが動的な値ならプログラムそのものが動かなくなって新たなるバグを生むでしょう?
最初は縛りを強くしておいて後から緩めるはあるけど逆はないですよ
2023/11/22(水) 15:03:20.05ID:hF+LjdVs0
条件によって const の値を変えられるようになるといいんだけどな。
簡単なのなら参考演算子でやれるけど。
962デフォルトの名無しさん (ワッチョイ e302-8oJ/ [27.94.242.45])
垢版 |
2023/11/22(水) 20:15:59.75ID:5A+ZhXZi0
>>961
よくわからないけどそれってconst使う意味あるの?
2023/11/22(水) 20:54:04.80ID:FIiKhTS50
察するに初期代入時に場合によって違う値を入れたいということだろう
三項演算子を出してるし
2023/11/22(水) 21:26:20.43ID:VeafCB/q0
答えてくれた方々ありがとうございました
積極的にconstを使っていきたいと思います
2023/11/22(水) 21:54:03.90ID:7CtxEw9g0
>>962
うまい例になってるかわからないけど、何かのプロパティに値が入ってたらそれ、無ければデフォルト値を const に入れたいとか、この条件がもっと複雑になった感じとか。
あるいは、何かの基準座標を const に入れたいけどその値は一発では求まらないとか。
単にこれだけなら中間的な変数を使って値を求めて、最後に const に代入するって手もあるだろうけど、中間的な変数はスコープから追い出したいのにできないよね。

const x;
{
let a, b, c;
:
x = a + b * c;
}

みたいにできれば a b c はスコープから追い出せるけど、実際は

let a, b, c;
:
const x = a + b * c;

ってやらざるを得なくて、x が存在するスコープから a b c を追い出せない。
この計算を function に切り出せよと言うかもしれないけど、できればそうすりゃいいけどどこにでも適用できるというわけでもない。
2023/11/22(水) 22:23:44.12ID:lZKHNjwl0
調べてみると苦肉の策で↓みたいな書き方が紹介されてたけど可読性考えるとどうだろうね
const x = (() => {
let a, b, c;
:
return a + b * c;
})();
2023/11/22(水) 22:52:37.25ID:8gAUwwkj0
関数に切り出さない意味がわからない
2023/11/23(木) 00:25:34.14ID:9np+Rtrn0
欲しいのはただのブロックなのに関数として書かなければならないというのが余計なことをやらされている感はある。
2023/11/23(木) 01:53:09.12ID:pAGXWPD10
var使え
2023/11/23(木) 15:16:53.54ID:d47OCYFA0
>>966
処理の結果として複数の const、例えば x y を求めたい時は、その書き方でも難があるよね
2023/11/23(木) 15:39:42.20ID:98Thj8w70
>>970
その場合はタプルで受け取るようにすれば問題ないよ
const [x, y] = (() => {
let a, b, c;
:
return [a + b * c, a * b + c];
})();
2023/11/23(木) 15:58:06.00ID:d47OCYFA0
>>971
ああ、それが現状の最適解な気がするね。
後で汎用関数化したくなっても対応しやすいし。
まあ >>968 みたいな感覚はあるし、関数としてのコストも気になっちゃうけど。
2023/11/29(水) 23:49:26.08ID:oO9dmq1+0
const num = 1;
とした時、numはCやJavaのint型と違って、1という値のオブジェクトを参照している
という理解でよろしいでしょうか?
(numという名前でラベリングされたメモリ領域には、1そのものではなく
数値オブジェクトへの参照値が入っている?)
2023/11/30(木) 04:02:01.17ID:uIFlL3tD0
>>973
1 はプリミティブ値。
Object型ではない。
2023/11/30(木) 22:41:28.93ID:l5hD/Y3Y0
>>974
レスありがとうございます

分かりました
文字列('Hello World'など)もプリミティブなんですよね
どうやって内部で実装されてるんですか?
2023/11/30(木) 22:57:08.84ID:mSFTiyup0
MDNをまず読みましょう
https://developer.mozilla.org/en-US/docs/Glossary/Primitive
2023/11/30(木) 23:13:04.35ID:5k4SwxyG0
>>973
実装的には全て参照扱いだよ
ただし数値の場合は参照(ポインタ)そのものに数値を埋め込むという方法
だから全て参照だけどメモリは消費しないというハック
2023/12/01(金) 01:54:56.09ID:Bo4sqMI/0
>>975
質問が大雑把過ぎる
もっと具体的に詳しく
2023/12/02(土) 04:48:25.07ID:3pMMmiCv0
返信くれた方々、ありがとうございます

>>976
TOEICのスコア400点台だったので厳しいです…

>>977
参照扱いでもプリミティブ型って言うんですか?
Javaではintやdoubleなど参照を用いずにデータを記憶する型をプリミティブ型と
呼んでいたので、少し混乱しています…

>>978
すみません、以後気を付けます
2023/12/02(土) 10:49:58.14ID:qpNh64Np0
>>977は気にしなくていいよ
英語苦手でもプリミティブには7つの型がある、ぐらいは読めるだろう
あと日本語のページがないか調べるぐらいはしよう
https://developer.mozilla.org/ja/docs/Glossary/Primitive
2023/12/02(土) 11:43:24.98ID:/unkk9Eq0
>>979
そもそもそんなことを気にしてどうするの?
何がしたくての質問?

ぶっちゃけ表向き気にするべきなのは、その変数 a を別の変数 b に代入して、b を操作したら a まで同じように変わるのかどうかだけだと思うよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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