+ JavaScript の質問用スレッド vol.133 +

■ このスレッドは過去ログ倉庫に格納されています
2018/04/16(月) 00:09:43.45ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。

■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
267Name_Not_Found
垢版 |
2018/05/01(火) 18:20:10.76ID:l1wYHpV1
誰でもできる在宅ワーク儲かる方法
少しでも多くの方の役に立ちたいです
グーグルで検索するといいかも『金持ちになりたい 鎌野介メソッド』

IZRJV
2018/05/01(火) 20:41:26.09ID:???
>>249
そんなこと気にしだしたらidがオーバーフローしてないかとか
万が一doubleの整数部分超える実装になってたらどうするのかとか
ほんとキリがないゾ

余計な懸念は捨てて少なくともここに提示するコードは最小限のものにしようヤ
パッチは実際テストで問題出てからでいいじゃん
今や6ヶ月毎にブラウザは更新されるんだから同じバグがいつまでもあるものではないシ
反対に新しいバグがその時に出てきてるかもしれないんだからサ
2018/05/01(火) 20:42:37.27ID:???
❌6ヶ月

🔴6ヶ週
2018/05/01(火) 21:31:49.76ID:???
>>266
全然というかSPAはあくまでもwebアプリに対する概念
普通cordovaでページ遷移は付けない
2018/05/02(水) 06:34:20.39ID:???
そんなことはない
Google検索とかもSPAのうち
2018/05/02(水) 10:46:33.03ID:???
https://lodash.com/docs/4.17.10

このlodashのドキュメントページが読み込み中になったまま固まるのですが自分だけでしょうか?
2018/05/02(水) 12:11:38.84ID:???
おまえだけ
2018/05/02(水) 13:55:52.37ID:???
ありがとうございました
2018/05/02(水) 13:58:47.38ID:???
class構文において
staticなメソッドはstaticキーワードをメソッド名に置くことで実現できますが
staticなプロパティはどうやって実現するのでしょうか?
2018/05/02(水) 13:59:25.54ID:???
×メソッド名に
○メソッド名の前に

でした
2018/05/02(水) 16:45:45.01ID:???
クラス名.プロパティ名
2018/05/02(水) 17:42:21.32ID:???
lodashのuniqueIdって、PHPのuniqidみたいな、
まずバッティングしないIDを生成するものかと思っていたのですが
ただ連番を返すだけのもののようです・・
PHPのuniqidみたいなIDが欲しい時にはどうやるのでしょうか?
2018/05/02(水) 20:10:58.91ID:???
>>277
確かにそれで出来るのですが、どこで初期化するのかが問題です
初期化用staticメソッドを用意して外から呼ぶか、
コンストラクタからそれを最初の一回だけ実行するとかでしょうか?
2018/05/02(水) 22:23:57.87ID:???
class Hoge {
}
Hoge.initialize();

みたいにクラス定義のすぐ下に書くことにしました
これもイケてないですが、イケてるやり方なんてなさそうなので・・
2018/05/03(木) 16:42:00.63ID:???
殆どの場合 static get method ( ) { } で済むでしょ
それかES2019まで待つか
2018/05/03(木) 17:12:10.95ID:???
get set追加したんならoperatorも追加してほしい。
以上、混沌を望むものより。
2018/05/03(木) 17:13:49.42ID:???
hoge.js
(function(){/* hogehoge */})();
fuga.js
(function(){/* fugafuga */})();

みたいに分けてグローバル汚染を回避しつつモジュールみたいにして管理したいんですけど
export/importみたいなのっていつ頃標準化?されるんでしょうか
2018/05/03(木) 17:36:57.46ID:???
標準化はもうされてるだろ。
ブラウザ実装情況はここでも見ろ
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/export
2018/05/03(木) 17:37:05.55ID:???
>>283
されてる
但しIEには何も期待するな
2018/05/03(木) 17:46:16.04ID:???
>>282
提案はずっと前から色々あるぞ
まずbigintが追加されたでしょ、その後はnumberの拡張が来る
n = 1px + 2em
みたいに書けるようになるってこと

だけどそれ以上はまだ目処がついてないかな
でもそのクラスのインスタンスがvalue proxy的なものになるんだと考えると
混沌ではなくむしろ比較的自然でシンプルだし、そういう流れで行くかもね
2018/05/03(木) 18:01:57.47ID:???
>>284-285
ローカルだとセキュリティやら何やらでできないみたいですね
サーバーにアップしたらいけました
ありがとうございます
2018/05/03(木) 20:51:06.15ID:???
export default class {
constructor(x,y){
this.x=x;
this.y=y;
}
sum(){
return this.x+this.y;
}
}

