+ JavaScript の質問用スレッド vol.134 +
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです 今までOOPでやっていた部分をFPで書いていてふと思ったのですが
FPって名前空間汚しまくりじゃないですか?
例えばOOPだと
hoge={sum:()=>{}}
みたいにhogeだけですみますがFPだと
hoge=()=>()=>{};
sum=()=>{};
みたいに延々増えていくような?気がします
そういうものなんでしょうか? サイの絵の表紙のサイ本
JavaScript 第6版、2012、David Flanagan
初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、オライリー、2017
Flanagan は、Java, Ruby など色々な言語の本を書いてる。
最近は、何をやってるのかね? >>133
>>135
まだ持っていなくこれから学習始めるのに本が欲しかったんですが、第6版は古いから手が出しづらいです。
6版買うくらいならいっそのこと古本の5版でも構いませんか? 良いか悪いかで言ったら俺は悪いと思う
要するにJSの実際はそんなには難しくもないんだけど、
適切な解説が少ないプロトタイプチェーンやスコープチェーンだったり
多くのJSerが曖昧にしてきたであろう基礎的な仕組みに近いところを
まんべんなくそれなりに分かりやすい解説が載ってたっていうのが価値だった
だけどその他の部分のテクニックとかも肌感覚が古くなってきてるし、
今なら当然合わせて知っておきたいクラス構文やモジュールなんかも学べないしな
まあ物好きでお金と時間に余裕があるなら、
一旦ES5までの知識を付けて個別にアップデートしていってもいいとは思うが >>137
ありがとうございます
第6版も古いからオライリーに拘らず他所の新しい本の方がよいでしょうか? Javascriptで、生成されたオブジェクトを終了するために、
VBSで言うところのNothingを使いたいのだけれど、
どうも使わない感じみたいで、困ってます。
Javascriptでは、もしかしてnullとか使うでしょうか?
ヒントでもいいので教えてください。 変数にnull代入
参照してる変数が無くなればgcがいつか解放する >>138 わからん
サイ本のように一昔前は中級者や中級者になりたい人向けという幅広い括りで取り敢えず読んどけという本もいくつかあったが、
今の時代は難しい 大昔におけるオライリー本ですら有効性はクエスチョンマークだった
今や書籍の価値なんてGCに回収されてる > 今や書籍の価値なんてGCに回収されてる
どういう意味? >>142
どうもありがとうございます
参考になりました Javapcriptのスリープ実装って永遠の課題なんか?
代替手段はどれも使いづらいし、
何でこんなことになっとんのや? 俺のスニペット帳より。元ネタは確かtry-puppeteerサイトのコード
なぜか5ちゃんのセキュリティゲートウェイに引っ掛かったので全角で貼る。
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
await sleep(5000); >>146
Atomics APIでできるよ
Atomics.wait()とすればそのまんまスリープする
ただメインスレッドでは禁止されてる場合が多い
メインで待機しちゃうとUIが止まっちゃうからね
でもWorkerなんかではSharedArrayBufferと組み合わせて効果的に使えるよ
ただ今は例のCPUサイドチャネル攻撃脆弱性問題のおかげで
情報が抜けてしまうのでデフォルト無効にされてるが でもAtomics APIってJavaScriptじゃなくて
ブラウザのAPIですよね?
NodeJSでは使えませんよね? >>149
違う。列記としたECMAScriptの仕様だからV8にも載ってるしNodeでも使える
ただマルチスレッド動作が上手く行くかはわからんが chrome、firefox、edge、safari などメジャーブラウザ全てでメインスレッドでは使えない。ワーカー内でしか使えない。
実質役立たず。 そういうruby信者みたいな情けない言い方はやめろ
やるやらないとできるできないは違う
できるけど理由があってやらない、が一番かっこいい 要素Aがあって
<div id="A"></div>
この要素Aに要素Bを動的に入れ子したとき
<div id="A"><div id="B"></div></div>
要素Aが膨らんだので
要素Aの大きさを取得したいのですがどうやってやりますか?
(そもそもAが膨らまないように、、みたいな話ではなく単純に、
予想外に膨らんでしまった要素のサイズを取得してみたい、という用途です) scriptをbodyの末尾に置けばreadyハンドラを待つ必要ないと思いますが
このやり方に何か問題ありますか? >>155
簡単にできるけど、理由があって禁止されたんだよ
最初期はそういう縛りなく実装されてた
理由があるなら最初からできないほうが良い
過剰に自由なことはデメリットのほうが大きい >>157
要素にJSを適応したい場合はカスタムエレメントを使うこと
そうすれば要素が出現する前に定義できるし、
出現した瞬間に効果が適応される
コンポーネント化もしやすい こういう人ってネット以外でも周りの人の会話に対して一々ケチをつけるのだろうか? 低能を悔しがらせようと思ってJS質問スレでそんなレスをしたのか 適応はadapt
適用はapplyとかadoptやな 効果が「適用」される
だとしてもおかしいがな
効果が反映される
とかだろ いや違うだろ
言葉の組み立てとしては正しくともニュアンス的にな
「誰々が何々を適用する」は自然だが「誰々が何々を反映する」はより不自然
つまりは「反映」よりも「適用」と言ったほうが誰がそれをするのかイメージされやすいんだよ
そして今回のように「(自然と、勝手に)〜される」と言いたいのなら
「誰によってか」を意識させにくい「反映される」のほうが適切 >>158
ありがとうございます
>>160
カスタムエレメントというのは聞き慣れない言葉ですが
それは素のJavaScriptで出来るのでしょうか?
なんかフレームワークっぽい響きがありますが 日本語的には「効果が」に続く言葉としては「反映」「適用」どちらもおかしいんじゃないか
効果とは通常は一定の結果をあらわす言葉
何かに対して、規則・ルール・設定などを反映・適用した結果、あらわれるのが効果
一定イベントに特定の処理を当てはめる際も同様
逆に、設定画面で設定を変更したときに押すボタンが「適用」なのは正しい いや、「適用」が使える場面は限られるよ
プロフィール画面で、公開ルールを設定する場合には使えるけれど
ニックネームなどを設定する場合には使えない
「適用」っていうのは値をそのまま当てはめるような場合ではなく
応用して使う場合にのみ使える言葉
例えば同じようなケースでも、マイプロフィール画面で
「プロフィールに『A』スタイルを適用する」とは言えるけれど
「プロフィールのスタイルを『A』で適応する」とは言えない
Aというスタイルは適用できても、スタイルの名前を指定する際は「適用」は使えない >>173
ようするに「を」はOKだけど
「で」は適切じゃないって話?
○ プロフィールに『A』スタイルを適用する
× プロフィールに『A』スタイルで適用する
○ プロフィールのスタイルに『A』を適応する
× プロフィールのスタイルに『A』で適応する >>174
厳密には違う
キャラクターメイキングで
「彼女」に「我慢強い性格」を適用する
に比べて
「彼女の性格」に「我慢強い」を適用する
は明らかに不自然だろう
後者はよく捉えたとしても結局
「彼女の性格」に「我慢強いという性格」を適応すると言ってるのと同じだ
そして先にも言ったようにただ固定値を貼り付けるだけであればあるほど「適用」というのは不適切
例えば、ゲーム開始以降に
「彼女の性格」に「より我慢強い」を適用する
なら
「彼女の性格」に「より我慢強い」を設定する
よりは適切だ 要するにAがBにただなるときはAにBを適用するというなということか >>175
> キャラクターメイキングで
> 「彼女」に「我慢強い性格」を適用する
> に比べて
> 「彼女の性格」に「我慢強い」を適用する
> は明らかに不自然だろう
いやべつに?
だって、性格の他に髪型とか身長があるだろ?
「彼女の髪型」に「ショートヘア」を適用するは自然だけど、
「彼女」に「ショートヘアの髪型」を適用するとか
「彼女」に「150cmの身長」を適用するとか冗長じゃん 「適応」あってるじゃんか
言い返せないから、往生際が悪いとか
意味不明なこと言って逃げたんでしょ? >>173
>ニックネームなどを設定する場合には使えない
>「適用」っていうのは値をそのまま当てはめるような場合ではなく
>応用して使う場合にのみ使える言葉
・法令を適用する
・3秒ルールを適用する
応用じゃないんだが。辞書ひいてこい
「(入力した)ニックネーム(設定)を」「(今使っているソフトウェアに)適用する」
字面だけ見てもダメ >>181
それを応用っていうんだよ
>>176の言う通り しれっと応用にすり替えてんじゃねーよ適応は間違いだろうがw 「適用」が
>応用して使う場合にのみ使える言葉
かどうか、って話だろ? substringとsubstrのメソッド名ってちょっと適当すぎるのでは? 初心者です。JavaScriptを簡単な電卓代わりに使おうと思うのですが
平方根などを知りたいときにMath.sqrt(5)などとやるのが面倒です。
この組み込みオブジェクトの宣言を取っ払って
sqrt(5)とやるだけでMath.sqrt(5)が実行されるようにするにはどうすればいいですかね。
というかそうでなくても例えばPythonのように
import math as m
とやれば
m.sqrt(5)
のようにタイプしやすくなりますがJavaScriptでもそのようなことがしたいです。 原点に戻ったほうが良いぞ
まず英語版Windowsはどうなっているか?
https://i-msdn.sec.s-msft.com/dynimg/IC8950.gif
↑この機能がapplyだ
俺に認識では
・設定を反映させて閉じるのが OK
・設定を反映させないで閉じるのが Cancel
・設定を反映させて閉じないのが Apply だ
OK、Cancel、Appyにダイアログを閉じる or 閉じない
という意味がないことは同意するよな?
で、閉じる閉じないを省略しつつ、簡潔に書くと
・この設定内容でOK
・この設定内容をCancel
・この設定内容でApply
あとは日本語の問題だ
この設定内容[で/を]応用・・・言わない
この設定内容[で/を]応用する・・・言わない
この設定内容で適用・・・ぎりぎり言う
この設定内容を適用・・・言う
この設定内容で適用する・・・言う
この設定内容を適用する・・・言う
これは翻訳の問題なので(意味はApplyが適切だと英語版Windowsで決定されてる)
応用という言葉は適切ではなく、適用がふさわしい
応用して使うとかいうのは意味不明。だって「テコの原理の応用」。とか
そういう使い方をする用語なんだから。設定内容を応用するとか言わないでしょ? 194ですが自己解決しました。すいません。
とりあえず
推奨案
m=Math
console.log(m.sqrt(5))
最適案
with (Math) {
console.log(sqrt(5))
}
だったので後者を採用しました。 >>173がそもそも的はずれなのは、
「適用」がニックネームに対して行う操作ではなく
ダイアログに対して行う操作であることに気づいてないからだな
プロフィールという設定があるとして
「Aスタイル」というのは「プロフィール」の選択値
「適用」というのは「プロフィールの設定ダイアログ」に対する操作
「プロフィールにAスタイル」を「適用」するんじゃなくて、
「プロフィールとしてAスタイルを選択した設定内容」で「適用」するが正しい
そこがごっちゃになるから的はずれなことを言うわけさ
この設定内容で設定した値を使うわけだから「適用」
応用っていってしまうと、
(この設定内容は使わずに)この設定内容を応用して何かを作ってそれを使う
というニュアンスになってしまう
設定内容に対しての「適用」はどんな場面でも使えるよ。
そもそもOKしてダイアログを閉じないってだけなんだから
OKの代わりとし使える >>196
withはなにがあっても使うなって言われてるだろ? Math.sqrt(5) は Math.sqrt(5) と書くのが普通
どうしても sqrt ってしたいなら、
const sqrt = Math.sqrt.bind(Math)
const sqrt = Math.sqrt でも動くと思うが、sqrtメソッド内のthisが異なる
constが使えないブラウザの場合はvarで代用 >>199
ありがとうございます。
しかしそれだと
sinやlogやabsやら全てに対しその宣言をしないといけませんよね。
それはちょっと面倒です……。
それと、後出しのようになってしまいますが、完全に個人目的(ブックマークレット)なので
evalやwithなど危険性・脆弱性のある機能を使ってもいいかなと思っています。
他人が触らず、かつ入力されるものが完全に把握できている場合でもevalやwithの使用は控えるべきですか? Microsoftって昔J-Scriptっていうのを作ったのにどうしてそれを放棄してAction Scriptを作ったん? ActionScriptじゃなくてTypeScriptだった Math.sqrtって打つのが面倒なら
m.sqrtって打っていって
最後にm\.sqrtをMath.sqrtに置換すりゃいいじゃん >初心者です。JavaScriptを簡単な電卓代わりに使おうと思うのですが
JSを使って簡易電卓を作ってみたい
なら少しわかるが
初心者が、JSを電卓代わりに使う、とか意味わからん >>201
JScriptは大人の事情で名前を変える必要があっただけで
実質はJavaScript。開発当時は標準仕様などなく
どのブラウザも好き勝手JavaScriptを発展させたので
互換性がない部分がたくさんあった
標準仕様が作られたが、いちばん重要な互換性を保つために
IEはJScriptの開発を続けていったが、ようやく互換性を切り捨て
標準仕様に準拠できるようになった。
TypeScriptはJavaScriptをもとに改良したもの
JavaScriptの標準仕様を満たしており、+αで機能強化されてる。
JScriptが標準仕様を満たしてないために切り捨てたものにたいして
TypeScriptは標準仕様を満たしてなおかつ拡張されているところが違う ここまですべてくそ
わからないものにはクソをする
ワハハ バタン! >>200
何個使う気が知らないけど
let {sin,log,abs}=Math
みたいにできるし、10個未満なくらいならwith文使わなくても
煩雑になったりはしないと思うよ だな。
用途がブックマークレットって言ってるしIIFE使うんだろうから、
(function({sin, log, abs}) {
})(Math);
ってやってもいい。 a = !a
みたいな処理が一度に出来る代入演算子ってありますか? jqueryのtextメソッドを使って改行を表示させる方法はありますか?
文字列の中に"\n"を書いても改行になりませんでした ソース上での改行かhtml上での改行か
html上なら無理 無理なんですね
ではhtmlメソッドとHTMLエスケープを使ってやります
ありがとうございました 改行は、<br> だろ
改行を使わず、<p> でも良いかも テーブルタグでクリックしたtdを連結するにはどうすればいいでしょうか? よく考えたらjqueryのtextメソッドって
文字列にHTMLをかけてinnerHTMLに代入するメソッドではなくて、
テキストノードを作成するメソッドですよね
たからbr要素を入れられないのも当然ですね ×HTMLをかけて
○HTMLエスケープをかけて
でした JavaScriptファイルを編集してもキャッシュが読み込まれてしまう時がありますが
条件はあるのでしょうか? >>220
エスケープなどしない
DOMを覚えて、タグを挿入している感覚を改めた方がいい 質問です。このシステムの名前を知らない為、長文になりますがよろしくお願いします。
サイトの中にあるリンクをクリックすると当たり前ですがリンクに組み込まれたurlに飛ばされます。
しかしこのリンクに組み込まれたurlをコピーし別タブで開くとサーバーエラーになりページが表示されません。
そこで、
質問1:このシステムの名称があれば教えてください
質問2:この現象(コピペするとエラー)を回避し、例えば自作のページに画像を貼るコードサンプルをご教授お願いします ・そんな糞なシステムを真似ないほうがいい
・そんな糞な仕組みを実装すると弊害が出る そういう「外部からの勝手なアクセス」は迷惑行為として対策されていることがあります
著作権侵害などの問題が発生する可能性もあるので、できるとしてもやりたくないですね ページAからページBのリンクを踏んでページBに遷移するときも、
直接アドレスバーにページBのURLを打ち込んで移動するときも、
そのサイトのサーバーにはページBに対するリクエストがクライアント(=ブラウザ)から来るわけですが、
この時クライアントがいっしょに送ってくる情報を調べて動作を変えることができます。
質問の動作の違いは、恐らくその情報のうち、リファラーというものを見てサーバーが動作を変えている(そういう風に作って/設定している)のだと思われます。
リファラーは簡単に言うとひとつ前にいたページのURLです。
アドレスバーに直接打ち込んで行くとカラなので区別できます。 >>222
普通はキャッシュから読み込まれる
故意にキャッシュを捨てるか、ページをリロードするか、
ファイルが変更された都度、ファイル名を変えるなどすると、
更新後のファイルが読み込まれる
>>224-227
履歴だろ。直前のページ。
どのページから、ここのページに来たか >>219
ありがとうございます
rowSpanで下の行のtdを削除したいのですが
複数行ある場合にはどうすればいいでしょうか?
event.target.parentNode.nextSibling.nextSibling.nextSibling...
とクリック毎にnextSiblingを続ける方法がわかりません >>231
rows, cells, cellIndex, rowIndex ■ このスレッドは過去ログ倉庫に格納されています