X



JavaScript の質問用スレッド vol.126
0001デフォルトの名無しさん (オッペケ Sr9f-tek/ [126.254.232.20])
垢版 |
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
0002デフォルトの名無しさん (オッペケ Sre1-tek/ [126.254.232.20])
垢版 |
2023/12/09(土) 17:41:59.25ID:Mnb70srnr
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 https://plnkr.co/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■次スレの立て方
本文一行目に「!extend:checked:vvvvvv:1000:512」と書いて、>>1-5のテンプレの「前スレ」「関連スレ」を最新化して立ててください。

■JavaScriptスレの現状
元々はWeb制作板が本スレでしたが、ライブラリ信者に荒らされ、プログラム板に避難所として本スレが立てられました。
Web制作板の本スレは荒らされてから次スレが立っておらず、重複スレの消化のみとなっています。
実質的に本スレは存在しない為、質問者はWeb制作板、ブログラム板のどちらのスレで質問しても問題ありません。
0003デフォルトの名無しさん (オッペケ Sre1-tek/ [126.254.232.20])
垢版 |
2023/12/09(土) 17:43:26.17ID:Mnb70srnr
■関連スレ(Web制作板)
JavaScript の質問用スレッド vol.126 (重複スレの消化)
https://mevius.5ch.net/test/read.cgi/hp/1439005423/
JavaScript ライブラリ総合質問所 vol.5
https://mevius.5ch.net/test/read.cgi/hp/1465399470/
jQuery 質問用スレッド vol.7
https://mevius.5ch.net/test/read.cgi/hp/1466750494/

■各種仕様
◆ECMAScript
http://bclary.com/2004/11/07/ (ECMAScript 3 HTML版)
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/ (ECMAScript 3 和訳)
https://262.ecma-international.org/13.0/ (ECMAScript 2022)
◆HTML Standard (HTML5)
http://www.whatwg.org/specs/web-apps/current-work/multipage/ (HTML Living
Standard)
https://momdo.github.io/html/ (HTML Living
Standard日本語訳)
0006デフォルトの名無しさん (ワッチョイ 5510-yLTa [222.230.65.145])
垢版 |
2023/12/10(日) 16:33:48.20ID:ngtmyS7f0
前スレで日付変換の関数で質問していた者です。

開発環境としましては、AndroidのmementoというDBを制御するために、Javascriptの使用が可能なので、試しに勉強してみようと思った次第です。

コードエディターや>>2記載のサイトでは正常動作をしていることから、開発環境に問題があると判断しました。ただそうなるとDBと合わせて使用できるメリットが無くなるので代替手段を模索しているところです。

成功例(日時が2つ表示)
https://i.imgur.com/qxdJGAV.jpg

失敗例
(consolelogに対応しないため、コメントアウトしていますが、関数が結果に出力される。何も表示されないはず。)
https://i.imgur.com/ldegoqM.jpg

コードエディター
https://play.google.com/store/apps/details?id=com.rhmsoft.code

memento
https://play.google.com/store/apps/details?id=com.luckydroid.droidbase
0008デフォルトの名無しさん (ワッチョイ 5510-yLTa [222.230.65.145])
垢版 |
2023/12/10(日) 16:34:43.88ID:ngtmyS7f0
// DateをYYYY/MM/DD文字列に変換する
function dateToYyyymmdd(date){

let n = date.getFullYear().toString();
n = date.getFullYear().toString() + "/";
n +=
(date.getMonth()+1).toString().padStart(2, "0") + "/";
n +=
date.getDate().toString().padStart(2, "0") + "_";
return(n);
}
0012デフォルトの名無しさん (ワッチョイ ed27-tek/ [2400:2200:6f2:ad4b:*])
垢版 |
2023/12/10(日) 17:01:58.34ID:uEdCnVbW0
>>10
https://wiki.mementodatabase.com/index.php/JavaScript_field
>but only the result of the last operation will be entered into the field.
とあるから最後の文の値が結果値として採用される
だからtimeToHhmm関数自体が結果になっている

修正したければコードの最後に
const result = stDate + stTime + " " + edDate + edTime
などと追加すればその値が結果値として採用されるんではないだろうか
0013デフォルトの名無しさん (ワッチョイ 5510-yLTa [222.230.65.145])
垢版 |
2023/12/10(日) 21:02:11.63ID:ngtmyS7f0
>>11,12
まさに仰るとおりでございました。
最後に出力文を置くことで正しく稼働を確認できました。
改めて調べようが足らなかったことを痛感しました。正直自分の中に『これ、なんかバグってるのかな…』などと考えてしまってた所もありましたが、単に仕様であったことに恥ずかしさとプラットフォーム開発者に申し訳ないですね。
wikiもしっかり読み込んで改めて勉強しなおしてみます。
本当にありがとうございます。
長々と失礼しました。
001614 (ワッチョイ 4f1d-Qk2W [180.178.89.53])
垢版 |
2023/12/16(土) 12:33:00.76ID:3Jo1PIzy0
>>15
レスありがとうございます

単純に、nullは「空」、undefinedは「未定義」と理解しておけばいいでしょうか?
うーんでも、空だから未定義であるとも言えるし、未定義だから空とも言える気もします
難しく考え出すとハマりますね…
001814 (ワッチョイ 4f1d-Qk2W [180.178.89.53])
垢版 |
2023/12/16(土) 13:09:24.81ID:3Jo1PIzy0
>>17
レスありがとうございます

自分なりに少し調べてみたら、
undefinedは「これから何かしらの値が入る余地があるがまだ定義されていない」
nullは「値が入りようがないから空」
という違いがあるみたいですね
002014 (ワッチョイ 4f1d-Qk2W [180.178.89.53])
垢版 |
2023/12/16(土) 16:34:04.63ID:3Jo1PIzy0
>>19
はい、それなりに理解出来たと思います
ありがとうございます
JSでは、undefinedに比べるとnullの登場頻度はかなり低いみたいですね
0022デフォルトの名無しさん (ワッチョイ 4f10-n6T6 [180.12.82.129])
垢版 |
2023/12/18(月) 12:29:54.63ID:UBFKxLGp0
配列の宣言はvar list=[];
オブジェクトの宣言var obj={};
配列の配列の宣言は var list=[[]];
ではオブジェクトの配列の宣言はどうすればいいですか?
var obj={[]};のようにしてもできませんでした。
obj["aaa"][0]=100;
obj["bbb"][1]=200;
のように値を入れたいです。
0023デフォルトの名無しさん (ワッチョイ 4f10-n6T6 [180.12.82.129])
垢版 |
2023/12/18(月) 12:38:38.33ID:UBFKxLGp0
配列のオブジェクトって言った方が正しいのかわからないけど
とにかく>>22のように代入したいんです
0024デフォルトの名無しさん (ワッチョイ 0e2a-YOgt [240b:10:8401:ab00:*])
垢版 |
2023/12/18(月) 12:58:21.29ID:kn95Gf6w0
[[]] 配列を入れ子にしても1番目の要素を[]に初期化しているだけで
配列として使いたい場合に必要な手順ではない
仮に1番目を[1,2]、2番目を[3]にしたい時に操作が変わってしまうので邪魔なだけ
配列は空のまま [] で十分