こういう宣言をしていて、classのブロックの中ではなく
別のところにsum関数を(ES6で)書き加えたい時ってどうすればよいのでしょうか
2018/05/03(木) 20:52:25.15ID:???
補足
>別のところ
export default class{
constructor(){}
}
sum(){}

みたいな感じです
2018/05/03(木) 21:04:14.07ID:???
別のところ、ってどこで誰が使う想定なのか
2018/05/03(木) 21:14:47.36ID:???
const Hoge = function(){}
Hoge.prototype.sum = function(){}

みたいに、単にこういう風に書けるのだろうか
と思っただけです >>290
書けなくても特に問題ないです
2018/05/03(木) 22:18:11.57ID:???
classは単なる糖衣構文だし
default exportに名前をつけちゃいけない決まりはないから
export default class Hoge{
constructor(){}
}
Hoge.prototype.sum = function(){}
みたいのは可能なんじゃないの(ごめん試してないです)
2018/05/03(木) 22:59:33.23ID:???
>>292
最初はdefaultもなしでexport class Hogeで、prototypeで追加してたのですが
なんとなくES6で書き加えたい(統一したい)なと思ったのです
あとは、import先で汚染した(や被り気味の命名など)と気づいたとき
export先と行ったり来たりするのがめんどうかなと思い
あえてdefaultのままにしました
2018/05/04(金) 00:54:10.65ID:???
結局staticってどういうこと?
2018/05/04(金) 04:16:05.09ID:???
なぜprototypeに書き加える必要があるのか
というか書き加えたメソッドはHomeObjectが設定されないし
最初から存在するメソッドと等価にはならないからね
2018/05/04(金) 11:45:24.52ID:???
>>295
>HomeObjectが設定されない
とは?
こういうことではなくて?↓
https://jsfiddle.net/pyLbpgrx/
2018/05/04(金) 15:17:45.94ID:???
>>295
HomeObjectとかよその用語当たり前みたいに使うなよな
jsスレでマジックメソッドがどうの言ってるきちがいもいた
2018/05/04(金) 16:17:13.67ID:???
JSBinの読み方はジェイエスビンでいいのでしょうか?
2018/05/04(金) 18:48:52.82ID:???
>>297
何が言いたいのかよく分からんが
JSでメソッドとHomeObjectの関係は重要だぞ
https://tc39.github.io/ecma262/#sec-makemethod
2018/05/04(金) 23:07:45.97ID:???
指定の値を指定数並べた配列を作るには
ループでpushしたり
lengthを伸ばしてからfillしたりするしかないのでしょうか?
2018/05/04(金) 23:21:13.30ID:???
javascriptで今流行りの機械学習勉強したいのですがだめですか?
本が全然みつからない。
もう年だしプログラマーでもないので他の言語やりたくない。
2018/05/04(金) 23:29:33.17ID:???
ガッツリやりたいならCPUでは限界があるから
どちらにせよWebGLを使うことになるからそれは他言語で書いてるようなもの
まあTensorFlow.jsくらいからやるといいんじゃない
2018/05/04(金) 23:31:14.64ID:???
>>300

つくりたい数列による
遅延評価とか再帰をつかって数列を作る手法もある。
2018/05/04(金) 23:41:16.30ID:???
>>303
ありがとうございます
単純な整数値を入れた配列です
2018/05/04(金) 23:46:54.39ID:???
一定の規則に沿った数列をいくつか作りたいなら
ベースとなる配列作っといてそれをmap()で回すとか?
2018/05/05(土) 01:38:02.67ID:???
>>304
たとえば3を45個並べた配列aを作るには、
var a = Array(45).fill(3)
だがこういうことではなくて?
2018/05/05(土) 09:52:31.36ID:???
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
https://www.amazon.co.jp/dp/toc/4873117836/ref=dp_toc?_encoding=UTF8&;n=465392

徹底マスター JavaScriptの教科書 プログラミングの教養から、言語仕様、開発技法までが正しく身につく (Informatics&IDEA)
https://www.amazon.co.jp/dp/toc/4797388641/ref=dp_toc?_encoding=UTF8&;n=465392

