+ JavaScript の質問用スレッド vol.123 + [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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 SSLとか証明書とか意味がさっぱりわからないのですが
なにがどうなっているのでしょうか? Cloudflareとは何じゃ
良い子はそんなの使ってません。 >>276
SSLが分かんないのにURLがhttpsになってたら設定見直せとしか
「独自SSL」とかその辺見たらいいんじゃない
いずれにせよJS関係無いので向こうで聞いてみたら
XSERVER エックスサーバー Part6
https://mevius.5ch.net/test/read.cgi/hosting/1568069691/ AWS のS3 とか、知らんのか?w
HTTPS, SSL の証明書とか、システム構築運用の初歩の初歩だがw
無料の証明書、let's encrypt とか sort関数に追加の引数を渡すことってできますか?
array.sort(mySort())に引数を与えて条件によって処理を変えたいのですが。
普通にmySort()に引数を入れるとソートで使われる引数に値が入ってしまってダメでした。 function mySort(value) {
if(value===1) {
return (a, b) => a-b
} else if (value===2) {
return (a, b) => b-a
}
}
array.sort(mySort(1)) // 昇順
array.sort(mySort(2)) // 降順 ありがとうございます。
新しいjsでは大丈夫でしたが、ES3という超古いバージョンなのです。
書き忘れていました。後出しで申し訳ありません。
(アドビのソフトで使われているjsです) >>284
bindみたいな引数束縛する関数を作る >>284
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/15-4_Array_Objects.html#section-15.4.4.11 >>285
ちょっと自分のスキルでは難しそうです。 ES3だと
return (a, b) => a-b
↓
return function(a, b) { return a - b; };
じゃね?
だいたいsortと比較関数でクロージャにしちゃって引数でなくローカル変数でやっちゃうよね returnの挙動はともかく、
mySort(value)自体がES3だとできないのです。(aにvalueが入ってしまう)
とりあえず今はグローバル変数で対応していますが、
引数でやる方法がないのかと思いまして。 >>291
ES3でもできるよ
できないと思ってるコードを書いてくれれば原因わかる >>293
今やってることは大雑把には以下の通りで、
mySortにa,b以外の値cを渡してそれを元に処理を追加したいのですが
cの渡し方がわかりません。
var ary=[10,12,53,41,5,6,];
ary.sort(mySort);
function mySort(a,b){
return a-b;
} var ary=[10,12,53,41,5,6,];
ary.sort(mySort(-1));
function mySort(c){
return function(a,b){
return c<0 ? a-b : b-a;
};
} ありがとうございます。まさに希望どおりです。
こんな書き方もできるんですね。 高階関数やクロージャについて調べてみると理解進むよ。
ちなみに今でも全然通用する概念。 質問させてください。
nodejsで line botを作っていて応答文字に改行を入れたいのですが
ダブルクォートで囲った中に”\n”で改行するという仕様のようなのです。
例
return client.replyMessage(ev.replyToken, {
type: "text",
text: “あああ\nいいい”
});
しかし今作っているbotは文字列を変数に格納しており
const aaa = スクレイピングで拾ってきた文字列
const bbb = スクレイピングで拾ってきた文字列
const ccc = aaa + “\n” + bob
return client.replyMessage(ev.replyToken, {
type: "text",
text: ccc
});
では改行されませんでした。
text: `${ccc}` でもダメでした。
\nがそのまま表示されてしまいます。
ダブルクオートで囲い直す方法ってございませんでしょうか?
よろしくお願い致します。 >>299
ありがとうございます。
しかしダメでした、、
やっぱり \n がそのまま表示されてしまいます。 すみません。自己解決しました。
\ではなくバックスラッシュでした。
ありがとうございました。 そもそも文字列はシングルクオートで囲う癖つけとくと便利だと思う
テンプレート文字列にするのもいいけど requirejsやってるんだけどシェルのexportコマンド的なの無いの? function hoge(){} //引数なし
hoge(a=11,b=33)
名前付き引数を可変的に追加できて
関数hoge側でkey(aとb)名も受け取れるようにしたいんだけど無理?
argumentsはkey名は無視されたし
hoge({a=1,b=3})で関数内でfor key in objみたいにするしかないのかな function foo(a, b, ...rest) いまいち何がしたいのかよくわかんないけど
function hoge(o = {}){
console.log(Object.keys(o))
}
hoge({a: 1, b: 3})
//=> ["a", "b"] >>307
端的にいうと
引数は
hoge(x=1,y=2,a="ho",b="ge")
hoge(z=2,x="abc")
みたいに指定できて
{x:1,y:2,a:"ho",b:"ge"}や{z:2,x:"abc"}
みたいに関数で受け取りたい
(もちろんx,yやa,b,cみたいなkey名はこれに限らず) JSにそういう記法はないので無理
Pythonを使え えっ…じゃあこうだけど??
function hoge(o = {}){
console.log(o)
}
hoge({x: 1, y: 2, a: "ho", b: "ge"})
//=> {x: 1, y: 2, a: "ho", b: "ge"} >>309
なるほど
他の言語だとこういう書き方があったのでもしかしたらJSにもあるのかなとおもったのですがないのですね
ありやした
>>310
それはもちろん
しかしそれだとそもそも{}表記なんで >>311
あーそうゆうことね。
()呼び出しでなくタグ付きテンプレート呼び出し、
eval使っていいなら、
function hoge(s) {
let o={},p=new Proxy(o,{set:(o,p,v)=>(o[p]=v,!0),has:()=>!0});
eval(`with(p){${s[0]}}`)
console.log(o);
}
hoge`x=1,y=2,a="ho",b="ge"`
//=> {x: 1, y: 2, a: "ho", b: "ge"} hoge`
x = 1,
y = 2,
a = "ho",
b = "ge",
z = x + y,
c = a + b
`
//=> {x: 1, y: 2, a: "ho", b: "ge", z: 3, c: "hoge"} >>312,313
なるほど
そんな書き方もできるんですね
ありがとうございます const hoge = [{id:"xxx",
num:5000},
{id:"yyy",
num:2000},
{id:"zzz",
num:9000},]
こういう配列でnumが一番大きいobjectを取得するシンプルな方法ってありますか?
思いついたのは
const foo = hoge.find((i)=>{
return i.num === Math.max(...hoge.map((v) =>{
return v.num
}))
})
なんですけどこれだけの処理に二重でループ回すのはナンセンスな気がしてしまって・・・ >>315
あるいはreduceか
forとかfor-ofで書けるようになった方がいいとは思うけどね 自分で書いといてなんなんですが>>315のnumは存在しない場合もありました
>>316,317
sortはアリかなと思いました
他のメソッドはパっと思いつく感じ最初の関数と似たようなものしか思いつきませんでした・・・ const foo = hoge.sort((a, b) => a.num - b.num).pop()
とか
const foo = hoge.sort((a, b) => b.num - a.num)[0]
とか。
しかし両者ともhogeを書き換えてしまうので、
const foo = [...hoge].sort((a, b) => a.num - b.num).pop()
とか
const foo = [...hoge].sort((a, b) => b.num - a.num)[0]
のほうが望みのものかもね。
あとは
const foo = hoge.reduce((acc, r) => r.num > acc.num ? r : acc)
とか。 sortしなくていいケースでsortするのは無駄
reduceかfor-ofで >>318
> numは存在しない場合もありました
このような後出し要件の場合は、安全なアクセス関数を追加で用意して差し込むのが簡単。
例えば、
const getNumSafe = ({num = -Infinity}) => num
const foo = hoge.reduce((acc, r) => getNumSafe(r) > getNumSafe(acc) ? r : acc)
のように。 >>319-322
ありがとうございます
参考に自分のパターンに合うものを書いてみたいと思います Lodash は多くのライブラリも使っているから、使うべき!
プロジェクトのライブラリの依存関係を検索すると、
多くのライブラリが、Lodash に依存してる Netflixはlodash切って素のJSで書き直したけどな。 ライブラリが必要な程、複雑な処理ではない気がするけどな
hoge.reduce((max, current) => max < current.num ? cutrent.num : max, -Infinity); 動的型付け言語って本当にわかりづらい
javascriptでオブジェクト指向的なプログラムを組もうと思って
簡単な本でjavascriptを勉強してるんだけど
interfaceないのにどうやってオブジェクト指向的な開発してるんですか?
typescriptしたほうがいいんだろうか? >>330
インターフェイスやabstracut使わずにどうやれと >>331
あるもので何とかする気のない人にどう答えろと javascriptでオブジェクト指向開発は、今のところは無理ってことですかね? 独学におすすめの本はありますか?
プログラム自体はphpの基礎ができる程度です >>336
『JavaScript for impatient programmers』 javascriptって面白い挙動するんだね
class s{
constructor(){
this.s1="s1";
let .s2="s2";
alert(); }// ---@
alert(){window.alert();}} //---A
new s();
-------------------
@を
alert(s1) ×
alert(this.s1) 〇
alert(s2) 〇
alert(this.s2) ×
と、Aで引数を受け取らなくてもalertで値が表示される
@alert(s2)とし
Aalert(){window.alert(this.s1):}
とすると、s2がalertされるし
@alert()とし
Aalert(){window.alert(this.s1):}
とするとalertには何も表示されない
とても不可思議な挙動 >>339
(1)で(2)を呼びたいならthis.alert()でないとだめ
ブラウザ上ではwindow.は省略可能なので(1)のalertはwindow.alertその物
スクリプト系の言語ではc++やc#等とは違ってthis相当の物を省略できないのが多い >>336
プロ向きなら、サイの表紙の2冊のサイ本
初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、オライリー、2017
JavaScript 第6版、2012、David Flanagan
ただし、これらは、Google などの開発者が読む、プロ向きの本。
最低でも、Ruby は出来ないと、難しすぎて読めないと思う
JavaScript は、言語仕様が肥大化してる。
Rubyみたいに、簡単には学べないから、適当にお茶を濁した方がよい。
キリがない >>341
> ただし、これらは、Google などの開発者が読む、プロ向きの本。
さすがにこれは嘘
Ruby知らない俺でも読めた
ES2020などの最新仕様に対応した和書がないのは認める
日本語に拘らなければある(>>338)し、概ね日本人著者よりも英語圏の著者が優秀 javascriptの挙動を確認したいので
本体が何処にあるか調べてるのですが不明です
javascript本体はどこにあるのでしょうか? Node.js なら、コマンドプロンプトで、
where node
と入力すると、
C:\Program Files\nodejs\node.exe 「javascript本体はどこにあるのか」か。
ちょっと哲学的な問いだな。
俺としては、「Ecma International にある」説を推したい。
しかし物理的実体があるわけではないので Ecma International 本部があるジュネーヴにはない。 >>344は>>328,339と同じ人なので深い答えは期待出来ないかと 書き込み不可でした
質問の仕方が悪くてすみません
javascriptが関数などをどう処理してるのかを知りたくて
javascriptのソースファイルを見たいなって思ってました
googleのchromeファイルを見てたんですけどちょっと分からなくて質問してみました
実際にはバイナリなりで読めない状態なのかもしれませんけど
所在だけでもしっておきたいなと >>352
そういう説明が欲しかった。
chromeのJavaScript実行エンジンはV8だから、V8のソース読めばおk。
以下に手順が説明されているよ。
https://v8.dev/docs/source-code >>353
ありがとうございます!
時間のあるときに落として読んでみます
本当にありがとうございました! function(5, 10){
この5や10を別の数字や文字に変更することは出来ますか? >>355
そもそも、仮引数に数値は指定出来ないと思うのだが…
要件が成立しない 関数に引数で渡された変数の中身じゃなくて変数の名前って取得できますか? >>356
文字は適当に書いただけで意味はないです
ようするに()内の文字(呼び出し時に送った文字列とか)を加工できるかどうかの質問です
わかりにくくてすみません >>357-358
変数値は再代入で変えられる
変数名はグローバル変数を除いて変更(元の名前を削除)出来ない
そもそも、変数名を変えようとするのは不具合の種になる
オブジェクトのプロパティやnew Mapのkey等、限られた空間で安全に変更するのが好ましい >>357
と思ったが、Function#toStringをparseすれば、ユーザ定義関数に関しては出来なくはないな
目的次第では別の手段にすべきと思うが JavaScriptの効率的な学習方法を教えて下さい
入門書のひらがなJavaScriptは終わりました。
次は、Progateか一つ上の書籍かと思っていますが、どの書籍にすべきか迷っています >>363
> JavaScriptの効率的な学習方法を教えて下さい
目指している目標に依る
何かを作るだけならサンプルコードのコピペに行き着く人が多い
基礎から下積みするなら、一日でも早く仕様書を読めるようになる事が最も効率的なので、仕様書に近い書籍を選ぶ事になる 目的は参照ボタンを選択してファイル選択ダイアログを開き、選択したローカルファイルの中を読む事です。
ただ、
<input type=`file`〜>で表示されたファイルパスを取得する事は出来ない(セキュリティ上)?
ローカルファイルを読むにはファイルパスが必要なので、どうすれば良いでしょうか?
すみませんよろしくお願いいたします。 >>367
質問者ではどの質問者か分からん
文脈的には>>365へのレスで>>363本人か?(IP違うが)
名前にレス番ふって、レス相手にレス相手アンカーするぐらいはしてくれ >>371
ありがとうございます。
これでフルパスを取得できるんですね。 >>373
すみません。
ローカルファイルで読む為にフルパスが必要なんです。セキュリティの問題で取りにくいのは知ってます。それで
>>367
に書いた質問をしたのです。
よろしくお願いいたします。 ■ このスレッドは過去ログ倉庫に格納されています