あとconst/letじゃなくvarで書くスタイルは古い
参考にした情報があるなら忘れよう
更新もせずずっと放置しているなら害悪でしかない
0029デフォルトの名無しさん (ワッチョイ 4f10-n6T6 [180.12.82.129])
垢版 |
2023/12/18(月) 18:21:51.41ID:UBFKxLGp0
>>24-28
ありがとうございます
0030デフォルトの名無しさん (ワッチョイ 4f10-n6T6 [180.12.82.129])
垢版 |
2023/12/18(月) 23:55:35.85ID:UBFKxLGp0
オブジェクトのkeyにelementを使うのは不具合になりますか?
const element = document.getElementById("test_id");
const element2 = document.getElementById("test2_id");
let obj ={};
obj[element] = 200;
obj[element2] = 300;というような感じです
一応動作はしたけどやらないほうがいいんですか?
0032デフォルトの名無しさん (ワッチョイ 0343-Qk2W [2001:268:9a84:9fef:*])
垢版 |
2023/12/19(火) 00:31:33.88ID:z6V4TATi0
const element = 何々
で、elementがオブジェクトなら、キーに使ってはならない。
primitive なら、キーに使える

この表記は、constがついていても、
そのオブジェクトの中身・内容は変えられるから、
本当の意味のconstではない

Ruby では、オブジェクトをfreeze すると、浅い第1階層で変更できなくなる。
変更できなくなった部分に、次の第2階層のオブジェクトがあれば、そこは変更できる!

だから完全に深い階層まで、再帰的にfreezeしないと、
本当の意味でfreezeにならない

>>20
undefined はユーザーが作り出せないものだから、
普通は空を表すのに、null を使う

Rubyのnil と同じ
0034デフォルトの名無しさん (ワッチョイ 4f10-n6T6 [180.12.82.129])
垢版 |
2023/12/19(火) 12:32:27.47ID:wIcY707L0
>>31
確認したら期待通りに動きました

>>31-33
ありがとうございます
0038デフォルトの名無しさん (ワッチョイ 0274-mQNm [211.124.81.22])
垢版 |
2023/12/20(水) 13:23:41.58ID:QAvRAUPM0
JavaScriptで関数を変数に代入できると聞いて、
物理学で万物が粒子だけでなく波としての性質も合わせもつと聞いたときと同じくらいの衝撃を受けました。
どうもこのJavaScriptで関数を変数に代入できるという考えがしっくりこないのですが、どう考えれば受け入れられますか?
0041デフォルトの名無しさん (ワッチョイ 23cf-j1fn [2404:7a82:3de0:3500:*])
垢版 |
2023/12/21(木) 01:46:28.22ID:9dULh+b20
>>38
実態からはかけ離れるけど、メソッドが1個しかないオブジェクトの特別な扱いだと捉えるとどうだろう?

関数を変数に代入できるというのは、C言語のような古いものでも関数ポインタという形で実現してる。
関数はそのコードがメモリ上に配置されていて、関数の呼び出しはそのメモリのアドレスにジャンプするという形で行われるけど、そのジャンプ先のアドレスを変数に入れる感じ。
JavaScript ではクロージャって概念でもっと高度だけど、代入された変数には結局その関数の在りかが紐づけられてる。
0043デフォルトの名無しさん (ワッチョイ 2279-F8eA [61.192.187.100])
垢版 |
2023/12/22(金) 21:46:22.69ID:nFOKM4xK0
LISP→Scheme→Javascriptという歴史的経緯があるのでそこから理解すると判りやすいかも
コードはLISPにとってはただのリストというデータ表現でしかなかったのでコードを変数に代入するというのはとても自然な事だった
Schemeでレキシカルスコープが定義され一般的なクロージャの形になった
括弧だらけの構文は一般受けしないのでCっぽい構文のJavascriptが生まれた
ざっくり書けばこういうわけです
0046デフォルトの名無しさん (ワッチョイ 3f79-Eb5K [61.192.187.100])
垢版 |
2023/12/23(土) 18:09:35.53ID:87/jUj+m0
>>39-41は代入できますって以上の説明はできてないし
ショックを受けた38が知りたいのはそういう事じゃないんだろう
Coders at WorkによればJavaacript設計者のブレンダン・アイクはSICPとSchemeの崇拝者で、
最初のアイデアはNetscapeブラウザにSchemeを持ち込むことだったとの事だよ
まずはSICPでも読むといいんじゃないの
0054デフォルトの名無しさん (アウアウウー Sa17-Krj3 [106.155.25.196])
垢版 |
2023/12/24(日) 14:20:26.14ID:eKX/4s7na
>>52
だいぶ違うぞ
クロージャって言葉知ってる?
定義された場所のローカル変数を参照できるの
そしてローカル変数がクロージャによってキャプチャされたら
その変数はクロージャが死なない限りずっと保持される
これは関数ポインタとは訳が違う
そしてそれこそがscheme信者のアイクが取り入れたかったもの
クロージャじゃないなら関数ポインタと大して変わらんっちゃ変わらん
0055デフォルトの名無しさん (ワッチョイ 13b1-l39z [2001:240:242e:2802:*])
垢版 |
2023/12/24(日) 15:20:54.55ID:D70pmwho0
>>54
関数がクロージャを形成するかどうかと
関数を受け渡すときに関数へのポインタを使ってるかどうかは直交した別の問題
実際どのJavaScriptエンジンも関数へのポインタを使って変数への代入や関数の受け渡しを実現している

C言語はクロージャをサポートしないのでC言語の関数ポインタを使ってもクロージャにはならないのは当たり前