上の2つならどっちがおすすめ?
一通りの知識はあるけどもうちょっと知識深めたいってレベルです。
2018/05/05(土) 10:22:50.38ID:???
>>306
ありがとうございます
たしかに配列を作成するのはそれが一番シンプルですね
実際の問題はすでにある配列に同一の要素を任意数追加するというもので
fillやpushを使う以外にもっとシンプルな方法があるんじゃないかと思ったのですが、なさそうですね
ありがとうごさいました
2018/05/05(土) 13:13:34.14ID:???
配列のlengthを拡張してあってパターンを含ませてるならcopyWithinで1発
2018/05/05(土) 13:31:53.16ID:???
>>307
それくらいならMDN眺めたり実装追ってるブログ見りゃいいと思うよ
2018/05/05(土) 13:48:06.19ID:???
>>308
すでにある配列をaとして、3を45個追加した配列bを作るには、
var b = [...a, ...Array(45).fill(3)]
だがこういうことではなくて?
2018/05/05(土) 14:26:31.11ID:???
>>たしかに配列を作成するのはそれが一番シンプルですね
>>実際の問題はすでにある配列に同一の要素を任意数追加するというもので
2018/05/05(土) 14:47:32.83ID:???
あー破壊変更が要件なのか
2018/05/05(土) 15:44:58.29ID:???
それならpushでいいじゃん。ループは要らないぞ。
何で嫌がるのかサッパリだらっしゃい…

すでにある配列をaに、3を45個追加するには、
a.push(...Array(45).fill(3))
だがこういうことではなくて?
2018/05/05(土) 16:54:36.80ID:???
>>fillやpushを使う以外にもっとシンプルな方法があるんじゃないかと思ったのですが、なさそうですね
2018/05/05(土) 16:59:08.38ID:???
use strict宣言してた場合、;セミコロンも書かないのが普通?
つまり、好みの問題じゃなく全部改行使って書いたほうがいい?(結局圧縮するだろうし)
2018/05/05(土) 19:00:38.55ID:???
use strictはセミコロンの挙動を変えはしないぞ
つまるところ好みの問題だぞ
〜の方が良い?的な質問はしないほうが良いぞ
2018/05/05(土) 19:44:45.70ID:???
>>315
もっとシンプルな方法…?
有りうるのか?どういうAPIになるんだろ?
2018/05/05(土) 22:54:57.27ID:???
>>308
自分で関数つくればいいだけやろ
しね
2018/05/05(土) 23:11:58.39ID:???
だからstaticな変数ってなんなの?
誰か教えてよ
2018/05/05(土) 23:32:43.43ID:???
Int8Array.BYTES_PER_ELEMENT
的なクラスに直接生えてるプロパティのことだろ
ES2019くらいで
class {
static p = hoge
}
と書けるようになるとは思うが、
それまでは代わりに
class {
static get p() { return hoge }
}
とするのが定石だな

prototype下のプロパティでも同じだ
2018/05/05(土) 23:36:13.47ID:???
>>317
あ、そういう意味ではなくて今後セミコロンが廃止になりますか?
みたいなニュアンスだったのです
調べてみるとuse strictに限らずセミコロンありなし混合はjavascriptのそういうスタイルだったみたいですね
ありがとうございました
2018/05/05(土) 23:38:49.21ID:???
super()って便利なのにネーミングがダサくない?
2018/05/06(日) 00:27:00.89ID:???
>>320
参照透過性のある書き換え不能の変数じゃないのか?
2018/05/06(日) 01:10:59.37ID:???
>>322
そりゃ100年後は分からんが、現時点で非推奨になる理由がないだろう
ある面ではスペースみたいな存在なのだから

ほとんどの普通の言語およびコミュニティに於いてそれが無駄だとしても
言語仕様として過剰なスペースを禁止しようということにはならないだろう
2018/05/06(日) 11:40:55.77ID:???
例えばデジタル時計を表示するアプリをつくったときに
setIntervalで1秒毎に更新するようにして
スリープ状態になってスリープ解除すると
遅れた時間が表示されます。

@これはどうしてなのでしょうか?
スリープになると、タイマーが止まって処理が実行されずにキューが溜まっていって、
解除されるとタイマーが止まった時点から再開して
溜まったキューが最初の分からひとずつ実行されるのかなとおもってるのですが
この考えは完全に正解でしょうか?1つでもおかしなとこあったら教えて下さい

Aどう解消すればいいのでしょうか?
2018/05/06(日) 13:01:45.01ID:???
@代わりにsetTimeoutで実装することを考えたら分かりやすいだろう
実行されたら次のキューを登録する
したがって実行が遅延するとキューが溜まっていくことはない

