+ JavaScript の質問用スレッド vol.123 + [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
2017/04/02(日) 23:30:38.56ID:Qcd0Qmy10
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

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

※前スレ
+ JavaScript の質問用スレッド vol.122 +
http://echo.2ch.net/test/read.cgi/tech/1472426483/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured
2021/09/17(金) 07:38:30.25ID:rB1Uwify0
>>909
従来のままのほうが分かりやすくない?
何のためにclassを追加したのだろうか?
2021/09/17(金) 07:41:06.43ID:rB1Uwify0
https://note.affi-sapo-sv.com/js-class.php
JavaScriptのクラスは、内部的にはsuperキーワードが追加された以外は以前と変わっていません。



そのため、以前できなかったことは、今でもできません。



クラス定義を使えば、わかりやすいコードを作れるという意見もありますが、誰にとってわかりやすいかいまいち不明。
prototypeを隠蔽しているので、初心者がJavaScriptの本質を理解しにくくなる気もします。



class構文は内部でどんな置き換えをしているのか、ということを理解してからでないと、勉強にならないですね。
でも理解したら、わざわざclassを使う必要がない気がします。



使いたければ使えばいいんじゃない?と思います。
913デフォルトの名無しさん (ワッチョイ cbdb-qDHA [217.178.96.78])
垢版 |
2021/09/18(土) 09:19:17.64ID:BWPa8IS40
classでインスタンスを生成した場合、関数の入れ子・クロージャ・関数の合成は
どのように実装すればいいのでしょうか?
2021/09/18(土) 09:21:08.79ID:BWPa8IS40
>>907
分かりにくいから。
2021/09/18(土) 09:25:01.08ID:bSvCP7tNM
jsonファイルをfetchで読み込んで表示するページ作りたいんですが読み込んだjsonファイルの更新日時を取得する方法ってありますか?
2021/09/18(土) 09:30:36.71ID:GAwwwwFC0
HTTPのレスポンスヘッダーにLast-Modifiedがあれば
2021/09/18(土) 18:47:47.12ID:ijIYuONW0
>>914
理解してない機能はわかりにくい
理解した機能はわかりやすい
それだけの話
2021/09/20(月) 12:44:45.58ID:ocNzoCY30
関数の呼び出しコストという文言を見るのですが、具体的にはどのようなコストなのでしょうか?
関数スコープが生成される?的なコストと処理量などでしょうか?
2021/09/20(月) 12:54:03.49ID:RSxALu1Ia
検索の時間
家の本棚から探すのと図書館に行って探してくるのとの違い
2021/09/20(月) 17:33:22.90ID:BvjsWEuY0
プログラミング初心者+αです。

const a = オブジェクト.length
console.log(a);

ということをやると
undefined:undefined
つまり未定義と表示されて正常に認識してくれない。

console.log(オブジェクト.length);
ならうまくいくのに。
プロパティの値を変数に割り当てられないのでしょうか。
2021/09/20(月) 17:38:24.56ID:StmUbSXka
定数にメソッドは登録出来ないんじゃない
2021/09/20(月) 17:52:12.71ID:iZ97v5vcM
オブジェクトって具体的には?
2021/09/20(月) 17:59:21.71ID:VxCTC9AS0
>>920
再現しないんだが
Objectにはlength無いけどなんの話か教えてくれ
2021/09/21(火) 20:13:00.16ID:2i3b3P5F0
>>919
ありがとうございます。

オーバーヘッドと似たようなもんだと考えてよいのでしょうか?

forEach が遅いのは関数呼び出しだからってのを、何処かで見まして、
インライン関数でも遅いので、自分の中で『検索』ってのと繋がらないです…
2021/09/21(火) 20:47:54.79ID:e5t1mBAya
>>924
ゴメン、CDNのボトルネック的な事かと思っただけで
コールスタックとかリターンアドレスやらメモ化なんて知らないです。

どっちにしろ人間もコンピュータも間接的な呼び出しは遅いようだ
以下参考

2019年版: JavaScriptのループの考察
https://qiita.com/shibukawa/items/4cae2a1410754d519232

【Python】関数呼び出しのコストを計測してみた
https://qiita.com/stokes/items/e8440329fb6f37944a9b
2021/09/23(木) 18:37:57.95ID:dJQXrT5o0
>>918
Function Callの処理コスト
https://262.ecma-international.org/11.0/#sec-function-calls

>>924
Array.prototype.forEachの仕様を確認すべし
https://262.ecma-international.org/11.0/#sec-array.prototype.foreach
2021/09/26(日) 10:15:24.86ID:A/CchEjW0
元のhtmlが<td id=***>文字列</td>と言う形でユニークなidが振られています。文字列の部分がokだった場合、字色を赤に変えたいのですがどのようなコードとすればよいでしょうか
試しに該当箇所にreplaceでspan styleを当てると元のタグが消えてテーブルが破壊されてしまいました
2021/09/26(日) 10:34:01.51ID:q8w8Ww110
>>927
td要素ノードにスタイルを割り当てればいいのでは?
style属性よりclass属性がいい気はするが
https://developer.mozilla.org/ja/docs/Web/API/Element/classList
2021/09/27(月) 20:29:49.49ID:TnqJLtde0
>>928
ヒントありがとうございます
解決しました
2021/09/28(火) 16:18:59.44ID:0wKuF6nP0
下記のようにhtmlを変数の中に入れて、複数ある.itemクラスを順番にループして
その中の.hogeクラスのインナーを取得したいです。

しかしhoge変数に入れて処理しようとすると何故かunderfindになってしまいます。
どなたかアドバイス頂けないでしょうか
(いったん変数に入れた方がすっきりするのでそうしたいです)




var DOM = $('#test').html(document.getElementById('text').value);
DOM.find('.item').each(function(i){
var hoge = $('.hoge',this);

alert(this.getElementsByClassName('hoge')[0].innerHTML);//こっちはinnerHTMLの中身がちゃんと表示される
alert(hoge.innerHTML);//こっちはunderfindになる
}
2021/09/28(火) 18:40:20.62ID:tB/ieqJ50
下にも [0] をつけたら?
2021/09/28(火) 18:42:29.73ID:0wKuF6nP0
alert( hoge.text() );
にするとマークアップ部分を抜いたテキストを取得できることに気付きましたが
マークアップも含んだ状態のインナーhtmlが欲しいんですよね…
2021/09/28(火) 18:45:06.33ID:0wKuF6nP0
>>931
まさかと思ってやってみたらいけました、そうかー配列で持ってたのかー
ありがとうございます
2021/09/28(火) 20:00:42.73ID:cv/tD/fj0
配列とHTMLcollectionは似て非なるものやぞ
2021/09/28(火) 21:27:29.09ID:54PfDNUt0
>>934
hogeはHTMLcollectionじゃないぞ
2021/09/28(火) 21:44:32.49ID:54PfDNUt0
>>933
getでもいける
https://api.jquery.com/get/
2021/09/30(木) 21:24:16.30ID:JO+wR1m50
if (true) {}
if (a === 300) {}

if文は真偽値だけの判定と比較の判定だったら、真偽値だけの方が速いとかありますか?
複数個所で同じ比較の判定が必要な場合、結果を真偽値にして使い回した方がよいのか
知りたいです。
2021/09/30(木) 21:59:02.86ID:3EHFK4tiM
初学者あるあるだけどそんなの誤差だから保守しやすいコードを書くのが正しい
2021/09/30(木) 22:15:02.92ID:JO+wR1m50
誤差なのですね
何の真偽値か調べるの手間ですもんね
ありがとうございました。
2021/10/01(金) 04:55:16.35ID:v3zEWc5J0
>>937
前者が速いが、フラグ変数を使わずにすむロジックを考案するのが最も効率的
2021/10/01(金) 04:59:49.85ID:v3zEWc5J0
>>937
ちなみに複数箇所で同じ判定をしなければならない判定は、フラグ変数を使う方が保守性が高い
将来、判定処理を更新する際に更新箇所が一つですむし、複数箇所に同じ判定があると更新漏れのリスクがある

>>940でいったように、判定箇所が一カ所になるようロジックをくむのが最適
2021/10/01(金) 14:19:20.76ID:ktZsKgGi0
最近vueやらreactやら仕事で触ることになったんだけど、
みんなこの巨大なvueのtemplate構文とかどうやって読み解いてるんだ・・・?
実際のUIがイメージできるようになるのかコツとかある?
2021/10/01(金) 16:21:28.18ID:mSSK0hBl0
>>942
慣れ。
2021/10/01(金) 18:40:19.96ID:CrVDBOnRM
ありがとう。慣れんのかな・・・
2021/10/01(金) 19:42:32.31ID:mSSK0hBl0
>>944
知らんけど。
2021/10/01(金) 20:18:01.29ID:7qQOgpPT0
vueはGoogleの拡張いれたら分かりやすくやった
2021/10/05(火) 00:55:13.12ID:HvgDlsKq0
>>940-941
台風でネット繋がらなくて、お礼言うの遅れてすみません…

すっごい腹落ちしました。
どうしても複数になる場合はフラグ変数使っていこうと思います。
2021/10/12(火) 02:32:16.48ID:BSPiPdYi0
javascriptで関数はオブジェクトって書いてあったんですよ
でもオブジェクトって例えばconst o = { name: "noname", mail:"sage}みたいに定義されるものではないのですか?
2021/10/12(火) 05:05:04.25ID:9QJCYXKb0
>>948
関数はObject型
{}はnew ObjectでありObject型
new ArrayもObject型
https://tc39.es/ecma262/#sec-typeof-operator
2021/10/20(水) 02:51:41.42ID:7Ch1Hu5l0
スクレイピングに興味があるのですが1時間に1回の頻度のGETだけで訴えられる危険があるって本当ですか?
2021/10/20(水) 03:28:52.56ID:g1WESx5+0
次スレ立てる義務を果たしたら答えてあげる
2021/10/20(水) 10:49:03.56ID:Y4tLRZgw0
PHPスレとのマルチやん
2021/10/22(金) 10:33:33.27ID:qGJ2lg5d0
jqueryなんですが
jqXHRオブジェクトから逆算してクエリ文字列を得る方法ってありませんか?

var a = $("index[name=hoge]");
a.xxxx()= → "index[name=hoge]" みたいな関数とかプラグインとか
2021/10/22(金) 13:52:34.02ID:D6Qp5iob0
>>953
ない
2021/10/22(金) 16:50:13.59ID:5KYadqzO0
>>953
あった
a.selector
が、1.9で消された
2021/10/23(土) 06:37:42.27ID:k4puVD/c0
>>955
これか
https://bugs.jquery.com/ticket/9469
2021/10/25(月) 21:08:09.07ID:r2R6qwLM0
>>953
やはり、放置か
2021/10/30(土) 07:24:51.67ID:1pYlSmze0
>>948
JSの型には、String Number Boolean Null undefined Symbolなどの他、Objyectがあります
プリミティブでない型は全てObject型です

Objectの例は
let o={};
let a=[];
let f=function(){}
function f(){}
などがあります
2021/10/30(土) 10:09:55.72ID:1pYlSmze0
>>948
あと、オブジェクトという意味合いは結構あいまいです

JSではプリミティブはそれ自体に関数やパラメータなどを保持しません
ObjectはObject()の派生ですので関数やパラメータを持ちます
型という意味合いでは、typeof でObject型なのか判定できますのでお試しを

オブジェクトを目的物、対象物という表現でとらえれば
文字や数字も、扱う対象物として、オブジェクトと表現できますが
型としの意味合い(始祖Object()を継承してるか)なのか
対象物という意味合いなのか、混乱したときには整理してみるといいかもです
2021/10/30(土) 10:14:21.41ID:3mlVFK4h0
オブイェークト
2021/10/30(土) 10:46:44.64ID:3QCmGqxi0
なんかまた新しいものが出てきたのかと思った
2021/10/30(土) 10:50:46.34ID:5VdQtJkF0
ほら泣くぞ
2021/10/30(土) 11:05:17.84ID:H0dMqvNA0
>>960
ようやく、>>953が出てきたと思ったら、ただの感想か
相変わらず、このスレの質問者は自己中だな
2021/10/30(土) 12:45:13.50ID:zzEdTkV90
アロ関とthisが分かりにくい。
全部バインドしとけばいいの?
2021/10/30(土) 12:56:38.70ID:H0dMqvNA0
>>964
慣れ
違いを何度も意識すれば分かる
2021/10/30(土) 22:52:40.11ID:zzEdTkV90
>>965
thisだけでなくselfをもっと活用すればいいのでしょうか?
2021/10/30(土) 22:56:14.00ID:8E+HWsPL0
そもそも典型的な場面を除いてthisを多用しない
2021/10/30(土) 23:44:50.08ID:3mlVFK4h0
またおまえか
ストーカーかよ
いい加減にしろ
2021/10/31(日) 01:31:34.39ID:XZxuOuys0
質問です。
https://developer.mozilla.org/ja/docs/Web/JavaScript/A_re-introduction_to_JavaScript

var input;
do {
input = get_input();
} while (inputIsNotValid(input));
を実行したら、
Uncaught ReferenceError: get_input is not defined
と出ました。

get_input()は自作関数だと思いますかが、
どんな関数になるのか教えて下さい。
2021/10/31(日) 03:14:18.94ID:s/NdT1yMM
<input id="address">

function get_input(){
return document.querySelector("#address").value
}
2021/10/31(日) 04:01:17.10ID:XZxuOuys0
>>970
こんな深夜にありがとうございます。

ただ、すみません、
Uncaught ReferenceError: document is not defined
というエラーが出ました。
このdocumentというのはどのように定義したらよいですか?

あと、
<input id="address">
は同じフォルダにindex.htmlのような名前で保存すればよいですか?
2021/10/31(日) 07:37:28.36ID:CEq1n28F0
>>969
var input;
do{
input=get_input();
}while(inputIsNotValid(input));

function get_input(){
return confirm('input!');
}
function inputIsNotValid(input){
return !input;
}
2021/10/31(日) 07:45:13.63ID:CEq1n28F0
>>969
サンプルコードは、

inpu=get_input() // 入力されたものをinputに代入する

do-whileは、inputIsNotValid()関数の戻り値がtrueの時に繰り返す

inputIsNotVarid()は、入力されたinput値が不適切の時にtrueを返す

という内容を説明しています

get_input()がどのような入力になるのか
inputInNotValid()で、inputの適否をどう判定しているのかは問いません、ということです
このようなコードを見たときには、関数名で働きが説明できている、という前提ですので
関数名をよく読んで、戻り値を推測して読んでください
2021/10/31(日) 07:53:36.67ID:CEq1n28F0
>>969
あと、このコード自体は
「有効な値が入力されるまでループする」というコードです

confirm関数はシンプルな入力関数で、OKボタンでtrueを、キャンセルボタンでfalseを返します
2021/10/31(日) 07:58:15.87ID:tih+/c060
>>972
理想的な必要十分なコードだけど
promptじゃね
2021/10/31(日) 08:40:51.23ID:CEq1n28F0
45億年もの長きにわたり僅かな変化を積み重ねた塩基配列の微妙なズレと
あなたと私の養育環境における、例えば接種してきたたんぱく質や食物繊維の種類や量
照射された日照量や、退社した細胞数の数、知り合った女性や先生が持つ遺伝子配列とのずれとの調和
そのような本当に些細な差が、promptなのかconfirmなのかを決したのだと思います
そこには完全な正解はないのかもしれませんが、バリデーションチェックという意味ではpromptで説明すべきかもしれません
2021/10/31(日) 09:24:41.87ID:hyBzQr2G0
>>966
「〜が分かりにくい」でお茶を濁さず、アロー関数とthis値の性質を学習して、分からない部分を具体化してから、調査or質問せよ
ということだ

>>966で書いてるような「〜すればいい」を理屈を度外視して、方法論だけ求めるのは思考停止
現状だと質問の体を成してない
2021/10/31(日) 09:26:03.48ID:hyBzQr2G0
>>968
質問を立て逃げ、誹謗中傷
そんなことしてる人にいわれてもな
2021/10/31(日) 12:03:01.70ID:stUnlaEn0
>>971
documentがないってブラウザ以外の実行環境なの?
2021/10/31(日) 12:05:17.37ID:CEq1n28F0
>>964
とても情緒深く、文学的なご質問で、私のような無知で下賤な者が触れてよいのか悩みましたが
アロー関数自身にアロー関数内のプロパティ、もしくは引数を紐づけたいということなのでしょうか?
2021/10/31(日) 21:44:03.28ID:XZxuOuys0
>>972-976 && >>979
> documentがないってブラウザ以外の実行環境なの?

Chromeのコンソールで実行することで望んだ通りの出力になりました。
それまではネットで勧められるままVSCodeで実行していました。
皆さん、ありがとうございました!
2021/10/31(日) 21:59:13.71ID:CEq1n28F0
>>981
がんばってくださいね
継続して学んでいれば今感じている疑問の殆どは解消します
一歩を進められたご自身の力を信じて進んでください
2021/10/31(日) 22:09:03.92ID:CEq1n28F0
>>981
982の「疑問」=>「疑問や違和感」に訂正です
2021/11/01(月) 09:39:09.34ID:i0IYe4C60
アロ関は世界を救う。
2021/11/01(月) 09:56:32.75ID:i0IYe4C60
アロ関十段ここに極まる。
2021/11/01(月) 10:30:03.91ID:Oy+9EmbD0
>>980
アロー関数にプロパティを紐づけする必要ないよな
無名関数、即時関数のプロパティに外部からアクセスするようなコードはナンセンスだし

>>981
Chromeのコンソールでコード入力してんのかな?
そんなことしてたら面倒くさいだろな
vscodeでjavascriptを実行すればいいんだけど
支障がるみたいで、どういう感じになってるのか興味ある
2021/11/03(水) 17:47:47.22ID:mbwPounm0
.>>1000
そうだな、お前みたいな破廉恥極まりないやつを極刑にできないなんてな
2021/11/03(水) 17:55:09.21ID:KPYiFv2L0
>>987
先(>1000)をみる前に現在を見つめては
2021/11/09(火) 17:29:38.68ID:vBEqEZ0H0
よろしくお願いします

下記の二つの関数、c1()とc2()でカウンターを作りました
c1()はカウントされず、c2()はカウントされます
同じようなコードなのにc1()を複数回呼び出しても
変数cがインクリメントされないのはなぜなのでしょうか?

function c1(){
let c=0;
return c++;
}

function c2(){
let c=0;
return function(){return c++};
}

let s1=c1();
let s2=c2();

console.log(
s1, // 0
s1, // 0
s2(), // 0
s2(), // 1
);
2021/11/09(火) 18:14:06.92ID:M98uPrZkM
仕様通りとしか
c1のcはc1が呼び出される度に定義されるからカウント不可
そもそも上のコードでc1は1回しか呼び出されていないし
2021/11/09(火) 18:42:53.53ID:/KO0GJnF0
c2の中のfunctionの中で書いてないけどcが定義されて、呼び出されるごとにそのcがインクリメントされているような挙動。
2021/11/09(火) 20:03:23.50ID:zgMlwp7I0
>>989
c1は呼び出される度に変数cが初期化される
s2は呼び出されても変数cが初期化されない
2021/11/09(火) 20:54:12.85ID:qOqV7S2Y0
そもそもc1一回しか呼び出してないけどな
2021/11/09(火) 21:10:09.46ID:JS6FzrkbM
カウンタを初期化する部分を繰り返し呼び出す関数の外に出してやればいい

let c=0;
function c1(){
return c++;
}
2021/11/09(火) 22:41:36.85ID:RTTrqb1f0
>>990はレキシカルを理解してるなら
s1とs2のレキシカルが違うことをだな
2021/11/10(水) 12:09:40.50ID:KxrU4/8D0
うむ
2021/11/10(水) 12:24:11.84ID:KxrU4/8D0
>>989
関数やブロックはプロパティをLexicalという場所に登録するんだけど
プロパティを参照した時には、関数内やブロック内のLexicalを参照し
そこにプロパティが登録されてないとその直外のLexicalを参照します

関数は、呼び出しごとに内部Lexicalが生成されるので
c1();c1();c1()と呼び出すと、別々の3つの内部Lexicalが生成され
それらに別々のlet cが登録されるので、c=0となります

s1にはc1()への関数の参照が格納されてるので
s1を複数回呼び出すと、c1()を複数回参照し
上記と同じ結果になります

一方でc2()がreturnで戻す内部関数は直外のLexicalのあるcを参照します
s2()を複数回呼び出すと、同じLexicalのcを参照するので
s2()の複数呼び出しでcはインクリメントされていくのですね

990先生や994先生のご指摘を血肉にされるといいでしょう
2021/11/10(水) 13:11:24.52ID:ABhSQgxq0
ところでクロージャーって用語の使い方について質問があるんだけどc2自体をクロージャーって言うのかc2が返してる無名関数をクロージャーって言うのかどっちが正しいの?
2021/11/10(水) 15:30:26.98ID:jxD2VXPG0
質問中すまんが次スレ
+ JavaScript の質問用スレッド vol.124 +
https://mevius.5ch.net/test/read.cgi/tech/1636525464/
2021/11/10(水) 17:31:05.10ID:KxrU4/8D0
closer != function
closer == function + environment.information

JSで説明されてるクロージャーは
関数、関数の内部情報、外部参照ポインタのセット
っていう大まかな理解でいいと思います

function f(){let a;}の場合、
関数f、内部プロパティa、外部参照ポインタの参照先(グローバル)、というセットがクロージャー
ちょっと大まかすぎますか?

返される無名関数はクロージャーの仕組みを
コードで理解するために多用されているために
それ自体をクロージャーと認識する人も多いでしょう

また関数内プロパティは外部から直接アクセスできないので
外部からクローズになっているという意味で
関数自体をクロージャーといっていたり
外部から関数内にアクセスできない状態をクロージャーという人も多いでしょう


次スレで先生方からアドバイスいただけますといいですね
私も心待ちにしています

>>999様、ありがとうございます
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1682日 18時間 0分 27秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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