もう少し言えば関数を受け渡し可能にするためのスコープ解決の仕組み/ルールと受け渡す際に関数へのポインタを使ってるかどうかは別の問題
0056デフォルトの名無しさん (ワッチョイ 13b1-l39z [2001:240:242e:2802:*])
垢版 |
2023/12/24(日) 15:53:19.34ID:D70pmwho0
別スレで見かけたトンデモ記事書いてる人だと思うけどレキシカルスコープの話と第一級関数の話とレキシカルスコープを使ったクロージャによって第一級関数を実現する話を混同してるんじゃないか

Schemeはレキシカルスコープを使ったクロージャという考え方を広く普及させた言語ではあるがレキシカルスコープや第一級関数はScheme以前の昔から実現されてたものだし
レキシカルスコープを使ったクロージャもScheme以前の昔からあった考え方

Schemeが初めてレキシカルスコープを定義したかのように書くのはやめよう
0060デフォルトの名無しさん (ワッチョイ cfb1-llxg [2400:4050:afe0:3700:*])
垢版 |
2023/12/24(日) 19:40:11.40ID:3LVtZ1UM0
彼は命題論理が理解できなくて、120年前の古文書まで読み返して、それでも分からなくて200年前の哲学書まで遡った結果、今でも命題論理が分かってないって人間だから、彼の歴史的経緯を遡れば理解しやすくなるって主張は実は彼自身によって反証されてたりする
006238 (ワッチョイ bf74-uzyf [211.124.81.22])
垢版 |
2023/12/24(日) 23:33:56.01ID:M3Ha8RQ30
さっぱり分からん
0064デフォルトの名無しさん (ワッチョイ 8f56-ryOq [2001:268:9af4:708a:*])
垢版 |
2023/12/25(月) 06:04:30.08ID:G5r1XQvR0
クロージャは第一級市民関数。
関数外のローカル変数などの文脈を取り込む。
つまり、スコープがゆるい

一方、Ruby の関数はスコープがきつくて、
関数外のローカル変数を通さないので、第一級関数ではない。
ただし、ブロックはブロック外のローカル変数を通すから、クロージャ

他に、レシーバーとメソッドを持ち運ぶ、メソッドオブジェクトもある
0067デフォルトの名無しさん (アウアウウー Sa17-Krj3 [106.155.20.162])
垢版 |
2023/12/25(月) 21:28:48.99ID:XllulW5ca
struct Closure {
struct Env env;
struct Function func;
};

Closureの最もシンプルな実装
Envはキャプチャしたローカル変数を保持する環境
Functionは関数ポインタやらを保持してるオブジェクトだと思ってくれ
たったこれだけのことに過ぎない
関数ポインタにenvが追加されただけのものだ
0069デフォルトの名無しさん (ワッチョイ 6318-taje [2400:2200:39a:aa64:*])
垢版 |
2023/12/26(火) 12:17:20.00ID:iZHdB3Jl0
結局のところ>>38の問題って関数は変数に代入できないものだっていう固定観念を他の言語に持ち込んでるところだと思う

プログラミング言語なんて所詮ヒトがそれぞれの都合で作ったものであって言語が違えば考え方や常識も違う
そこを理解して他の言語の固定観念を持ち込まないようにしないとこの先もしっくりこないこと、受け入れられないことだらけだろう
0070デフォルトの名無しさん (ワッチョイ efc9-l39z [2001:240:247c:3ea8:*])
垢版 |
2023/12/26(火) 18:41:41.07ID:DtaEhUmP0
関数を変数に直接代入できないCの系譜の言語が最も広く普及してるから
そういう言語をやってきた人が関数を変数に直接代入できる言語に初めて接したら>>38のように驚くのは極々自然のこと

何が固定観念なのかなんてそれが覆るまで分からないんだから固定観念を持ち込むなとか言っても何の役にも立たないよ
0073デフォルトの名無しさん (ワッチョイ 1f74-rafF [211.124.81.22])
垢版 |
2024/01/05(金) 09:10:31.40ID:PLcvVAqJ0
>>72
いますぐ糞をして寝ることだ。
糞!
0074デフォルトの名無しさん (ワッチョイ 1f74-rafF [211.124.81.22])
垢版 |
2024/01/05(金) 09:12:10.60ID:PLcvVAqJ0
X = 糞長い式 ? 糞長い式2 : X;
0079デフォルトの名無しさん (ワッチョイ fd9f-stEI [122.133.203.183])
垢版 |
2024/01/08(月) 08:24:08.50ID:HV7sMHf30
質問させていただきます。

タグの属性onclick等で設定したイベント処理では
処理側の関数ではeventオブジェクトを参照出来ないのでしょうか?

色々探してるのですが見つけられなくて・・・よろしくお願い致します。
0081デフォルトの名無しさん (ワッチョイ 8d43-iBaE [114.148.50.247])
垢版 |
2024/01/08(月) 10:51:13.68ID:adS5ZNXz0
>>79
引数で渡されてくるけど?
HTMLのタグの中に書く事例では意味も解らずその引数を省略しているのが多い

それより、今どきはHTMLと分離した、こっちの書き方がおすすめ
https://developer.mozilla.org/ja/docs/Web/API/Element/click_event
0084デフォルトの名無しさん (ワッチョイ fd2e-dvWY [2001:268:9a3d:8302:*])
垢版 |
2024/01/08(月) 20:55:54.87ID:gJaMg8aw0
例えば、jQuery なら、これで5つのキーのkeydown をキャッチできる

$( function ( ) {
$( 'body' ).keydown ( function( e ) {
switch( e.key ) {
// 32:空白、37:←、38:↑、39:→、40:↓
case " " :
case "ArrowLeft" :
case "ArrowRight" :
case "ArrowUp" :
case "ArrowDown" : console.log( e.key );
}
} )
} );
0086デフォルトの名無しさん (ワッチョイ 0510-JApz [180.12.82.129])
垢版 |
2024/01/11(木) 09:49:12.76ID:L0eqWFW50
子要素は含まないようにelementを取得するにはどうすればいいですか?
これだとテーブルの中のフォームをスライドさせてもalertが表示されてしまいます。
子要素は含まないテーブルのみのelementを取得することはできますか?


<table style="width:500px;height:300px;background:#ffff00" id="aaa">
<tr><td><input type="range" style="width:inherit"></td></tr>
</table>

<スクリプト>
const elm = document.getElementById("aaa");

elm.addEventListener(

"mousedown",
function(e){alert("www");}

);
</スクリプト>
0087デフォルトの名無しさん (ワッチョイ b536-QPx5 [2400:4052:5062:9ff0:*])
垢版 |
2024/01/11(木) 10:30:37.07ID:8+5yXztZ0
何をやりたいのかがわからない説明
とりあえずプログラムを意識せずに
やりたいことの要件を日本語でよろしく
 