Aそもそも精度は保証されて無く、色々なことで遅れるので、
JSに限らずだがタイマーで時を進めて行ってはいけない
更新の度に現在時刻を取得すること
もしストップウォッチ的なものなら開始時刻を取っておいて、毎回比較して差分を出す
そしてオマケで更新はrequestAnimationFrameを使うと良い
2018/05/07(月) 01:56:12.73ID:???
>>302
TensorFlow.jsって
TensorFlowの本に書いてるコード実行すればJSでも動くってことですか?
つまり記法は全く同じ?
2018/05/07(月) 01:59:23.73ID:???
そのレベルならやめといた方がいい。
pythonでやりな。
あっちはあっちで大変だと思うが。
2018/05/07(月) 07:02:16.48ID:???
基本的に既にできてるモデルをWebで動かす用であって
学習もできなくはないけどAPIもぜんぜん違うよ
2018/05/07(月) 14:39:20.03ID:???
>>324
それはないでしょ。
だってそれならクロージャで実現できる。
クロージャに値を閉じ込めればいいだけの話。
クロージャは知ってるって言ってたから
そいうことではないだろ。
2018/05/07(月) 15:46:50.00ID:???
普通static変数=静的な変数っていったら、呼び出すごとに初期化されず状態が保持される変数のことでいい
言語によって扱いは全然異なる
javascriptではクロージャに閉じ込めればもちろんできるし
そもそもjavascriptにあんまし馴染まない概念といえなくもない

こんなとこで合ってる?(質問)
2018/05/07(月) 20:21:58.21ID:???
いや、そういう関数の機能としてのstatic変数が存在する言語は少ないので
普通staticな変数と言ったらクラスの何らかを想定するだろう、JSでも
2018/05/07(月) 20:48:57.29ID:???
classでも基本同じでは
インスタンスごとに独立固有でなくインスタンス間で共有され、
インスタンス生成ごとに初期化されるのではなく、一度だけ初期化される、要するに状態が保持される

静的変数が関係する場合、常に同じ入力に対し同じ結果が返されるとは限らない
なので静的変数の性質として「参照透過性があること」を持ってくるのは間違い