0089デフォルトの名無しさん (ワッチョイ 0510-zseD [180.12.82.129])
垢版 |
2024/01/11(木) 13:03:40.31ID:L0eqWFW50
>>87
子要素を除外したelementを取得したいってことっす
>>88
ありがとうございます試してみます
0090デフォルトの名無しさん (ワッチョイ b536-QPx5 [2400:4052:5062:9ff0:*])
垢版 |
2024/01/11(木) 14:18:15.97ID:8+5yXztZ0
それ、バブリングを意識しないとダメかもよ
0091デフォルトの名無しさん (ワッチョイ 231b-JApz [2400:4151:a4a0:6500:*])
垢版 |
2024/01/11(木) 14:44:36.31ID:bfPtSoSL0
先ほどは手元にソースコードがなかったので即席で質問してしまいました。
やりたいことはテーブル部分でタッチムーブしたときブラウザのスクロールを禁止にしたいのですが、
テーブルにあるスライダーまでロックされて動かせないようになってしまうので、
スライダーを除外したテーブル部分のelementだけ取得できれば上手くできるのでは?と思ったから先ほどのような質問をしてしまいました。
ようするにブラウザのスクロール禁止にするけどスライダーは動かせるようにしたいんです。

<table style="width:500px;height:300px;background:#ffff00" id="aaa">
<tr><td><input type="range" step="1" min="0" max="10" value="1"></td></tr>
</table>

<スクリプト>
const elm = document.getElementById("aaa");

elm.addEventListener(
"touchmove",
function(e){

e.preventDefault(); //ブラウザのスクロールを禁止にする
}
);
</スクリプト>
0094デフォルトの名無しさん (ワッチョイ 8d43-n7AJ [114.166.5.254])
垢版 |
2024/01/11(木) 22:20:25.19ID:vnpK4WpS0
clickやmousedownに仕込む話したど思ったのでバブリングを指摘したけれど
スマホの場合にスライダー操作でスクロールしちゃうのを止めたい場合の話なら別問題
スクロールはブラウザ側の仕組みでDOMのイベントバブリングを止めてもダメ
それとターブルじゃなくて、スライダーをtouchmoveしたときにスクロールを止めたいのじゃないですか

要件としては
スライダーのtouchstartでブラウザのスクロール機能を無効にして
スライダーのtouchendでブラウザのスクロール機能を有効に戻す
スクロールの有効・無効は、スクロール要素のcssのスタイルで制御できるので、JavaScriptでstyle要素のoverflowYまたはoverflowXを'hidden'または'auto'と値を切り替える
0095デフォルトの名無しさん (ワッチョイ 231d-JApz [2400:4151:a4a0:6500:*])
垢版 |
2024/01/11(木) 22:41:54.15ID:bfPtSoSL0
>>93
ありがとうございます。
スライダーのelementにe.stopPropagation()をしたらスライダーを動かせるようになりました
>>94
ありがとうございます。試してみます。
0096デフォルトの名無しさん (ワッチョイ 85e7-UQX2 [2404:7a87:26a0:9e00:*])
垢版 |
2024/01/13(土) 03:22:15.94ID:bBKen2/T0
すいません、vueの質問はここでいいですか?
0098デフォルトの名無しさん (ワッチョイ ad01-1c9G [126.168.252.135])
垢版 |
2024/01/14(日) 17:21:53.60ID:vAN1c9wS0
ありがとうございます
0099デフォルトの名無しさん (ワッチョイ 4d7c-MQtI [122.212.16.94])
垢版 |
2024/01/26(金) 17:25:13.36ID:2+81uqBd0
WebフロントエンドでのJavaScriptを勉強中です
「jQueryでできることは素のJSでもできるのがほとんどになったから、jQuery不要」という話しが出てきますが、
エレメントの操作などで、素のJSだと記述する文字が長く、jQueryだとすごく短く書けるので、それだけでも十分便利と感じています。

document.querySelector('selector')
⇒ $('selector')

jQuery不要の場合、効率良く書くために代わりに何を使っているのか気になります。
大型のフレームワークとかでしょうか?フレームワーク使うと、ここのエレメントの参照・操作などはもはや不要になるのでしょうか?
0101デフォルトの名無しさん (ブーイモ MMe9-pDPK [202.214.125.44])
垢版 |
2024/01/26(金) 20:11:15.77ID:Uafucq2BM
>>99
コード補完機能(任意のスニペット呼び出しを含む)のある現代のエディタではその全てをキータイプする必要は無いし、どうしても短く書きたいならショートハンドを定義すればいい
たとえば、5ch互換掲示板ビューアであるブラウザ拡張機能「read.crx 2」では、同拡張機能の共同メンテナの方が作成したjQueryライク(互換ではない)なショートハンドライブラリ「shortQuery.js」が使われてる(だいぶ前にいわゆる「脱jQuery」のお供として導入されたハズ)

なんにせよ、初心者が今からjQueryを学ぶのは悪手
0105デフォルトの名無しさん (ワッチョイ f95a-xxv9 [2400:4052:5062:9ff0:*])
垢版 |
2024/01/28(日) 11:39:44.53ID:WhNL7KNN0
>>99
jQueryの現在はHPフロントエンジニアさんが
抱負なライブラリでHPに花をそえるために使っているだけ
ウェブアプリ屋さんはjQueryが邪魔くさい時があるので使わない
どの分野を目指すのかが決まっているなら
その分野で何が主流なのかを見極めたほうがいい
0108デフォルトの名無しさん (ワッチョイ 1901-fC/B [60.102.190.56])
垢版 |
2024/01/28(日) 23:52:21.72ID:Plt7vTfv0
>>106
バニラでも祖先ノードでmatches(selectors)を使えば対応可能なので、それほどjQueryに優位性はない気がする。
それから、jQueryはバブリングフェースのみ対応という弱点がある。
バブリングしないイベントタイプに関してはaddEventListener()に優位性がある。
0110デフォルトの名無しさん (ワッチョイ f95a-w/9U [2400:4052:5062:9ff0:*])
垢版 |
2024/01/30(火) 09:12:09.86ID:GdANFjKZ0
jQuery使いの人は行き当たりばったりな人が多い
jQueryライブラリファイルの読み込みが沢山あってなんじゃこりゃみたいな
0114デフォルトの名無しさん (ワッチョイ 99c5-Ak3u [240b:12:203:6300:* [上級国民]])
垢版 |
2024/02/03(土) 01:34:02.49ID:VXfZdpMe0
>>99
■jQueryの良さは健在だが……
機能のある程度はES2015で代替出来るが
jQueryの良さは健在、そこはお前さんの言ってる通り

それとは全く別の話
手続き型的な手法でDOMを触ってるのが前時代的

■DOMを触るのが不味い理由
DOM作り直しは要素の改ざんな訳だ
DOMを更新するためには、探索して選択、それを作り変えるの2ステップがあるけど

別の機能がDOMを消したり書き換えたら
見つけられなくてエラー出るかも知れないよね?
選択できても改ざんされてて加工出来ずにエラー吐くかも知れないよね?

担保するのは全て貴方の目視テスト
10機能作ったら10x9の90通りのマトリックステスト作ってね
このように機能を作る度にnの2乗みたいなテストを目視でさせられる
全部で100機能作りましょうとかなるとありえん無理

■代替はJSフレームワーク
HTML作るテンプレートエンジンでsmartyやBlade、pugとか色々あるけど
あんな感じでDOMを生成する何かを用意しておいて
JS内で変数が変更されたのを検知して、勝手に新しいDOMツリーを作り直して嵌め込んでくれよって思わん?

その思想で作られてるのがReactやVue、Angular等のJSフレームワーク
JSフレームワークが用意した「変数の変更通知を行う」お作法を覚えて動かすとDOMが常に最新のあるべき姿になる

これによりDOM操作回りはJSフレームワークという外部の業者が全て責任持ってやってくれる
俺達はDOMの元であるテンプレートを読み込ませたら
ただ変数がちゃんと正しい値になってるか?を保証すれば完璧に動作するよね

変数書き換えたら常にあるべき姿のDOMに書き換わるシステムに、jQueryで改ざんし始めると衝突して邪魔になる
次のDOM更新でjQueryが書き換えた内容そっくり消えるしな

だからこれからのWeb開発にjQueryは不要なんだよ
決してES2015が優れてて代替出来るから不要になったという話では無い
0122デフォルトの名無しさん (ワッチョイ bd43-tydm [114.148.57.9])
垢版 |
2024/02/04(日) 10:50:30.37ID:Vls4Se8V0
そうだね
node.jsでJavaScriptはサーバサイドだけじゃくてデスクトップアプリでも使われている
代表格はVScode(node.js+Electron)がある
Webpackもnode.jsだし
身近なところでは汎用掲示板ビューアSikiがnode.js+ElectronでJavaScriptだね
   
0123デフォルトの名無しさん (ワッチョイ 85a1-aUy2 [240b:12:203:6300:* [上級国民]])
垢版 |
2024/02/04(日) 12:44:47.52ID:ieWwGMGa0
CSSもHTMLも生で書くのは平成だしな
普通SASSやらPugやら使うだろ
JSだってWebpackやらBrowserify越しに使うやろ

まぁNode.jsじゃトランスパイル遅いから
GOやRustのツールに置き換える流れにはなってるが
じゃあ最初からCやGO、Rustでやれば良かったよねとはならないフットワークの軽さがNode.jsにはあるからな
0126デフォルトの名無しさん (ワッチョイ fd09-tjaG [210.131.245.99])
垢版 |
2024/02/05(月) 09:44:15.86ID:Q9Y3g4UN0
node.jsの良さはJavaScriptでプログラミングできる事
Electron使えばUIもHTMLで書けるので便利
なれたらJavaScriptでデスクトップアプリを書くのが楽しくなった
0132デフォルトの名無しさん (ワッチョイ bd43-tydm [114.148.57.9])
垢版 |
2024/02/06(火) 15:07:15.20ID:4bvVpi0E0
>>0127
TauriはWebViewなので
Electronの様にWebRequestを簡単に操れない
Rustに拘らないのなら
使い慣れた開発言語でWebViewを組み込んだ方が手っ取り早い
0134デフォルトの名無しさん (ワッチョイ fd09-tydm [210.131.245.99])
垢版 |
2024/02/07(水) 10:23:32.40ID:Q0zrTHJg0
JavaScriptで書ける環境の話から
かなり脱線気味
0136デフォルトの名無しさん (ワッチョイ 0e46-9m7S [2001:240:242e:628f:*])
垢版 |
2024/02/11(日) 14:27:08.42ID:cAyMWgFh0
危険だという懸念が素人の無理解から来てるだけなのか妥当な懸念なのか分からないから何とも言えんな
前者なら悪くない回避策
0142デフォルトの名無しさん (スッププ Sd42-hHXc [49.105.71.123])
垢版 |
2024/02/17(土) 10:17:04.46ID:eAolMzZEd
VBAとC#でちょくちょくアプリ作ってる程度のもんなんですけど
最近VS Code使ってjavascriptの勉強始めたわけですよ
デフォルトの環境で扱ってる限り、typoの指摘が甘くて気づくのに時間かかってしまってつらいです
Visual StudioでC#つかってるとかなり丁寧に指摘してくれるんで助かるんですが
Codeはその辺厳しいですね

Code Spell Checkerを入れてみたんですけど、よさそうな対策は他にありますか?
0148デフォルトの名無しさん (ワッチョイ 7310-HqFJ [180.12.82.129])
垢版 |
2024/02/19(月) 18:24:10.88ID:waVDHmuE0
マウスボタンを押しながらマウスを移動させてからマウスボタンを離すと
マウスボタンを離したときにmouseupだけでなくmousemoveも反応してしまうんだけど仕様ですか?
これ知らなくて動作が思うように行かなかった。
0150デフォルトの名無しさん (ワッチョイ 7310-HqFJ [180.12.82.129])
垢版 |
2024/02/20(火) 12:26:48.30ID:jaWYglX60
>>149
ありがとうございます
そうしてみます
0151デフォルトの名無しさん (ワッチョイ 1374-A/5V [240b:12:203:6300:* [上級国民]])
垢版 |
2024/02/20(火) 12:38:34.44ID:SYHvuSDa0
>>148
mouseoverはマウスが何かの要素の上を移動すれば毎回出てくるから
マウスを持ってる限り常に垂れ流し続けるぞ

ドラッグアンドドロップを実装したいなら
イベント(関数発火)が非同期かつ大量に垂れ流しになること前提で組む必要がある

一案としては上のスコープで何個か変数を定義