書き換え不能かどうかも静的変数の概念には直接関係しない
2018/05/08(火) 06:29:45.79ID:???
それを言うとJSの場合はstaticな変数なんて存在しないけどな
staticとして宣言されたものはクラスオブジェクトのプロパティになるだけだから
2018/05/08(火) 07:31:14.27ID:???
Node.ELEMENT_NODE は静的変数なんじゃない?
2018/05/08(火) 08:35:27.58ID:???
それは定数ですね
2018/05/08(火) 09:10:45.85ID:???
クラスベースオブジェクト思考に毒されたやつは話を聞かない
唯一絶対の真理と思ってやがる
jsにclass構文なんか導入したせいで拍車がかかった
ちなみに拍車とはカウボーイのブーツのかかとについてるトゲトゲの車輪な
2018/05/08(火) 09:57:30.62ID:???
「ある要素を、それ以外の要素がクリックされたら閉じる」
のような処理はどう実装するのがベストなのでしょうか?
モーダルウインドウでは半透明の黒幕を表示してそこでイベントを受けるというやり方を見ますが
他のコントロールへのイベントは生かしたままにしたいです
要素にtabindexを付けてフォーカスを持たせて、focusoutを検出したらいいのでは?
と思ってやってみたのですが、ブラウザ以外のアプリにタスク切り替えしても反応してしまいました
あとはdocumentに一時的なclickイベントリスナを付けるくらいしかなさそうですが
これだと他のイベントリスナでstopPropagationされたら反応しなくなると思います
つまり、考えついたどの方法にも何かしら問題があるのです・・
問題のない方法はないでしょうか?
2018/05/08(火) 10:20:26.95ID:???
>>339の件ですが
stopPropagationされる可能性が少ないイベントリスナを使えばいいんじゃないかとひらめきました
クリックイベントはmousedownやclickで受けるのが普通なので、
これらはstopPropagationされる可能性がありますが
あまり使われることのないmouseupなら殺されることもないのではないかと。
試しにmousedownやclickをstopPropagationするコードを書いてみましたが
mouseupはちゃんとdocumentまで伝わってきました
これはいいのではないでしょうか?
もっと良い方法ありますか?
2018/05/08(火) 13:21:46.06ID:???
>>340
組み込んだらうまく動きました
今まで、リスナでイベントを捕捉して処理をした時には
大抵の場合、とりあえずstopPropagationとpreventDefaultを両方実行していました
処理はもうしたんだから、他の要素はもうそれを知る必要がないだろう、
その方が負荷が下がっていいだろう、と。
が、イベントは一連の処理を開始するきっかけにもなれば、
一連の処理を終わらせるきっかけにもなるので、
「処理はもうしたから、他の要素はもう知る必要がないやろ」という態度は問題ですね
そうしなければならない理由がない限り、
処理を済ませたからといってイベントの伝播を止めるのは良くないのでしょう
2018/05/08(火) 16:40:47.77ID:???
>>335
バカ?
2018/05/08(火) 16:53:53.96ID:???
自己紹介乙。
Javaワールドから出てくるな
2018/05/08(火) 19:18:42.87ID:???
JSでstaticといったら
class C{
static m(){}
}
みたいなのを指すけど
そこに高度な思想や概念なんて特に無いよ
2018/05/08(火) 19:26:33.76ID:???
静的関数じゃなくて静的変数の話だぞ
cにだってあるやつ
2018/05/08(火) 20:19:18.24ID:???
>>343
名前がにてるんだから仲良くしろやカス
2018/05/08(火) 23:53:05.61ID:???
electronってどう?
2018/05/09(水) 12:41:42.12ID:???
>>345
静的変数の話ではないよ
プロトタイプとprototypeが違うように
静的変数とstaticな変数では意味合いが全く違う
2018/05/09(水) 15:08:56.86ID:???
じゃあ、その「静的」や「プロトタイプ」は英語では何というの?
2018/05/09(水) 15:19:50.78ID:???
prototaip
2018/05/09(水) 15:30:48.86ID:???
oh
352Name_Not_Found
垢版 |
2018/05/09(水) 17:28:51.15ID:PpprmdVh
SPAでのログイン処理について詳しく書かれた本があれば教えて下さい
353Name_Not_Found
垢版 |
2018/05/09(水) 17:42:39.08ID:PpprmdVh
特に分からないのはセッションハイジャック対策です
今はsslが普通なので対策はいらないのでしょうか?
クライアントはidとパスワードを送る
サーバはセッションidを送る
以後、クライアントはセッションidを鍵として使う
これだけでいいのでしょうか?
354Name_Not_Found
垢版 |
2018/05/09(水) 17:47:03.79ID:PpprmdVh
SSL環境でセッションハイジャックが出来るなら
それはもはやidとパスワードが盗める状態なので
そもそも終わってますよね
そう考えると対策はいらないってことでしょうか?
2018/05/09(水) 19:54:14.56ID:???
そのレベルならば自分でセキュリティ考えてはいけません
専門家・専門会社を頼りましょう
2018/05/09(水) 21:21:07.91ID:???
javascriptって終わるの?
https://trends.google.co.jp/trends/explore?q=javascript&;date=all
2018/05/09(水) 21:34:59.93ID:???
>>347
返答ないってことは誰も使ってなくて、
評判も聞かないってこと?
javascriptしかしらないプログラミング初心者の自分には
electronってすげー便利そうなんだけど。。。
2018/05/09(水) 21:36:13.07ID:???
終わらんだろ。代替技術がない
2018/05/09(水) 21:39:17.57ID:???
>>357
5chだと板分類が微妙で居場所が無い
あと配布サイズがデカくなるので気軽には使いづらい面はある
2018/05/09(水) 21:39:48.86ID:???
心中するつもりでのめりこむんなら、あるいは
2018/05/09(水) 21:56:34.75ID:???
2015年出版のほんに
「CoffeeScriptは必修科目」って節があって15ページくらいの解説があるんだが
コレ読んだほうがいいの?
ネットで調べるともう終わった言語って評判だけど。。。
2018/05/09(水) 22:00:55.46ID:???
端的に必修かそうでないか言うならば、不要
2018/05/09(水) 22:01:39.42ID:???
>>361
いらないいらない。もうCoffeeScriptの噛ませ犬としての役目は尽きた
JavaScriptを進化させるための良いプロトタイプになったよ

この言語は最初から流行らず死滅する運命、少し考えればわかったことだね。
https://trends.google.co.jp/trends/explore?date=all&;q=JavaScript,CoffeeScript
2018/05/09(水) 22:09:21.18ID:???
昔のコーヒーのコードは見事に負債になってるな。
2018/05/09(水) 23:18:39.76ID:???
あの頃の盛り上がりはなんだったんだろうなw
2018/05/09(水) 23:29:28.53ID:???
実は盛り上がってなどいなかったんだよ
カツラと同じでそう見せてただけさ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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