mousedown -> 直下の要素を掴んでhold変数に放り込む
mousemove -> hold変数に値が入ってないなら即return、座標変数に座標情報を格納
mouseup -> 精算、hold変数と座標変数をnullにする
0152よろしくお願いいたします (スップ Sdfa-RtHD [1.72.9.18])
垢版 |
2024/02/28(水) 10:59:38.09ID:j/HFCr6sd
はじめて、質問させていただきます。

今やってることはリストボックスの行を以下で選択しています。



document.getElementById('xxxx').selectedIndex = n;



PC版ブラウザではうまくいきました。しかし、モバイル版ブラウザでは1行のドロップダウンリストになってしまいます。

https://ja.stackoverflow.com/questions/34627/html%E3%81%AEselect%E3%81%AEsize%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%82%821%E8%A1%8C%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C



それで、以下のjqueryの $("select").fixForSafariMobile(true); を使ったところ、表示はドロップダウンリストからリストボックスになりましたが、上のselectedIndexが動作しなくなりました。

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/src/safarimobile-multiline-select.js

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/experiments/experiments.html
0153よろしくお願いいたします (スップ Sdfa-RtHD [1.72.9.18])
垢版 |
2024/02/28(水) 11:00:05.73ID:j/HFCr6sd
はじめて、質問させていただきます。

今やってることはリストボックスの行を以下で選択しています。



document.getElementById('xxxx').selectedIndex = n;



PC版ブラウザではうまくいきました。しかし、モバイル版ブラウザでは1行のドロップダウンリストになってしまいます。

https://ja.stackoverflow.com/questions/34627/html%E3%81%AEselect%E3%81%AEsize%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%82%821%E8%A1%8C%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C



それで、以下のjqueryの $("select").fixForSafariMobile(true); を使ったところ、表示はドロップダウンリストからリストボックスになりましたが、上のselectedIndexが動作しなくなりました。

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/src/safarimobile-multiline-select.js

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/experiments/experiments.html
0154デフォルトの名無しさん (ワッチョイ 470f-IZcd [2001:240:247f:f9c3:*])
垢版 |
2024/02/28(水) 11:09:45.91ID:74XehS+p0
はじめて、質問させていただきます。

今やってることはリストボックスの行を以下で選択しています。



document.getElementById('xxxx').selectedIndex = n;



PC版ブラウザではうまくいきました。しかし、モバイル版ブラウザでは1行のドロップダウンリストになってしまいます。

https://ja.stackoverflow.com/questions/34627/html%E3%81%AEselect%E3%81%AEsize%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%82%821%E8%A1%8C%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C



それで、以下のjqueryの $("select").fixForSafariMobile(true); を使ったところ、表示はドロップダウンリストからリストボックスになりましたが、上のselectedIndexが動作しなくなりました。

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/src/safarimobile-multiline-select.js

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/experiments/experiments.html
0155デフォルトの名無しさん (ワッチョイ 470f-IZcd [2001:240:247f:f9c3:*])
垢版 |
2024/02/28(水) 11:10:03.68ID:74XehS+p0
はじめて、質問させていただきます。

今やってることはリストボックスの行を以下で選択しています。



document.getElementById('xxxx').selectedIndex = n;



PC版ブラウザではうまくいきました。しかし、モバイル版ブラウザでは1行のドロップダウンリストになってしまいます。

https://ja.stackoverflow.com/questions/34627/html%E3%81%AEselect%E3%81%AEsize%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%82%821%E8%A1%8C%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C



それで、以下のjqueryの $("select").fixForSafariMobile(true); を使ったところ、表示はドロップダウンリストからリストボックスになりましたが、上のselectedIndexが動作しなくなりました。

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/src/safarimobile-multiline-select.js

https://github.com/sylvain-hamel/safarimobile-multiline-select/blob/master/experiments/experiments.html
0157デフォルトの名無しさん (ワッチョイ 1314-fCbz [240b:12:203:6300:*])
垢版 |
2024/02/28(水) 12:19:36.32ID:bgJbuEEB0
>>152
そもそもjQueryは時代遅れだから
ReactなりVue.jsなりのJSフレームワーク覚えて移行しろ
理由は>>114

誰が作ったか分からん動くかも全く保証されてないし、10年前からもうメンテすらされてない
fixForSafariMobileなんてプラグインなんて持ち出してきて
意図通りに動きませんとか動くわけないし、アドバイス出来る訳ない

プラグインの作者は神様でも何でもない
俺らとそう変わらない腕前の奴が少しの善意と承認欲求で作ったコード片でしかない

どうしてもjQuery+プラグインでやりたいならその作者のsylvain-hamelさんにでも聞くか
GitHubで公開されてるコードを全て読んでちゃんと理解して手直ししなよ
0158質問者 (スップ Sdfa-RtHD [1.72.9.18])
垢版 |
2024/02/28(水) 18:05:41.24ID:j/HFCr6sd
レスありがとうございます。昔からあるjsやjQueryは今は時代遅れなんですね。
ただ、今回は15年動いているものの改修作業なんです。
fixForSafariMobileはjQueryソースからselectboxからlistに変換するということはわかりました。

$("selectTarget").selectValue(ul, val)で、できそうだと思ったのですが、ulで何を渡すかまでは来ました。
valからulを検索して取得してからこれなんですかね?
0159デフォルトの名無しさん (ワッチョイ 13d2-fCbz [240b:12:203:6300:*])
垢版 |
2024/02/29(木) 00:27:46.28ID:XLzCkQ6P0
>>158
なるほどなぁ、なら何とかツギハギで頑張ってパッチするわけか

んで、.selectValueで出来そうだと思いました!って言われても
そんなメソッドjQueryには無いぞ
ttps://api.jquery.com/

何らかのライブラリなりで
jQueryのメソッドを拡張・追加すれば実現出来るが
それを何の前提知識も無く「どうやって使えば良いですか?」と言われても何もアドバイス出来んぞ

jQueryはもう相当うろ覚えだが
.valメソッドとかを使うんじゃなかったか?
セレクトボックスは動きが特殊だから.valで動かんかったら他のメソッド探してみろ

jQueryの公式ドキュメントを読め
JavaScriptの話ならMDNをちゃんと読め
そうとしか言えんわ頑張れ
0160質問者 (ワッチョイ 23e7-MEMs [118.87.46.101])
垢版 |
2024/03/01(金) 23:06:30.38ID:Id25sy0k0
いろいろとありがとうございます。
0161質問者 (ワッチョイ 23e7-MEMs [118.87.46.101])
垢版 |
2024/03/01(金) 23:23:12.37ID:Id25sy0k0
やりたいこと
・プログラムのデバッガみたいなステップ実行ができるWEBで作成されたものを改修。
・スクロールしていくので、複数行リストボックスで現在行を選択表示して、実現。PC版では動く。
・しかし、モバイル版では、html形式の複数行リストボックスは1行のドロップダウンリストBOXになってしまう。

どうもこれは、モバイルの仕様なようで、実現するのは不可能ぽい。
過去にある人がjqueryで、モバイルで複数行リストボックスみたいな事は実現しているが、これはあくまでも表示のみで選択は不可。
・複数行リストボックスをリスト型で実現している。なので、Val()でも、スクロールして、選択表示できない。

ほかの方法で考えた方が良いですかね?ただ、改修なので、別のフレームワークに変えるのは無理ですね。
0163質問者 (ワッチョイ 23e7-MEMs [118.87.46.101])
垢版 |
2024/03/02(土) 11:13:20.78ID:TgRbMsKE0
>代わりに自分でsize分だけのリストなりボタンなりを追加する
>これをjsでモバイル表示のときだけ実現すりゃいいんじゃない

レスありがとうございます。

データが100行あります。
今、複数行選択リストボックス(select size=25)では、25行表示できるエリアがあって、75行が隠れています。
99行目のListをスクリプトで選択(人間は選択しません。見てるだけです。)したら、自動的にそこまでスクロールしてくれます。
リスト(ul,li)ではスクロールまでしてくれず、隠れてしまって、実現はできないと思うのですが...
0164質問者 (ワッチョイ 23e7-MEMs [118.87.46.101])
垢版 |
2024/03/02(土) 11:46:08.42ID:TgRbMsKE0
<html>
<select id='now_exe_prg_row' size=25>
<option value="1">プログラム1行目</option>
<option value="2">プログラム2行目</option>
:
<option value="100">プログラム100行目</option>
</select>

<js>
$('now_exe_prg_row').val('99')

これをlistで実現したいのですが、無理ですよね?
0165デフォルトの名無しさん (ワッチョイ 47f6-WOak [2400:2200:714:c52d:*])
垢版 |
2024/03/02(土) 12:45:11.55ID:Rcnd56Cm0
無理じゃない
jsでdom操作はいくらでもできる
ul liでoptionのような動作をするカスタムのリストボックスも作成可能でcssフレームワークではよくつかう手法

そういうカスタムのWebComponentを作るといいよ

selectから情報をひっぱってきて外観をul liでカスタムコンポーネントを作り、liのクリックイベントリスナーでselect要素のselectedIndexを変更すればいい

select要素はモバイル環境ではdisplayをnoneにする
0167デフォルトの名無しさん (ワッチョイ 13f5-GI/N [240b:12:203:6300:* [上級国民]])
垢版 |
2024/03/02(土) 12:52:06.03ID:Ac/Ek54X0
>>164
CSSでul > liの見栄えを調整しろ
・メディアクエリの画面横幅で適応されるCSSを切り分ける
・heightをliの25行分の高さに指定
・overflow: scrollを付けてul内でスクロール出来るようにする

CSSを見栄えを整える能力は
Webで食ってく行くならこの先ずっと使うから覚えろ

CSS2の頃はまだ「技術的にも無理です!」ってケース多かったが
CSS3までフル動員させたら「それお前が無知なだけ」ってケースばかりだぞ
0169デフォルトの名無しさん (ワッチョイ 8f43-04EL [114.166.8.189])
垢版 |
2024/03/02(土) 14:29:55.91ID:83dahe0E0
無理にiOSでも同じUIにする必要ないのと違う
ぐるぐる回るドラム式がiOSのSafari流でかっこいいじゃんと褒め殺せば
林檎ユーザー特有の優越感をくすぐりOKもらえる気がする
0177デフォルトの名無しさん (ワッチョイ 5fad-VtrB [124.141.209.120])
垢版 |
2024/03/29(金) 14:50:19.65ID:yy1PP2Jg0
非同期処理を同期処理から呼び出すラップ関数を作りたいのですが方法がわかりません
AIに聞いたら次のコードが返ってきましたが、当然awaitが使えないので失敗します
-------------------------------
//非asyncな呼び出し元から、asyncメソッドを呼び出し、結果が帰るまで待って返却する
function FromSyncToAsync() {
const result = await [値を返すだけの非同期な関数]();
return result
}
-------------------------------
調べても呼び出し元をasyncにする方法しかみつかりません…
0178デフォルトの名無しさん (ワッチョイ 5fad-VtrB [124.141.209.120])
垢版 |
2024/03/29(金) 15:40:17.46ID:yy1PP2Jg0
これはエラーはおきないけど失敗。戻り値がpendingになりました
-------------------------------
function SyncToCallAsync(){
return getWasmFileLastModified().then((result) => {
// 結果を返却
return result;
});
}
-------------------------------
0179デフォルトの名無しさん (ワッチョイ 5f85-qPgS [240b:12:203:6300:* [上級国民]])
垢版 |
2024/03/29(金) 16:32:26.02ID:utPNPoKt0
>>177
残念ながら不可能
一度非同期の世界に入ると
同期処理の世界には戻って来られないぞ

・非同期処理から値を受け取る箇所はPromise値を返す関数にする
・前処理や後処理を含めて色々やってくれる関数をasync関数で定義する
・極力此処の関数やクラスメソッドは小さくして、関係ない値を持たせない事で全てをasync関数にする事を防ぐ

JavaScriptという言語がイベント駆動やイベントループ前提で作られてる以上
こういう作りを維持し続けるしかない

まぁ、ロジックを司るデカい所は基本async関数だよ
作り直す許可を上長や顧客からもぎ取るのが仕事やね

そういう交渉が出来ないなら細かくPromise.thenで作業していくしかない
0180デフォルトの名無しさん (ワッチョイ 5fad-VtrB [124.141.209.120])
垢版 |
2024/03/29(金) 16:55:52.54ID:yy1PP2Jg0
ありがとうございます。いくつかのAIに聞いても堂々と回答実現不能なコードばかり返してくるので困っていました。できないとわかったほうが先に進めます
0186デフォルトの名無しさん (ワッチョイ 298b-29lp [240d:1a:7fe:ef00:*])
垢版 |
2024/04/20(土) 13:04:04.45ID:/vy8T+9K0
昔、私が大学でプログラミングを習ったとき(C言語でした)には円周率など特別な値については定数にしろと言われはしましたが、その他の変数については定数にしろとは言われませんでした。
Javascriptの本を今読んでいるのですが、再代入を行わない場合にはすべて「let」ではなく「const」を使えと書いてあります。
このようなことが言われるようになったのはいつ頃からでしょうか?
私がそう習わなかっただけで、昔から言われていたことでしょうか?
0187デフォルトの名無しさん (ワッチョイ d15e-4mIM [240b:12:203:6300:* [上級国民]])
垢版 |
2024/04/20(土) 14:12:14.37ID:7dIwEOD00
>>186
JavaScriptはCromeやFirefox等のブラウザ作ってる所が各自で動作するエンジン作れと丸投げしてるが

仕様書にあたるECMAScriptが長い間ES5というバージョンのまま止まってた
その頃には変数宣言はvarのみだった

流石に今時のプログラミング言語にしようぜって事でECMAScriptの強化が始まり(ES6というプロジェクト)
最終的に2015年からは毎年強化した仕様を出しましょうという話になった

その最初の成果物とも言えるES2015で変数宣言としてvarの他にletとconstの2つが追加

for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i))
}

これの出力結果が4が5個連続で表示される
違和感があるが、
letのブロックスコープによって解消されてるのでvarはもう二度と使うなという風潮が出来た
(それ以外にもvarは関数の先頭で纏めて書かないと変な動きする箇所がちらほら見受けられ、コーディング規約で制限されていた)

また値がコロコロ変わる状態変数が多いと
登場人物がやたら多い粗悪な小説みたいになって作業者が困るので
「再代入禁止の変数」を求める声が元々多かった

その要望を汲んだ再代入禁止のconstも実装されたため
必要になるまで全てconstでプログラミングして、必要な箇所だけ最小限にletを使いましょうという風潮が比較的早く出来た
0188デフォルトの名無しさん (ワッチョイ d15e-4mIM [240b:12:203:6300:* [上級国民]])
垢版 |
2024/04/20(土) 14:22:49.70ID:7dIwEOD00
constは直訳すれば定数だが

JSのconstは再代入しちゃいけませんよってだけで
基本は普通の変数として取り扱う
配列やオブジェクト、関数、インスタンスなんかもconstで宣言出来るね

他言語のletみたいなものと考えると良い

constで宣言したオブジェクトや配列は再代入禁止なだけで、中身は普通に加工出来てしまうのも作りとして良くない

const arr = [1, 2, 3];
arr.push(4);
console.log(arr);
// [1, 2, 3, 4]

この辺は勝手に加工しないよう運用でカバーやね
値は基本的に複製しまくってガベージコレクションで掃除してもらう

パフォーマンスチューニングで仕方なく一つの値を加工しまくる時はライブラリ化したり関数で固めたりして、メインロジックの邪魔にならないようにすること
0189デフォルトの名無しさん (ワッチョイ 298b-29lp [240d:1a:7fe:ef00:*])
垢版 |
2024/04/20(土) 14:53:24.59ID:/vy8T+9K0
>>187-188
ありがとうございました。
0190デフォルトの名無しさん (ワッチョイ 6b21-9wFU [121.2.134.225])
垢版 |
2024/04/20(土) 21:40:49.05ID:KOUUOZ8l0
すみません。
以前からJSフレーム・ワークについて
疑問を持っていたのですが
フレーム・ワークを使う人は、

1. JavaScriptに精通しているので
中規模程度のサイトなら
素のJavaScriptと_lodash等だけでも組めるが
効率が悪いのでフレーム・ワークを
その内部構造をも理解して使っている。

2. JavaScriptの基本的な仕組みと
DOM操作の基本は理解しているが
素のJavaScriptではサイトを作れないので
フレーム・ワークの仕様仕組みを理解して使っている。

の2種類に大別できると思うのですが
結局ブラウザは素のJavaScriptで動いているだけなので
「1」の技能習得に向かわざるを得ないと思うのですが
いかがでしょうか。
0192デフォルトの名無しさん (ワッチョイ d1f1-4mIM [240b:12:203:6300:* [上級国民]])
垢版 |
2024/04/20(土) 22:27:55.19ID:7dIwEOD00
>>190
lodashは関数型プログラミング的な値の加工を司るフレームワークだぞ
一部だけ利用させて頂いて関数片の集合体ライブラリとして使うことも出来るがな

フレームワークは機能を提供するライブラリであると共に
大きなプロダクトを作っていく為のファイル・関数・モジュール置き場をルールで区切ってここに設置してくださいねー
こういう司書さんみたいな役割も担ってる

複数人でプロダクトを触ったり
半年後にどれどれ?と帰ってきて読み直した時にナニコレ?にならない為に
プログラミングスキルの良し悪しに限らず
適切なフレームワークがあるなら使った方が良い

フレームワークを使わん機能を作る時でも
関数やファイルを作って保管するタイミングで「このフレームワークの考え方は好きだな、同じディレクトリ名を作ってそこに保管しよう」
自然とこういう発想が生まれる

なのでフレームワークを使い分けてる人間は引き出しが多くなっていき
可読性の良いプロダクトを作る能力も養われる

結局フレームワーク無しで適当に関数やファイルを作って放り投げるばかりで
読み辛いプロダクト作ってる奴なんて3流の雑魚だよ
0193デフォルトの名無しさん (ワッチョイ d721-K5o/ [121.2.134.225])
垢版 |
2024/04/21(日) 00:20:10.62ID:R6fhRdj50
>>191 >>192
ありがとうございます。

ご教示参考にさせて頂き
精進いたします。
0194デフォルトの名無しさん (ワッチョイ 1735-TxeL [2001:268:9a1c:ec74:*])
垢版 |
2024/04/21(日) 02:22:30.51ID:9CBVBBl20
>>186
サイの表紙のサイ本。
初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、オライリー、2017

ECMA Script は、ES6(ES2015)で大きな改正があった。
var を非推奨にして、let/const を使う

オブジェクトの場合は、たいていconst を使う。
代入はできないが、オブジェクトの中身は更新できるから

const a = { x: 1 }

a.y = 'あ'
a //=> { x: 1, y: 'あ' }

a = 2 //=> エラー。再代入はできない!
0195デフォルトの名無しさん (ワッチョイ 0979-208W [110.2.64.150])
垢版 |
2024/04/28(日) 21:53:35.47ID:zlR73q8o0
スレ立てあらしスクリプト対抗age
レスを投稿する


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