+ JavaScript の質問用スレッド vol.137 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
※前スレ
+ JavaScript の質問用スレッド vol.136 +
http://mevius.5ch.net/test/read.cgi/hp/1542707959/ ■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです ■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 https://w3techs.com/technologies/overview/javascript_library/all
w3techsによると2017年1月の時点で71.9%のサイトがJavaScriptのライブラリとして
jQueryを使用していることが判明し、それ以降もシェアの増加が続いていたが、
2018年4月〜2018年10月の約半年間で変化が見られず、ようやく73.3%〜73.4%で
増加が停止したようである。
しかしながら、減少の傾向は見られず、マーケットシェア(JavaScriptを使用しているサイトでの使用率)
https://w3techs.com/technologies/history_overview/javascript_library は97.2%を
示していることから、jQueryからの移行が始まったと言うより、上げ止まりであると考えられる
jQuery以外では、この1年でBootstrapが2%程度、Underscoreが1%程度増加している以外は
ほとんど変動はなく、期待されていたAngularは過去最高の0.5%から0.1%減少した0.4%に、
Reactは過去最高の0.6%から0.5%と大きく減少し、0.1%に下がっていることが判明した。
またいずれのライブラリも使用していないサイトは24.5%で
2017年まで減り続けていたがこの一年ではほとんど変化はない。
この状況が大きく変化するときは来るのだろうか?この先の動向が注目される React vs jQuery
jQueryはどんどん使われなくなってきている
https://i.imgur.com/enJqwJn.png >>14
お前はjQueryスレ行けや
こっち来んな!! >>14
トレンド
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89
> トレンド(英語:trend)は、時代の趨勢、潮流、流行のこと。ファッション、マーケティング、
> 経済動向分析などの分野でよく使用される。統計学では、傾向変動を指す(#統計学用語)。
googleトレンドなんだから、今の流行を示してるに決まってるだろ >>15
何をそんなに怒ってるの?
>>16
ただの検索数だよ
クローラの割合、前年比、トレンドをあわせて考えると、
reactを使い始めて、検索しながら手探りで使い始めている層が多いということが考えられるね reactの0.1%って幾らなんでも少なすぎない?
と思ったけど個人サイトやペライチのサイトも考えればそんなもんか
ペライチサイトでもjQueryだけはとりあえず入れるからなぁ > reactの0.1%って幾らなんでも少なすぎない?
そこはそんなに重要じゃなくて、2018年に0.7%まで増えていたのが
2918年終わりには一気に0.2%まで減ってしまったところなんだよな
順調に増えてるなら、低くてもまだ出たばかりだって言えるんだけどさ
https://w3techs.com/technologies/history_overview/javascript_library/ms/y > 2918年終わりには一気に0.2%まで減ってしまったところなんだよな
900年ほど水増ししちゃったw
2018年の終わりってことね >>19
jQueryスレでやれカスブタ野郎!!! >>21
Reactの話題をjQueryスレでやるっておかしくね?w >>3
なぜjQuetyスレのテンプレを使う?
啓蒙活動は余所でやってくれ 質問
<span onclick="funca()">
<a href="abc >>24すみません途中で書き込んじゃいました。改めて
質問
<span onclick="funca()">
<a href="a">link</a></span>
というような状況で、linkをクリックした時にリンクを開く動作だけしてspanのonclickが働かないようにする
(伝播しないようにする?)にはどうしたら良いんでしょうか? >>25
訪問したサイトにイベント付きのリンクがあり、
そのイベントを発火させないスクリプトをあとから実行したい
ということなら
a要素をspanから出して直後に挿入とか
span要素の親要素.insertBefore(span要素.querySelector('a'),span要素.nextElementSibling);
もっと簡潔に書けそうですが
https://jsfiddle.net/Lcn8orwv/ >>25
<a href="a" onclick="arguments[0].stopPropagation()">link</a> jQuery版
https://jsfiddle.net/hkL2jmds/
function funca() {
alert("funca");
}
$("a").on("click", function(event) {
event.stopPropagation();
}); >>27
ありがとうございます。バッチリいけました。
onclickの中のarguments[0]の役割について勉強になりました。なるほど。 「javascript stoppropagation preventdefault」で検索! そらそうよ。
onclick="function(e) {e.stopPropagation();}"
って書くのと同じなんだからarguments[0]はイベントオブジェクト > onclick="function(e) {e.stopPropagation();}"
> って書くのと同じなんだから
それは保証されてんの? >>33
同義じゃね?
無名関数で一度ラップされてるだけで >>38
それなら
onclick="void function(e){e.stopPropagation();}()"
と書くことになるけどこれはエラー。
この場合eもarguments[0]もundefined。 >>39
void演算子つくと、onclick属性の値はundefinedになっちゃ
…いま気づいたわ間違ってたわすまんこ
<a onclick=" arguments[0].stopPropergation(); ">
は
a要素.addEventListener('click', function(){ arguments[0].stopPropergation(); });
か
onlick属性の値は
addEventListenerの第二引数に渡される関数の中身だた arguments[0]に頼らざるを得ないのかよ
なんか気持ち悪いな >>41
そんな書き方は普通されないし、する必要もない
<a onclick="event.stopPropagation()">
がある >>42
グローバルにeventが置かれてるのは
IE、safari、chromeだけじゃね?
違ったっけ? eと並んでjs側でも慣例的によく使われるとはいえイベントオブジェクトを勝手にeventという特定の変数名にバインドされてるのは更に気持ち悪いな。arguments[0]のほうがまだマシだわ。 あれってバインドされてるんじゃなくて
window.eventってのが最初からいて
全てで起こるイベントを拾ってるんだと思ってた テンプレートストリングってバックチックで囲むやつのことですか? テンプレート文字列
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings
Template literal は、バックティック文字(` `) (grave accent)で囲む。
プレースホルダーは、ドル記号と波括弧、${expression}
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20." >>51
ありがとう、これですか
f-stringみたいで使いやすいですね
今はテンプレートリテラルと呼ぶのか テンプレートストリングからテンプレートリテラルに改名されてもmdnのurlは昔の名前のままなんだな。当たり前か… google maps APIで、マーカーに関連付けしたInfoWindowの内容を取得するにはどうしたらいいでしょうか?
具体的には、以下のようなマーカーアがある状態で、マーカーをクリックしたら、地名・タイトル・本文 を文字列として取得したいです。
var marker1 = new google.maps.Marker( { position: { lat:30, lng:135 }, label:'地名', icon:'icon.png', map:map });
var info1 = new google.maps.InfoWindow( { content: '<div class = "inf">タイトル<br><div>本文</div></div>' } );
marker1.addListener('click', function(){ info1.open(map, marker1); } ); タイトルのセレクターは、div.inf
本文は、div.inf > div
地名は、わからない アロー関数の前につけるvar, const, let
ってどれでもいいの? let使うとif等のブロック内で定義した時、ブロックから出ると使えなくなる
その方がいい場面があればletだけど、多分内と思う
脳死でconstで良いと思う
varはもう生涯使わんでいい >>58
>>59
ありがとう
varはデプリケーテッドなんですね
let はスコープ内だけで
varはglobal
constは定数 constはletとスコープは一緒
値を更新しないならconstが推奨される
アロー関数を変更することなんてまず無いんだからconst一択
どうしてもconstではできない時(少ない)だけletを使う アロー関数と関数宣言って使い分けがめんどくさい
なんでこんなクソごっちゃで仕様めちゃくちゃにしてるんだか アロー関数は当分使わないかな
なんか見づらいんだよな アロー関数は「関数である値」と考えればいいよ
見づらいのは関数だと考えているから。
例えば、 sort(比較関数) みたいな時
引数はsoft関数にわたす値のようなもんでしょ?
だから関数として見えるんじゃなくて
値として見えるように、ああいう構文になってるんだよ >>62
ついて来れない人達のために
仕方なく互換性を残してるんだよ まあ関数リテラルのシンタックスシュガーだけど実際は中の挙動が違うし当たり前だけど定義の前では使えない アロー関数の => {} の{}の仕様は無くして欲しかったね。returnも使えなくしてほしかった
=> の右側は式だけで十分 だからアロー関数と関数宣言の両方を使ってるソースみると、なんで統一しないの?ってなることもある
だけどこれは仕方のないことなんだよ
統一したいならfunctionを使うしかない => = function
こういう代入ができればいいのに >>68
目的が違うからだよ
・関数は宣言しておいて何処か別の場所で使う
・アロー関数は別の関数に値として渡すために使う
書き方を分けることで、どういう使い方をするのかを
読み手に読み取らせることが出来る 「使い方が違う」というのを理解せずに
単に「書き方が違う」とだけしか思ってないやつがいるんだよな >>70
>・アロー関数は別の関数に値として渡すために使う
渡すためだけにしか使えないわけじゃないんだけど、それはどこで誰が決めたの? input検証にhtml5からrequiredプロパティが使えるようになったとのことで
それ試してるんですがvalidになったときの状態はどうやって判定したらいいのでしょう?
input[name="hoge"]がパターン^abcでvalidになるとして
if ($('input[name="hoge"]').value.match(/^abc/))
のようにとってしまっては
ただvalidとinvalidでスタイルを変更するだけの飾りになってしまうので
何かvalidになったときその要素に何かプロパティが設定されるのではないかと思うのですが
ちょっと調べてもわかりませんでした
ご存知の方教えていただけるとありがたいです すみません追記です
$('input[name="hoge"]')は$hogeとして
patternプロパティ参照して
if ($hoge.value.match($hoge.pattern))
ではとれます
if ($hoge.value.isvalid)
のようにとれるのが理想でプロパティ見てますが
っぽいのが見当たりません $('input[name="hoge"]:valid') でいいでしょ?
無駄なことしなーいw >>75
:の意味がよくわからず思考から除外してました
それでとれることを確認しました
Event.targetにも対応したかったのでそれをヒントに調べましたところ
checkValidity()メソッドでいけることがわかりました
$hoge.checkValidity()
どうもありがとうございました オブジェクト(変数)名を取得する方法を教えてください。
具体的には、以下のようにしたいです。
let variable1 = "";
let variable2 = [];
let variable3 = 12;
let list = [];
list.push(variable1);
list.push(variable2);
list.push(variable3);
for(let i = 0; i < list.length; i++)
{
alert(list[i].???); //variable1 variable2 variable3と順番に表示
} 長い
const variable1 = "";
const variable2 = [];
const variable3 = 12;
const list = [variable1, variable2, variable3];
for (const i of list) {
alert(???); //variable1 variable2 variable3と順番に表示
} listに入るものは変数名ではなく変数の中身だけなので無理 こんな感じで書く方法があれば行けるかもねぇ
for (arr) {
console.log(this.var_name);
} const variable1 = "";
const variable2 = [];
const variable3 = 12;
const list = {variable1, variable2, variable3};
for (const [key, value] of Object.entries(list)) {
alert(key);
} やっぱダメだわ大抵の処理系ではvariable1, variable2, variable3の順で出てくるれるが仕様では順序保証されてない eval使っていいならこんなのはどうじゃろ?
順序保証されたぞ。
const variable1 = "";
const variable2 = [];
const variable3 = 12;
const list = ['variable1', 'variable2', 'variable3'];
const map = list.map(name => [name, eval(name)]);
for (const [key, value] of map) {
alert(key);
} >>77
いずれにしても、変数名を文字列で渡さなければ、無理
const map = new Map([['variable1', variable1], ['variable2', variable2], ['variable3', variable3]]);
for (let [key, value] of map) condole.log(key) ちょっと趣向を変えてこんなのとかw
順序は保証されるし変数名を文字列で渡さなくてもいいぞ。
const variable1 = () => "";
const variable2 = () => [];
const variable3 = () => 12;
const list = [variable1, variable2, variable3];
for (const func of list) {
alert(func.name);
} そもそも変数名を取得する設計を見直した方がいい
何がしたかったのかをもう一度よく考えてみるべき >>81
個別に変数を作らなければ良い
const map = new Map([['variable1', ""], ['variable2', []], ['variable3', 12]]);
for (let [key, value] of map) console.log(key); Mapリテラルまだー?
今の初期化構文、わかりづらいしリストに型の違う値入れなきゃで気持ち悪い それならMap使う必要まったくなくない?
const list = [['variable1', ""], ['variable2', []], ['variable3', 12]];
for (const [key, value] of list) {
alert(key);
} variable3の値だけ欲しいときに毎回find走らせるの? あー、まぁ「variable3は必ずlistの3要素目である」っていう前提下ならlist[2][1]とかでいけるのか
自分がそういう書き方しないから抜けてたわ >>97
keyはユニークなんだから、配列と違って全体検索ではないでしょ? >>95
マジレスすると、Mapリテラルは非常に設計が面倒くさいと思うぞ
keyに何でも入れられるので、Syntaxが複雑化極まる
{{1:1,true:2,"s":3,{}:4,[]:5,()=>1:6,function f(){}:7,Symbol():8,new Object:9}} Mapいいんだけどさぁ、重厚長大過ぎるよ。
使いどころはあるけど普段使いしないよ。
単なる組み込みクラスでリテラルも無くsetget系APIも目にうるさい。
顧客が本当に求めていたもの: 列挙時順序保証のオーダードオブジェクトリテラル
const list = #{variable1, variable2, variable3};
で>>81の順序が保証されるみたいな。
これをfor inしたときはプロトタイプ辿らないみたいな挙動なら完璧。 たしかにget/setはダサい
[]でアクセスできてこそmap
TypedArrayが[]アクセスできるのは何でだっけ >>106
後方互換性を考慮してあの設計なのだろう >>107
TypedArrayは通常の配列と同じでString,Symbol型しかプロパティに持てないから
原理的には、プロパティアクセサを拡張すれば、new Mapでも[]の参照が可能 テンプレートリテラル`〜`に対するタグ付きテンプレートリテラルhoge`〜`みたいに配列リテラル[〜]、オブジェクトリテラル{〜}に対してもfuga[〜]、piyo{〜}みたいにユーザー定義の道を開いてくれると嬉しい。
配列リテラルについては無理か…
fugaに対するキーワードアクセスと区別つかないもんな。 >>112
滅茶苦茶読みにくいな
template(`${0} ${'foo'}!`)がtemplate`${0} ${'foo'}!`と書けるだけだが、何が便利なんだ? >>113
styledComponentのAPIがこれ使ってた気がするな…
まあリフレクションAPIとかと同じでフレームワークやライブラリを作る人が使う機能で一般ユーザーは提供されるAPIにしたがってhoge`〜`するだけだよ。 >>114
なるほど、タグ付きテンプレートリテラルに最適化されたAPIを作れるのが利点か >>113
そんなもんテンプレートエンジン使っていればわかるやん?
例えばCakePHPだとh関数でHTMLエスケープするやろ?
e関数だと、そのままechoやろ? tag(``)がtag``って書けるのがナウいんだよ!うるせーな!! >>118
違います。
tag(`a${1}b`)だと関数tagは1つの文字列a1bしか受け取れません。
tag`a${1}b`だと関数tagは配列(厳密にはrawも含むが)['a', 'b']と1がそのまま受け取れます。 眺めてたらってそういう話もなくはないんだなって。。。
もういい加減にしてくれ
この手の話は何度もES6から出てただろうが
そして何度も挙がるものって2種類あって
毎回進歩するものとそうでないもの
これは後者だろうが
そのへんなんにも追っかけてなくてニュアンス理解してないくせに
一瞬調べて無責任に引っ張ってくるってどうよお前
お前どうよ?それ 無責任って何を当たり前なことを…
なんで俺が責任とるんだよバーカw >>77
let variable1 = "";
let variable2 = [];
let variable3 = 12;
let list = [];
list.push({variable1});
list.push({variable2});
list.push({variable3});
for (let obj of list) {
alert(Object.keys(obj)[0]);
} 名前はスコープで管理されているのでwithを使うしかない
それでも原理的に確実ではないのでwith-proxyを使うか リストに追加した後も変数名残そうと思ったらwith-proxyだけじゃ足りないだろ
value-proxyが導入されたら組み合わせて可能かもしれないが with-proxyて何?検索しても出てこない(´;ω;`)
なんでみんな知ってるんや… そのまんま
with(new Proxy(......)){}
のことでしょ
こうしたら変数アクセスをほぼほぼプロキシできる
例えば__scope__でスコープオブジェクトにアクセスできるようにしたり
$GetVariableName(a) // 'a'
みたいな事とかいろいろできる 他にも分数だったりbignum同士の四則演算もできたはず
$BEGIN_BIGNUM
a = '12345678901234567890'
b = '23456789012345678901'
c = a + b
$END_BIGNUM
c // '35802467913580246791'
って感じでできるようにプロダクトで使ったことある へぇ〜
参考ページない?英語でも可
いろいろサンプル見たい 原理的に変数アクセスがプロキシできたらできることなら何でもできるよ 変数名を後から変更すると不具合誘発するとか、怖くて使えない 変数名を変えても影響でないでしょ
メタ処理で決め打たなければいいだけなんだから 論よりコード。
with proxyでゴチャゴチャ言ってる人たちは上の奴らと違ってコードを出さずにイキってばかり。 すまんが俺はコードより論派なんでね
糞面倒な糞コードをわざわざ書こうとは思わん
特に楽しくアイディアを語り合ってるのをイキってるとか言うやつの言うことは聞きたくないね
素直なかわい子ちゃんのお願いだったら聞いてやる てかwithproxyとやらでも順序は保証できないじゃんw
順序保証しなくていいなら>>81でいいじゃんww
ダラダラproxy書く意味まるでナシwww
proxyproxy言ってる人は何か勘違いしているのでは?wwww
論は論でも机上の空論wwwww こいつ何いってんだ?
listに入れたものだとvalue-proxy使わないと難しいねって最初から話されてるだろ
勿論すべての箇所で値が欲しいときはSLOVE(x)、名前が欲しいときはNAME(x)を使う
つまり
for(let i = 0; i < SLOVE(list).length; i++)
{
alert(NAME(SLOVE(list)[i])); //variable1 variable2 variable3と順番に表示
}
みたいに書いてもいいっていうなら原理的に可能だが あと、ただ変数を列挙したいだけなら上で挙がったように
__scope__みたいなの1つだけ特別扱いして
__scope__.keys()みたいなのを定義すればいいだけだと思うよ
そのままだとすべて列挙することになるけど
まあどうして列挙したいのかわからんが、例えばデバッグのためなら
変数名のパターンで絞り込むとか、そのくらいのことで実際はOKかもしれんよ お願いします
x = {"hello" : "world"};
は
x.["hello"] と x.hello で値が取得できますが
y = {"my name" : "John"};
のようにキーに空白が入った場合
y["my name"] としか書くことはできないのでしょうか >>77
趣向を変えてタグ付きテンプレートでやってみたよ!
let list_keys = strs => [eval(strs[0]), strs[0].replace(/\[(.*)\]/, '$1').split(/ *, */)];
let variable1 = '';
let variable2 = [];
let variable3 = 12;
let [list, keys] = list_keys`[variable1, variable2, variable3]`;
for (let i = 0; i < list.length; i++) {
alert(keys[i]);
} $.ajaxのget使うときにurlのパラメータを指定しますが
{"url":'ht略://sample.com/api.php',
"type":"GET",
data:{"hoge":2,"fuga":3}
}
とした場合403が返ってきます。でも、
{"url":'ht略://sample.com/api.php?hoge=2&fuga=3',"type":"GET"}
みたいに"url"に書いてやると問題なくなります
考えられる原因はなんでしょうか >>151
記述を間違えている
開発ツールのnetworkタブで見てみると良いかも DOM操作ライブラリ回帰の流れでjQueryのajaxはもうslimビルドから削除されたよ。
AxiosかSuperAgentかRequest使いなよ。 $.ajax使わないで、$.get使えばいいのにっていつも思うんだが
なんでわざわざ冗長なのを使うんだ? >>154
ajax()ならgetでもpostでも容易に切り替える事ができるって理由で使っていたな
要は実装が決まってない状態
この状態を悪いって言わないでくれよ、この状態になってるから仕方ないんだ getは取得でpostは送信だろ?
なんでどちらかが決まらないなんてことがあるんだ?
今はデータ取得してるけど
もしかしたらデータ送信するかもしれない
とかか?なんでそんなのがあるんだ? 仮に会ったとしても、$.getを$.postに変えれば同じだろう postでも取得できるしgetでも送信できるけどね >>157
データを取得するけど指定したパラメタに応じた副作用があるAPIはどっちにしたらいいんだ? >157
getは取得→いやそもそもその取得するためのデータを送信してるだろ
postは送信→いやその後取得するだろ
検索結果、登録情報の更新、など、決めないと難しいと思う 1970年1月1日9時00分からの任意の経過秒数から
年月日と曜日を求めるにはどうすればいいんですか?
例えば 6300000000 secだったら西暦何年の何月何日何曜日かというようにです 9時間分のミリ秒数足してnew Date(経過時間)じゃダメ? Date
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
1970年01月01日 00:00:00 UTC (Unix エポック) からのミリ秒数を表す整数値です
(ただし、多くの UNIX タイムスタンプ関数は、秒単位でカウントすることを考慮してください)。
なお、閏秒を無視します
その、+9時間は、エポックを日本時間で表示しただけ。
内部的には、UTC で管理していて、表示する際、ローカルタイムに変換しているだけ >>162
> getは取得→いやそもそもその取得するためのデータを送信してるだろ
> postは送信→いやその後取得するだろ
それは屁理屈 // 1970年01月01日 00:00:00 UTC (Unix エポック)
var dt = new Date( 1970, 0, 1, 0, 0, 0 );
console.log ( dt );
// 1日後
dt.setSeconds( dt.getSeconds() + 86400 );
console.log ( dt );
日付を扱うなら、moment.js が便利らしい date-fns、DayJS、Luxonもあるでよ var timestamp = 6300000000
var date = new Date (timestamp * 1000)
console.log(date)
document.write(date) 下記で、本日の日付を表示できますが、
本日の一週間後 を表示させるには、どこを+7したら宜しいでしょうか
よろしくお願い致します。
<SCRIPT type="text/javascript">
<!--
function _HpbDays()
{
this[0] = "日"; this[1] = "月"; this[2] = "火"; this[3] = "水";
this[4] = "木"; this[5] = "金"; this[6] = "土";
}
var now = new Date();
var yr = now.getYear();
var mn = now.getMonth() + 1;
var dt = now.getDate();
var dy = now.getDay();
var fyr = (yr < 1900) ? 1900 + yr : yr;
var dys = new _HpbDays();
var dyj = dys[dy];
document.write(fyr + "年" + mn + "月" + dt + "日");
//-->
</SCRIPT> >>170
const nextWeek = new Date();
nextWeek.setDate(nextWeek.getDate() + 7); >>170
勝手に関数などを作るな!
全部やり直せ!
このページを参照
Date
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
var dt = new Date( ); // 今日
console.log ( dt );
dt.setDate( dt.getDate( ) + 7 ); // 1週間後
console.log ( dt );
日付を扱うなら、moment.js が便利らしい momentはオワコン。
date-fns、DayJS、Luxonを使え。 170です
165さん172さん、ありがとうございます。
しかしよく解りません。そのコードを、どこに挿入すればよいのでしょうか・・・ ∧__∧
(´∀` )
(⊃⌒*⌒⊂)
/__ノωヽ__) このサイトを参照!
Date
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
>>170
を全部削除して、これだけでよい
var dt = new Date( ); // 今日
console.log ( dt );
dt.setDate( dt.getDate( ) + 7 ); // 1週間後
console.log ( dt );
var str = `${ dt.getFullYear( ) }年${ dt.getMonth( ) + 1 }月${ dt.getDate( ) }日`;
console.log ( str ); キモイんでカッコの中にスペース入れるのやめてください 関数呼び出しの後にスペース入れるのもやめてください テンプレート文字列使ってるのにvar使うのやめてください ブラウザのコンソールで書いては消して試すのに便利だよvar ブラウザのコンソールでいちいちvarなんて書いてんの?
使い捨てるのになんでそんな面倒なことしてんの? オレ関数スコープがピッタリなところはvar使ってるわ。ブロックスコープ欲しいときは基本const、どうしてもミューテートしたい時やっとlet。letが一番使わない。 let, constのTDZの仕様が気に入らな過ぎて関数スコープ作ってvar使ってるわ。 効率的でもない、可読性や保守性が高いわけでもない、何のメリットもないこだわり なんか打つのめんどくてlet使うことが多い……
あとでconstに置換
あほか俺 もしbabelでes5に変換してるんだったら関数スコープできてるとこはvarのままのほうがいいんじゃないかな。
変換後のコード量が意味もなく増える。 >>178
☓ `${ dt.getFullYear( ) }年${ dt.getMonth( ) + 1 }月${ dt.getDate( ) }日`
○ dt.toLocaleDateString('ja',{year:'numeric',month:'long',day:'numeric'}) >>191
babelはconstもletもvarに変換されるんだが? >>193
本人ではないが、>191の2行を読むべし >>194
えとさぁ、変換後のコードは増えないって意味なのわからない? そもそもvarもletもよっぽど使わないでしょ
変数なんてなるべく変更しないものであるべきで、それならconst使うわけだし
変更しない変数にlet?
後から他人が読むこと考えろとしか >変数なんてなるべく変更しないものであるべき
そうなのか???
初めて聞いたぞ マジっすか
forループ回してインデックスとかプロパティ名とか取得するときどうやんの? まあ遅延Streamも末尾再帰最適化もない以上、foループがなくなることはないさ 逆だな。速度のためにforループを使わないと束縛されてることがいやだ
速度のことさえなければconstだけで十分
だからlodashを使う。内部ではforループを使っているだろうが
俺自身はconstだけで生きてられる
バグを少なくするコーディングができる プログラマの思考なんて縛ってなんぼや
縛るどころかゆるゆるガバガバのJSがカオスってることからもわかるじゃないか >>205
エ〜、forの代わりにmap使うのー、バカじゃないのー 普通の事だけど、何をもって馬鹿と言ってるのか
お前の考えを言えるかい? 私男だけど単なる関数スコープのことを特殊なスコープとか言っちゃう男の人はNG let,constはブロックスコープで関数スコープじゃないよ >>214
constu君の脳内スコープを想像して言っただけだから気にしないでくださいね >>216
どういうこと?スコープの話なんかしてないけど 「脳内スコープを想像して」ってかいてあるから
単なるこいつの勘違いかな 逆だよ
ケンカしている仕様をありがたく教授している 使い捨てコードは、VSCode のQuokka という拡張機能を使っている。
コードを書き換えると、即座に結果が表示されるので便利
ブラウザのコンソールは、使わない
>>192
format 関係の関数は、様々なブラウザでの互換性が不明
ライブラリでは、moment よりも、date-fns の方が良さそう >>221
良く尻も竹刀でオワコンライブラリを進めてタコとを半生しろ >>223
酔っ払っているのか?
>良く尻も竹刀でオワコンライブラリを進めてタコとを半生しろ
もう少し日本語で頼む 俺の経験上、軽いが売りの代替ライブラリは
結局本家を超えることはできないよ
ま、互換性があるならいつでも本家momentに
戻せるから使うのは構わないけどな div class ='tenpoList' onclick="list_click()">
<ul>
<li></li><li></li><li></li>
</ul>
</div>
function list_click() {
$('div.tenpoList ul li').click(function () {
var num = $(this).index() + 1;
alert(num);
});
}
liをクリック時、クリックしたliのインデックスを1回だけalert表示したいのですが、
これを実行すると、クリックするたびに、表示されるalert回数が増えてしまいます。
どうすればいいでしょうか? onclickで呼び出す必要ないんじゃない
クリックするたびにイベントが追加されてるんじゃないか
window.onload = list_click
で読み込み時に一回だけイベント設定したらいいんじゃない >>206
末尾再帰どころか末尾呼び出し最適化も
とうの昔に仕様に入ってるよ >>228
タグのonclick属性を使うのは時代遅れ
またwindow.onloadを使うのも時代遅れ
onclickを消して、JavaScriptのコードはこれだけでいい
$('div.tenpoList ul li').click(function () {
var num = $(this).index() + 1;
alert(num);
}); 時代遅れ
どうせ書き換えるのならObservableを使おう >>230
どの主要ブラウザにも実装されてないし、babelも標準ではサポートしてないんだよなあ でも仕様に入ってるってことは将来はforループ無くなりそうだね >>231
ReactでもonClick使ってるんだが時代遅れなのかね? reactとバニラのonclickを一緒にするなよ Reactはこうした方が良いんだというモットーで
onClickを使っているが、やっぱり悪手だったと思う
HTML(JSX)が汚く見づらくなってしまってる
せめて値に入れられるのは関数名だけでJavaScriptコードは
入れられないようにするべきだっったね
まあHTML書く人との分業作業を断念して
JavaScriptを書くプログラマが全部やりますよっていう
驚きの方針を前提にするなら、それでもいいかぐらい >>178
やはり駄目でした。。。
ちなみにこれ、HTML上にあるJAVAスクリプトなんですが、それが原因でしょうか? ほんとに全部削除して<script>とかも削除したなんてオチだったりして >>239
178はconsole.logで出力してるからコンテンツエリアではなく開発ツールのコンソールに表示されるんだよ? jsfiddle は、Edge では結果が表示されない
Chrome を使うべき! Edgeどんだけポンコツなんだよw
chromeと一緒のエンジン搭載したんじゃなかったのか >>244
もうしたとは言ってねえよ
今年中位の勢いでしょうね Edge の画面の拡大率を下げたら、見えた!
jsfiddle は、縦横のスクロールバーが出ない! プログラム板のVSCode のスレから、移動してきました
// 1970年01月01日 00:00:00 UTC (Unix エポック)
var dt = new Date( 1970, 0, 1, 0, 0, 0 );
console.log ( dt );
// 1日後
dt.setSeconds( dt.getSeconds() + 86400 );
console.log ( dt );
これを、VSCode の拡張機能、Quokka.js で実行すると正常だけど、node.js で実行すると、9時間ズレる。
nodeのタイムゾーンがおかしい。どう設定すればよいの?
1969-12-31T15:00:00.000Z
1970-01-01T15:00:00.000Z date-utilsっていうライブラリ要るんじゃなかったっけ // 1970年01月01日 00:00:00 UTC (Unix エポック)
var dt3 = new Date( 1970, 0, 1, 0, 0, 0 );
console.log ( dt3 );
console.log ( dt3.toLocaleString( 'en-US', { timeZone: 'Asia/Tokyo', hour12: false } ) );
出力
1969-12-31T15:00:00.000Z
1/1/1970, 00:00:00
ひとまず、内部ではUTC にして、
表示する際に、互換性は低いけど、toLocaleString で表示できた。
ただ、1970-01-01 のように表示できない
Windows10 のPC だけど、設定ファイルで出来ないのかな?
Linux では環境変数で設定しているけど
date-fns, date-utils も、調べてみる >>252
何でやってるの?
xamppだとphp.iniを編集する必要があるよ 単に、Windows10 のPC に、VSCode, Node.js を入れて、サンプルを実行しているだけ。
プロジェクトも作っていない。
未設定ワークスペースで、.js ファイルを実行しているだけ
VSCode の拡張機能、Quokka.js で実行すると正常だけど、
VSCode の拡張機能、Code Runner で右クリックメニューから実行するか、
端末から、node コマンドで実行すると、9時間ズレるのが不思議 9時間ズレるのが不思議なの?w
日本標準時(JST)が世界標準時(UTC)マイナス9時間だからだよwww ブラウザでも実行すると正常だけど、
Node.js だけは、console.log で表示する際に、UTC のままになる
Node.js の実行環境だけは、特殊 nodeの場合デプロイ先のリージョンがアメリカかヨーロッパかでズレたらそっちのほうが困るがな。 ただ、VSCode の拡張機能、Quokka.js で実行すると、日本時間になる
console.log ( dt3.toLocaleString( 'en-US', { timeZone: 'Asia/Tokyo', hour12: false } ) );
とにかく、console.log の度に、こう書くのが面倒くさい。
設定ファイルか何かで、どうにか出来ないかな? This is arguably a V8 bug. It ignores locale settings. In fact, all date and number formatting logic is hard-coded.
The reason it works in Chrome and Chromium is that those projects use v8-i18n on top of V8. I don't think that's a direction we want to take. It depends on libicu and that's a massive library.
We would have to bundle it and that would increase our already large source tree by another 85 MB and ~500,000 LoC.
https://github.com/nodejs/node-v0.x-archive/issues/4689 quokkaとやらはelectron組み込みのchromiumのV8を利用してるから問題ないんだろうな。 >>260
以下は、自動翻訳
これは間違いなくV8のバグです。 ロケール設定は無視されます。
実際、日付と数値のフォーマットロジックは、すべてハードコーディングされています
ChromeとChromiumで動作するのは、これらのプロジェクトがV8の上にv8-i18nを使用しているからです。
それが私たちが望む方向ではないと思います。 それはlibicuに依存しており、それは大規模なライブラリです。
これをバンドルする必要があります。
これにより、すでに大きなソースツリーがさらに85 MB、最大500,000 LoC増加することになります バグではない
そもそもIOからも分離されたJSという言語のエンジンで
文字列をパースして評価する+標準出力に出すくらいのことしかしなくていいのに
ここだけ環境もといOSからロケーションを取得して(1個とは限らなかったりするし)適切に扱うとか異質
なので仕様にも実装していない場合や実装内で利用できない場合はオフセットを0として良いとしており
つまり実質的にこの仕様の実装はオプションだ サポートしていなくてもJSエンジンとして正しい
だからV8コアと国際対応は分離されているのにそれをNodeが取り入れたがらないだけ パッチ公開してる人いるから自分でnodeビルドすればいけるぞ デベロッパーツールでオリジン関係なくjsを実行できてしまうけど、そうするとサイトにいくらでも攻撃できちゃうのはどう対処すればいいの?
認証トークンもバレバレ、api実行もできるんだけど サーバーの設定でわざわざ全てのオリジンにcors許可してるんだろマヌケw そういやjsのapi認証ってどうやって他人に使われるのを防げばいいの?
ドメイン制限はしてるけど、ローカルでexample.comwを見れるようにしたらそのまま使えてしまった 認証関係は、twitter など、大手の認証を使う
各社で、パスワードなどを管理したら、漏えいするから危険! 認証トークンは、1 time password とかだろ
1回限りのものだから、わかっても次には使えない >>270
分からないのに書き込むな。な?
住所晒せば大量のチラシ送ってやるぞ? >>262
>日付と数値のフォーマットロジックは、すべてハードコーディングされています
node では、node専用の日付時刻ライブラリを使った方が、良さそう
ブラウザでは、それと異なるコーディングをするしかないか?
そもそも、ブラウザとnodeで、共に動作する、ソースコードの需要がないか new Date('2018/01/01 10:12:13 +0900')
みたいに明示したらいいだけじゃないの? >>274
その手のフォーマットの互換性が、ハッキリしない。
使えるかどうか、よくわからない
素のJS ではなく、フォーマットのライブラリを使った方がよいかも classにsetterが設定されてるかどうかを、文字列から判定する方法が知りたいです
イメージ的には
class Hoge {
constructor() {
this._value ;
}
get value () { return this._value; }
set value (x) { this._value = x * 2; }
}
のようなケースで、
const hoge = new Hoge();
hoge.hasSetter('value') // true
となるようなhasSetterに相当するものです
hoge.hasOwnProperty('value') や
Object.getOwnPropertyDescriptor(hoge, 'value')
では引っかからなかったので、何か方法があれば教えていただきたいです Object.getOwnPropertyDescriptorはプロトタイプチェーンを辿らない
(だからOwnが名前に入ってる)
アクセサプロパティがプロトタイプチェーンにある場合、自前でプロトタイプチェーンを辿りながら判定する必要がある クラスにセッターっていうユースケースなら1つ前のhoge__proto__だけを見れば
実用上実際は殆ど十分なんじゃね 細かい質問なんですが、ソースリストの整形の問題でエディタとかの話になるんですが
オブジェクトの記述でプロパティの名前と値の文頭をそれぞれ字下げで揃えるってことはできないでしょうか
自分はATOMのbeautifyを使ってるんですが
プロパティ名の文頭は揃っても、値の文頭が揃わないと読みづらいなと感じてます プログラム板のVSCode スレッドとか
VSCode はデフォルトで、beautify だったかな?
拡張機能もあるけど <select>
<option value="1">aaa
<option value="2">bbb
<option value="3">ccc
</select>
のvalueの値と表示部分の一覧をjavascriptで取得することはできますか?
できるならどうやるんですか? >>286
jqueryってやつを覚えないとだめなのか >>287
jQueryあった方が楽+早い+書きやすい+読みやすい、から使っているだけだよ
jsで書くとこんな感じになると思うけど、あまり自信は無い
http://jsfiddle.net/qzum8xkt/1/ ここから怒涛のjQuery信仰者のご高説が始まるぞ >>281
atom-beautifyはjs-beautifyが動いてるけど
残念ながらその設定は無い
ESLintにもPrettierにも多分ない
IntelliJ IDEAとかならできたはず >>287
べつに覚えなくてもいいけど。
例えばselectタグにoreoreというidが降ってあったとすると、
[...document.querySelectorAll `select#oreore > option`]
.map(opt => [opt.value, opt.textContent])
で
[["1", "aaa/n"], ["2", "bbb/n"], ["3", "ccc/n"]]
が得られる。
jQueryは内部でSizzleというjavascript製セレクタエンジン使ってるんだが、モダンブラウザの場合そっちじゃなくてこのdocument.querySelectorAllを呼び出している。
なのでその場合jQueryはムダな数万行のコードで速度・帯域・メモリ・CPUをムダに消費するゴミ。 > なのでその場合jQueryはムダな数万行のコードで速度・帯域・メモリ・CPUをムダに消費するゴミ。
minifyされてるのを使えば、たったの1行(もしかしたら数行)だよ
1行なんだから速度・帯域・メモリ・CPUなんか気にしなくていい それにminify前のsizzleのコードはわずか2282行。
https://github.com/jquery/sizzle/blob/master/dist/sizzle.js
数万行とかいう嘘どこから出てきたんだ?
調べもしないでそういうことやるから信用されないんやで 実際DOM操作のためだけにjQuery読み込むのってコスパわるいん? jquery-3.3.1.js
非圧縮開発版で10364行だった
266KB
min.jsは2行で85KB The Cost Of JavaScript In 2018
https://medium.com/@addyosmani/the-cost-of-javascript-in-2018-7d8950fbb5d4
javascriptのサイズと画像のサイズは同じ基準では比べられません。
https://i.imgur.com/pehx3NY.png
javascriptコードではダウンロードの時間のほかに、ブラウザによるパース(gzip、brotli等圧縮されたものであれば展開した後)、コンパイル、実行の時間を考慮する必要があります。
https://i.imgur.com/cZmFlKv.png
そういうわけで、CSS、Javascript、IMAGE、FONTの中でも、Javascriptが最もコストのかかる部分になっているのです。
https://i.imgur.com/rtm23gT.png javascript同士の比較の話してんのにcssや画像との比較を持ち出す池沼 <div id="rubykichigai">〜〜</div>
の中のHTMLを取り出す処理を書いてみよう!
jQuery:
html増分:
書き込み制限に引っ掛かるので省略するがintegrity付きの公式scriptタグで155bytes。
javascript増分:
console.log($('#rubykichigai').html())
上述html155bytes + javascript38bytesに加え、jQuery分約85,000bytesです。
全然短くありませんねw
ピュアjavascript:
html増分:
なし。
javascript増分:
console.log(document.querySelector`#rubykichigai`.innerHTML)
計60bytes >>302
画像だって圧縮を展開して表示されるんだから
対して変わらんと思うけど? >>304
jQueryのコードは計算に入れなくていいでしょ?
読まないんだしさ。
console.log($('#rubykichigai').html())
console.log(document.querySelector`#rubykichigai`.innerHTML)
圧倒的にjQueryの方が短い。 console.log(document.querySelector`#rubykichigai`.innerHTML)
この変な書き方を使えば、↓こうなるのか
console.log($`#rubykichigai`.html()) どこかのサイトを使って素jsとjQueryで
・読み込み速度
・実行速度
・使用メモリ
の比較をしてくれ お前らどんだけヒマなんだよw
CDN、1.12なら間違いなくキャッシュされているからそもそも比較なんて出来ないぞ 少なくともそこがボトルネックになることってそんなにない気がする >>309
比較対象にコードの量や複雑さが含まれてない
そんな比較に意味があるのか?
どんな言語のどんなライブラリだって
コードをインライン展開するよりも
関数にするほうが遅くなるが、
それ以上のメリットがあるから使うだろ >>310
キャッシュされてるならロード時間は考慮しなくていい
>>312
jQueryを使って何かDOM操作をしたとしても人間が重いと感じることはない
・メモリ消費なんてたかがほんのちょっと
ゲームやるわけじゃないんだからjQueryごとき微々たるもの
なんでjQuery不要論者は必死に危機感煽ってるんだよ? キャッシュされててもパース、コンパイル、実行時間はかかります。
必死に宣伝してるのはjQuery厨。
さもノーコストでいいことずくめみたいなウソつくのはやめろ。
どうやったってjQuery約85,000bytes分パース、コンパイル、実行時間が余計にかかる。
キャッシュのヒット率だって怪しいものだ。
マイナーバージョンひとつ違うだけで別物。
公式cdn、jsdeliver、google、cloudflare等々利用するcdnが違っても別物。
キャッシュはヒットしない。
バージョン違いオリジン違いの大量の糞ファイルで勝手にキャッシュ埋めやがって!
ユーザーのブラウザはお前らの物置じゃねーんだよ! いや、今のV8はもうパースデータのキャッシュに対応していて有効になってる
現在はまだChrome Stableでデフォルト有効になっていないがコンパイルデータのキャッシュにも対応している
そしてそれらの問題はLayered APIで解決されるめどが付いている
今更議論をすること自体が無駄 >>314
だれもノーコストだっていってないし、
むしろコストは絶対あるって言ってるんだが?
なんでコストがあれば駄目みたいに思ってるんだ? >>314
ダイヤルアップ接続で20世紀のOSとブラウザでも使ってんのかw やっぱ今までは無理だったんだね。
それを隠してjQueryを宣伝してきたわけだ。
サイテー マジでノーコストだと思ってたのか?
僅かなコストで大きなメリットがあるから使うんだよ ん?じゃあjQueryのメリットって何よ?
jQueryを使わなくても同じことができるだろ=メリットはない マジで同じことができればメリットはないって思ってるのか? >>321
jQueryに費やしてきた俺の学習コストが報われる。
せっかく自由自在に使えるようになったところなのに、若いやつらに見向きもされず老害扱いされるなんて許されるべきではない。 その理論が成立するなら機械語書くのが最適解になってしまう >>323
実際に見向きもされないのはjQuery使えないやつなんだけどなwww jQueryは誰でも知ってて誰もが使ってるから
既存のコードが読めるというメリットが有る つまり誰もが知ってて誰もが使ってる状態をキープしないとメリットが消滅してしまう。
jQueryおじさんはそれを恐れている。
だからこそ必死なのだ。 まぁ教えてもらいやすいのはメリットかもしれない
でもベタjsをもっと教えてくれ どうせまた言われるだろうから、先に書いておく。
誰もが使ってるということを示す客観的なデータ
数値は1年毎の1/1時点のシェア+今日のシェア
Market share yearly trends for JavaScript libraries for websites
https://w3techs.com/technologies/history_overview/javascript_library/ms/y
74.0% 84.1% 90.2% 92.9% 94.5% 95.8% 96.4% 96.2% 97.3% 97.3%
Historical yearly trends in the usage of JavaScript libraries for websites
https://w3techs.com/technologies/history_overview/javascript_library/all/y
28.3% 42.8% 54.5% 57.4% 61.5% 68.3% 71.9% 73.1% 73.6% 73.7% >>331
誰もが知ってて誰もが使ってるは単なる事実で
メリットじゃないぞ?
メリットがあるから、その結果として誰もが知ってて誰もが使ってる状態になるんだ >>331
なんでたかだかライブラリのひとつをまるで標準技術かのように騙して布教してるのか不思議だったがこういうことだったのね。 >>335
あんたがjQueryが標準技術かのように思ってしまった。
それが現実だよ。 はい締切
jQueryはメリットがない、コストだけがあうr
はい次 「シェアが高いことがメリット」
これはネットワーク効果とかネットワーク外部性とか言われる立派な競争優位なのだ!
騙してでもシェアをキープする、これがjQueryがこの先生きのこるための道である! > 「シェアが高いことがメリット」
それも単なる結論
メリットがあってその結果シェアが高くなった 「シェアが高いことがメリット」だと思ってる人は、逆に
「シェアが低いことがデメリット」だと思ってるんだろうか?
Reactとか0.2%ってデメリットが有るよな? はい時間オーバー、締切
jQueryはメリットがない、コストだけがある
はい次 なぜ必死にメリットが無いことにして話をすぐに終わらせようとするのか?
メリットが書き込まれたら都合が悪いことでもあるのだろうか? どんな綺麗事、御題目を並べたところで所詮$は巨大なjsコード、document. querySelectorはネイティブコード どんな綺麗事、御題目を並べたところで所詮$は巨大なjsコード、document. querySelectorはネイティブコード
jQueryを使わずネイティブコードで書けば、巨大な自作jsコードが出来上がるだけ そうだよな。jQueryを使わずに書いたら
自分が書いたJavaScriptコード数千行が
数万行になってしまう
本末転倒だ その自作jsコード99%のケースでは85kb以下に収まるだろうww 収まるわけ無いじゃん。どんだけ小さい規模の話をしてるんだ? jQueryは良いライブラリなのに
ノータイム説明なしでぶっ込んでくる野郎が居るのが害悪 1行50文字として、85kbだとたった2000行も書けば
あっというまに85kbなんて超えてしまう。 メリット〜言いたい〜はやく言いたい〜
はやく言いたい〜jQueryのメリット〜 >>356
焦るなw 次DOMを使う問題が出てきたら
ノータイム説明なしでjQuery使ったコードをぶっ込んでやるからさ jQueryはminifyしてるくせに自作コードはminifyしないんですくぁ↑?ww >>359
jQueryはminify版が配布されてるし、なんならgzip圧縮版も配布されてる
それに比べて自作コードはそんな事されてないだろ >>359
やっぱり騙してでも布教してシェアキープしたいんだねぇ… エディタで簡単にミニファイできるが…
何jQuery厨ってメモ帳で作ってるの?w 実際それでシェアキープされてるからな
それが困るんだろうさ >>362
エディタはそれぞれが好きなものを使いたいんで、
特定のエディタを強制されるのは嫌だな 心の声(なんでjQueryはメリット無いはずなのに、こんなに使われてるんだよ!悔しい!) >>365
そ、そうか。VSCodeでもatomでもSublimeでもできるが…
できないってことは本当にメモ帳なんだろうな。
メモ帳とjQueryとでお幸せにな。 >>367
じゃあvimだけを使ってどうやるか言ってみ
できるできないの可能性の話はしてない
それぞれでエディタでやった結果が
異なるのが問題なんだよ >>370
じゃあコマンドラインでterserかuglifyだな。
vim使ってんなら朝飯前だろ。 例えばこれ
$(document).on('click', 'a', function() {
$(this).toggleClass('on');
});
(minifyしたら1行にされて意味がないんで)
単語数で考えると、$, document, on, click, a, function, $, this, toggleClass, on
たったの10単語で実現できるコードをjQueryなしで書くと大幅に増えてしまう >>372はjQueryで書くとたったこれだけのことにプラス85,000文字かかりますという例です >>373
違うよ(笑)
やっぱりどんだけ小さいの話してるんだ?って
指摘は正しかったみたいだねw
352 名前:Name_Not_Found[sage] 投稿日:2019/01/27(日) 19:52:08.95 ID:???
その自作jsコード99%のケースでは85kb以下に収まるだろうww
353 自分:Name_Not_Found[sage] 投稿日:2019/01/27(日) 19:53:51.91 ID:???
収まるわけ無いじゃん。どんだけ小さい規模の話をしてるんだ? >>372 ←これ小さい話だよね?
自分で小さい例出しといてなに言ってんだコイツ >>375
そういうコードがたくさん集まって
コードの量が増えるんだろ?
お前、"例" ってどういうものか知ってるか? jQueryは膨大な粗大ゴミ
産業廃棄物
世界のネットワークに不要なトラフィックとしてゴミjQueryが世界を駆け巡る
jQuery房は地球表面に85000回頭ぶつけながら謝罪せよ 大規模な話をすると、例えばgithubがjQuery依存から脱却しました。
jQueryでアドホックにかかれた部分は大変取るのに苦労したそうです。
もう二度と使わないとのこと。
https://githubengineering.com/removing-jquery-from-github-frontend/ 不要なトラフィックって言っても画像1つ分程度でしか無いけどな
それにjQueryを使わずに書いた自作コードが大量に流れるほうがゴミだろう >>378
それ見て思ったんだけど、結論が書いてないんだよね
普通、それだけのことをしたら○○という効果がありましたって
書くと思うんだけど、jQuery廃止しても何も効果がなかったんだと思う netflixトップのランディングページからreactが取り除かれ、なぜかjQuery厨が大喜びしてましたがjQueryはどこにも使われてません。
一方トップ以下にはreactが未だ使われています。
jQueryはどこにも使われてません。
これからも使う予定はないとのことです。 楽にサイト構築するためにjQueryがクソなのを受け入れられるのが
金持ちと貧民の境目
いいものに拘ってても一生貧民よ 「netflixトップのランディングページからreactが取り除かれた
ということはjQueryを使ったんだ!」と思ったのはお前じゃね? >>383
だよな。
あれReactが遅いってことがわかったって喜んだだけなんだが >>378
1.12と思ったら1.2時代の話か
当時は使ってなかったけど、1.10ぐらいまでjQueryは仕様変わりまくりで使いづらかった
そりゃ苦労するわ >>384
ランディングページにReact使う意味ねえからやめたんだろ
そもそもFacebookみたいな複雑なUIとかに発揮するのがReactだからな >>388
言っただろ、騙してでもシェアを守りたいからだ。
シェアが高いことがメリットだからな。 前提としてランディングページっていうのは、トップページだけのことではないことに注意ね
検索結果から飛んで最初に表示されるページでSEOが重要になるページのこと
(ランディングページの反対はログインしないと見れないページや設定画面など)
https://web60.co.jp/landing-page.html
> ランディングページ(landing page)とは、
> 直訳すれば着地ページで、ユーザーが最初に訪問するWebページになります。
>
> この意味でいえば、どんなサイトにも着地ページは複数あり、
> それはユーザー毎に異なることになります。これが広義のランディングページです。
> 日本では一般に「着地ページ」と言い、「ランディングページ」という場合は、次の狭義のランディングページを指します。
一部の企業でReact Native離れが始まる
https://tech.nikkeibp.co.jp/it/atcl/idg/14/481709/082000458/ >>388
それ、gzip圧縮された状態の話だからjQueryだと29KBだよ
https://mathiasbynens.be/demo/jquery-size
その30KBもキャッシュされるので二回目以降はわずかな通信ですむ >>388
> >>374によるとNetflixの件は「小さい規模の話」らしい。
ランディングページに限った話だろ?小さい規模に決まってると思うが?
まさかNetflixのサイトがでかいから、
どのページも大規模なJavaScriptになってるはずだって言いたいの? >>390
reactnativedomとかあるからややこしいが基本reactnativeはios androidのネイティブアプリの話でwebとは関係ないぞ。 ここWeb板だからReact Nativeじゃねえんだけど?
ああ、違いわかってねえバカなのかもな>>390は React Native使わないでReact使っても
iOSやAndroidのネイティブアプリ作れないんだし
何のメリットもないやん じゃあ苦労して17kbに押さえたnetflixチームに言ってこいよ。
30kbのjQuery入れてくださいってw
キャッシュされるから二回目以降は大丈夫ですからってさぁwww それよりReact Nativeの件を説明してくれますかあ?
なんでReact Nativeの話持ち出したんですかあ? >>397
なんでそんな事する必要があるの?
jQueryを使うかどうかは合理的に選べばいいだけだろ
ネイティブアプリを作るのにjQueryを使えとか言わないし そういうことだな
ウェブの大部分を占めるウェブサイトには
jQueryがもっともバランスが良いってことだよ
CSSベースで設計したものに上手く適合するので
ウェブサイト標準技術で作られたサイトと相性いい jQuery房さぁーん、React Nativeの話題をいきなり出してきたのはなんでですかああああ? 合理的に選びたいのに
選ぶ前に当然の様に入れてくるから嫌い 脈絡なくネイティブアプリの話を持ち出し話をはぐらかそうとするjQuery厨 マヌケ無能jQuery房さぁああああん
React Nativeーーーー?? jQuery厨はjQuery以外の技術はからっきしなのでReactとReactNativeを混同してしまうのもしょうがない。
なんたって名前が似てるからねw
両方Reactって付いてるしww
jQuery厨が勘違いするのもしょうがねぇwwwww React Nativeーーーー!!
React Nativeーーーー!! いきなりReact Nativeの記事ワロタwww
ホントにjQueryのことしか知らねんだなw
元号変わることも知らなそうw 話をReactにすり替えようとしてるのバレバレだってw
ここはjQueryのスレですよ? >>412
ちげーよヴァーカ
jQuery房はjQueryスレ行け >>3
>>23
こんなことをしてるから嫌われるんだ。
rubyキチガイと同じ。 突然ネイティブアプリの話をしだしたjQuery厨、今度は責任転嫁し始めるww いい加減この質問に答えてくれませんかね?
例えばこれ
$(document).on('click', 'a', function() {
$(this).toggleClass('on');
});
(minifyしたら1行にされて意味がないんで)
単語数で考えると、$, document, on, click, a, function, $, this, toggleClass, on
たったの10単語で実現できるコードをjQueryなしで書くと大幅に増えてしまう >>417はjQueryで書くとたったこれだけのことにプラス85,000文字かかりますという例です >>417
たったこれだけのことをするためにjQueryなんてウンコを入れてしまったため、あなたのサイトはnetflixより「大規模」wになってしまいましたw どんなに貶されてもスマホのネイティブアプリのReact Nativeの採用率が下がればjQuery厨の溜飲は下がるのである。
なぜかはまったく分からないが… だってたった10単語で実現できるってのがウソ、詐欺だからな。
「1単語で実現できるよ?hoge()」
こう言ってるのと一緒。 >>420
どうしてネイティブアプリの話をしだしたのですか?
React Nativeがweb用だと勘違いしてたとの噂もありますが本当ですか?
答えてください! スッ…(jQuery厨、得意気にReact nativeの記事を出す)
面白すぎるwwwww >>346
色んな改善によりコストは昔に比べると0に近づいてきてるが
それでもやはり標準に便利な高レベルAPIが無いというのは不便で無駄なことなので
Layerd APIが提案されている
2020年代からはできるだけライブラリを使わず
標準APIと標準が用意したポリフィルAPIを使うことで問題を解決する 新しい規格が策定されるのはいいんだけど、
古いブラウザが対応してないって問題どうにかしちくり〜 >>427
それはそもそも対応する必要がないんだよ
ずっと更新されないブラウザを使い続けてる環境で
ポリフィルやライブラリまで使って高レベルなことをすべきかどうか疑問だし
現時点・そして未来でも標準化して効率化しておく必要があるから標準化される機能なのに
古い環境で動かそうってのはそもそも無理があることだと思うよ
老体に鞭打つ的な行為で、実際結構お節介で重くて迷惑になるだけだと思う
だから最低でもimportに対応してる環境で足切るというのが現実的だと思う
古い環境はJSを無効にしてるのと同等に動作させるか、nomodule属性を使ってちょっとだけ機能を保管するか
その程度が落とし所だと思う >>430
仮に○○まで対応すると言ったって
全く同じ表示で同じ様に動作させろということにはならないでしょ
わからず屋が居るのならそいつに分かってもらうのも仕事のうちでしょ
奴隷じゃないんだから 昔はブラウザの標準APIがアレだったから必要だったけど、今は標準APIが充実したからjQuery自体は必要無くなった感がある
でもjQueryに依存する物が多過ぎるから結局読み込む→どうせ読み込むなら使うか、みたいな感じになりがち 今まで標準APIでできるようになってきたのってjQueryが担当してた部分だけど
連動リストだとかjQueryプラグインが担当してたような部分も標準化が進んでるから大丈夫 DOMで言えば、各要素に特化した標準の便利メソッドがないのはなんで?
tableのth追加とか
selectのoption追加・操作とか
あとはマウスイベントの位置取得 >>436
各要素に特化したメソッドもだけど、
要素リストにたいしてのメソッドもほしい
querySelectorAllでリストを取得しても
ループで一つづつしか処理できないなら片手落ち jQuery のソースコードを見ればわかるけど、
大部分が、様々なデバイス・OS に対する、互換性を担保するもの
数百種類に及ぶ、デバイスへの対処!
これを単独企業で作ることは無理だから、
MS など色々な企業が、jQuery財団に資金提供して作ってもらっている
jQueryを使わないと、動かないデバイスがある 企業は絶対に、jQuery を使う
もし使わないと、様々なデバイスで動かないという苦情がくるので、
その対処に費用がかかる
基本的に会社は、そのスマホ・デバイスを持っていないから、
テストも出来ないし、対処できない Web Speech APIについて質問なんですが
Firefoxで実験してるのですが日本語はMicrosoft Harukaしかありません
クライアント側で初音ミク的な音声を追加することってできますか? >>422
> 「1単語で実現できるよ?hoge()」
> こう言ってるのと一緒。
テストスべきコードの量って言えばいい?
jQueryの中身はjQueryプロジェクトでしっかりとテストされてる。
お前の言ったそのhogeの中身はテストされとらんだろ?
つまり自分で書かないといけないコードってことだよ
自分で書くコードをできる限り減らして
テスト済みの既存のライブラリに置き換えるのが重要なんだよ >>440
使わないと苦情が来るのではなく
使わなくともあからさまな不具合に見えないように
する技術さえもないから来るというだけでしょ
そしてjQuery使い続けるからそうしたスキルさえもない人が開発し続ける 画像の内容をjsで制御できる画像フォーマットってありますか?
例えば、元々複数の画像データが埋め込まれているgifみたいな画像データがあって
その表示タイミングや順序をスクリプトで指定できる、みたいな スライドショーレベルならcssのtranceなんとかで出来たと思うのですが
例えば、人の全身の画像、顔のパーツだけの画像これらが一枚のデータになっていた場合
それを一枚の画像上で顔を入れ替えたり、と扱えるような感じです
canvasでも良いのですが、結果しか保存できないので 全部の画像を並べて一枚にする
そしてcssのpositionとsizeをjsでいじる
ペラペラ漫画みたいな感じ
ただし、画像と画像の切れ目を考慮しないと補完かかってボケるから大きめに作って表示は小さめにする >>444
フォーマットは特に無い
jsは不要でcssだけで行けるよ
https://www.pxt.jp/ja/diary/article/116/
ファミコン時代からある方法だけど、こういう手法に名前ってあるの? スライダーみたいに入れ替えるってことならjs必須だった、スマン >>444
SVGならXMLとして解析できるから唯一そういうことを現実的にできる 「結果しか保存できない」がより難解さを増してる気がする
ひょっとしてアニメーションGIFやapngを作りたい? canvasだと静止画でしか保存できないということなら
SVGにパーツ配置すれば動かせるし再利用可能な形で保存もできる 「〇〇したい、△△すればできそうな気がする」って考えていることの△△しか言ってない気がするから〇〇の部分の補足が欲しい
gifの制御と画像のタイリングは全然違うはず あぁそうだね
・〇〇したい
だけ言ってもらえればいいんだけど >>454,455
○○したい
は具体的にはありませんが>>449が(もしかしたら)近いような気がしますが調べ中です。
例えば、画像にコールバック関数が組み込まれていて
js側でコールするとその画像の内容自体(or画像以外)が動作をする、みたいな感じです
簡略ですが例えば、
左から赤緑青と塗られている横3px×縦1pxのpng画像があり
img要素で読み込まれており
さらに赤緑青の位置が1秒置きにランダムで移動。
スクリプト側で、hoge(0,0)すると
画像の(0,0)の位置が赤色だったらalertする、青色だったら色を入れ替えする
みたいなことを今はやっています
しかしこれだと当たり前ですが、画像を配布しただけでは何も起こらないのです
で、「そういえば画像にスクリプト付加して云々できる」ような記事を見たことがあるとふと思い出し
そういう画像フォーマットってあるのかな、と思ったのです
記憶違いかもしれませんが >>447
スプライト、画像スプライト、イメージスプライト。
CSSでやるやつはCSSスプライトとかCSSイメージスプライトとか言われる。 画像にスクリプトってFlashくらいしか思いつかん >>456
Web上でJSから画像をどうこうしたり、どうこうできるように画像を作ることはできるけど
もし、プログラマブルな画像というものを考えているのならば、それはFlash画像でしかできない >>458,459
なるほど言われてみれば、やろうとしていることはまさに
Flashって感じだと思いました
ただ、今からflashを学習しようと思うとあれですが
ありがとうございました MHTMLが画像ビューアで見れる形式としてもっと広まるか
CanvasAPIを使ったFlashライクな画像形式ができないものかね スクリプトの動く画像って
セキュリティ的に相当煙たがられそう しかし画像動かすだけでこんなクソ面倒くさいとかhtmlウンコじゃん htmlたんがどれだけ元々の使われ方から乖離した要望に応えるために頑張ってると…… >>462
だからsvg埋め込みのjsは、
インライン、<embed>タグで読み込み<object>タグで読み込み、<iframe>タグで読み込み
の時は動くが、
<img>タグで読み込み、cssのbackground-imageで読み込み
の時は動かない仕様になってる。 >>463
先にやりたい事を考えないからそんな変な手法を追求することになるんだわ SVG, Canvas、
ポリフィルのweb-animations-js とか
Haxe, Cocos2d-x, Godot などのゲームエンジンもそう >>468
いつかそういう時代になるといいな
WebフロントエンドといえばRustみたいな rust始めるのにwasmで勉強するのってどう思う? 所詮この世界は流行るかどうかだからなぁ
rustは正直厳しいと思うぞ >>471
wasmバイナリとまでは言わんがせめてwastからやれよ。あんまり甘えんなよ。 自分もrustやろうとしたけど
作りたいものが特になくてやめたわw
新しい言語やるときは明確な目標がないとなかなかね
そういった点でJavaScriptやPythonやC#が流行るんだと思う fileタグでファイルを開くダイアログが表示されますが、表示されるファイルを正規表現でフィルタかけるにはどうしたらいいでしょうか? 質問です
document.evaluateのパラメータ resultType で指定する結果型が
UNORDERED_NODE_SNAPSHOT_TYPEの場合と ORDERED_NODE_SNAPSHOT_TYPEの場合の2つでは
前者を使う理由は何かあるのでしょうか?
私がパッと考えてすぐ出た理由は前者のほうが処理が速いのかもしれない、というぐらいなのですが。 理由は前者のほうが処理が速いのかもしれない、というぐらいなのです プログラミング初心者です。
勉強中にわからない点があったので教えてください。
const o = {
a: 1,
b: 2
};
というオブジェクトのkeyとその値を配列で表示するという処理で、
Object.keys(o).forEach(key => {
console.log(`${key}: ${o[key]}`);
}); //
というのが出てきたんですが、${o[key]}という表現で値が表示される理由がよくわからないので軽く説明してくれませんか? いつのまにかJSにこんなもん実装されてたのか
PHPみたいなや >>481
ありがとうございます。
テンプレートリテラルの形式についてはだいたい理解しているんですが、
自分が挙げた例の${o[key]}の部分の理屈がよくわからないんですよね。 >>484
oがオブジェクトでkeyがキーなんだからo[key]はそのキーに紐付く値
それに関してはテンプレートリテラル関係ない >>485-487
やっと解決しました。ありがとうございます。 o.key, o[ key ] の2つの表現がある。
o[ key ] の表現では、空白入りの文字列とか、言語のキーワードなども使える
o.a b
o[ "a b" ]
上はダメだけど、下はOK だから、下を使うと安全。
でも、__proto__ だけは使えないかも >>489
そもそもがObject.keysで回してるんだからo.keyじゃダメでしょ
実際のプロパティ名じゃないんだから __proto__が使えないかもとか何年前の知識だよ
今は仕様でObject.prototype.__proto__だろ class使えるようになったらもうprototypeの知識は不要? ECMAScript 2015 で導入された JavaScript クラスは、JavaScript にすでにあるプロトタイプベース継承の糖衣構文です。クラス構文は、新しいオブジェクト指向継承モデルを JavaScript に導入しているわけでは**ありません**。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes __proto__やら__ついてるのはライブラリ以外ではなるべく使うべきでないと思うぞ >>489
__proto__ を付けなければよい
Mapも有 > __proto__ を付けなければよい
「__proto__ を作らなければよい」に訂正しとく
(__proto__ を使用しないにも読めたので) クラスのprivateが#とか@デコレータとか
見た目もう違う言語になりそうだな privateが#の件はclass構文ゴリ押ししてた勢やっぱセンスないなと思った。
ますますclassを使いたくなくなった。 >>499
なんか後方互換性とかパフォーマンスのため消去法で#しかなかったっぽい
俺もダサいと思うがしょうがあるまい 単純に、オブジェクトを辞書みたいに使う際、
たまたま、__proto__ と言うキーを使うと、ハマる
だから、Haxe では、キー文字列の先頭に、@ を付ける
a → @a
__proto__ → @__proto__
これで、誤動作しない >>501
いや、自然でしょ
例えばget x()を定義しててもプライベートメンバを_xとかにする必要なく
this.#xとできたり良いこともたくさんあるでしょ
private.xみたいにアクセスするのも変だし
パフォーマンスの問題がなかったとしても
クラスメソッド中だけthis下のプライベートメンバにアクセスできるようにするのは
JS的に不自然極まりないし perlや、rubyのインスタンス変数@xみたいな変数名の一部に文法的な意味持たせる設計ほんと嫌い。
あと@にしなかったのはデコレータに既に予約されてたからだと。
なんかこういう行き当たりばったりな機能追加はrubyのオブジェクトリテラルまわりや山ほどあって一貫性がまるで無い関数(プロシージャ含む)の定義法/用法/挙動/変換のカオスを彷彿とさせて嫌な予感しかしない。
所詮class構文ゴリ押し勢だからruby出身の低級プログラマが我田引水で適当に決めてるんだろ。
だからclass構文まわりは嫌いなんだ。 iterator取り出すのさえx[Symbol.iterator]と書かせてるんだから
宣言時はprivate xで参照時はthis[Symbol.private]('x')なりthis[Symbol.private].xなりでええやろ。
外部からのアクセス時はエラーで。
面倒なやつは無理して使わなくていいよ。
変数名中の記号の有り無しでやるよりずっとマシ。 それだと使いにくい
encapsulationを促進するのが目的だから短く書けることも重要視されたんだろ ほんまそう
別にprivate.x == private(this).xと記号を使わないこともできたが
privateなんて長すぎるからな 短く書くために記号とか腐ってるなwww
rubyから出てこないでほしい。
あーキモイキモイ おじいちゃん
あの長く書くことが正義だったJavaでさえアロー演算子とか導入してるんだよ 変数名にってことだろ。
構文や演算子の記号は誰も文句言ってない。 同様のクソ提案
Extended Numeric Literals
https://github.com/tc39/proposal-extended-numeric-literals
例)
document.querySelector("#foo").style.fontSize = 3~px;
なんだよ~て。perl化待ったなしwww
Object.freeze and Object.seal syntax
https://github.com/keithamus/proposal-object-freeze-seal-syntax/
freeze
const foo = {#
a: {#
b: [# "some string!" #]
#}
#}
seal
sealing of an object
const foo = {|
a: {|
b: [| "some string!" |]
|}
|}
ええ加減にせえよ。 >>511
変数名?何いってんだ?
o.#pと書くということは
([[classWeakMap]].get(o)||{}).p
と言う効果をもたらすものであって
変数名をプロキシしてるわけではない
そしてこれは「.#」演算子と考えても妥当 改めて考えると#案外いいかもと思えてきた
private x;とかだと冗長 >>502
__proto__ 付のオブジェクトを生成してるのが問題 google analyticsのjavascriptって、埋め込まれたページからアクセスするpdfやxlsへの直リンクって統計の対象になる?
埋め込まれたページまでしかできないかと思ってたんだけど、そのページに押されたリンクまで検知できるの? ES4時代からアイディアがあって
5年以上、物によっては10年かけて皆が話し合って
色んな場所で沢山プレゼンされて
ようやく見通しが見えてきた仕様を
欠片も分かってないくせにここで批判するやつ
お前がええ加減にせえよ。
ただ関心をもったという点は褒めることができる
だから意見があるんならまだ半年以上猶予があるんだから
今からでもES Discussにスレッド立ててこい
何も新規性のない不満垂れてもボッコボコにされるだけだがな Q. どうして@ではないのですか?
A. デコレータに取られちゃってた(テヘペロwww ES住民ならデコレータは関係なく
大昔からプライベート廻りでは@と#を使った提案があったが
@の方が今のSymbolになった(仕様の@@がその名残)ので
今回の提案ではよりちょっとmap参照っぽくもあった(valueではなくnameのmapだが)#を使うほうが
これまでの10年間の歴史的な流れからいって【自然】ということが分かる 言語作ってるやつが馬鹿だと思うのは、
記号なんて数が限られてるの最初からわかってるんだから
使えるからと言って後先考えずに使うなってこと
一文字で足りなくなるのわかってるんだから、最初から
記号+1文字にしておけば良かったんだよ
例えば、@じゃなくて@@とかさ >>520
@が好まれていたのは当初のprivate-(name->state)の流れを受けていた頃の話
つまりprivateを所謂プライベートシンボルを全面に出して実現しようという流れがまだ残ってたときの話で
その後統合されて今現在のprivateはWeakMapのようなもので実現する方向性だけしか残ってないから#の方が自然
そして今の仕様チャンピオンはTC39を去ったKevinのを引き継いでるだけなので
昔のことやES6前後のゴタゴタしていた辺りの詳しい話には細かくない ES2015ではsoft privateの実現にはsymbolが、hard privateの実現にはWeakMapが使える。
簡単に書きたいからという理由だけのために貴重な記号を消費しないでほしい。rubyじゃあるまいし。 JSを2050年以降まで延命させたいと言うのなら分かるが
そろそろ壮年期だと思えば消費しどころだろ どんどん仕様を追加していくとC++みたいになる
そして飽きられて次の言語へ・・・
とならないかな C++の場合もうすでに飽きられてる
Googleとか大手は必ず自分たちでC++をマクロなどで改造して使ってるし
そうで無い人はもうとっくに諦めてる
俺たちは安定と速度を求めて不便なC++を使ってるのだから
便利な機能なんて誰も求めてねーよとなってるだけ
もう誰からも進化を期待されない段階になる前に機能を追加していく必要がある 無節操に一貫性なく機能を追加していったrubyはもはや誰からも期待されてないけどな。 >>526
C++みたいな最強言語は一個あれば良い
それをラッパーして使う >>528
rubyどこで失敗したんだろうな
一時は使用者数ベスト5ぐらいには入ってなかったか >>526
C++の問題点はGCを搭載しなかったからで
そのせいでテンプレートの使用が実質必須になったから C++にガベコレ載せたらC++じゃないじゃん
住み分けだよ >>530
独善的な選民意識
ドキュメント軽視
ウィンドウズ蔑視
開発者がいくらMacやLinux使ってようが、ユーザーベースで8〜9割はウィンドウズなわけよ。
今のPythonの利用シーンを見てみると、職業プログラマ以外が自分の仕事に活用するようなユースケースが多い。
こういうユースケースに、コミュニティのウィンドウズ蔑視は致命傷になったな。ドキュメント軽視も。そういう人たちは「コードが仕様だ!」とか言われてもハァ?だろうしな。
ま、Railsが沈むまでは生きてるよ。Railsのバッテリーとして。 >>528,530
Rubyの敗因は開発側のリソース不足
公言したことが守れないのでコミュニティから見放された
でもJSのようにチートな企業がサポートしてないのでどうしようもない
まあ細々とやっていくことが必ずしも悪いことでは無いと思うが node.jsでXOというJavaScriptのLINT(兼コーディング規約)を使っています。
プロジェクトなどを作っていない掻き捨てのJavaScriptに対してXOを実行したときに
ホームディレクトリにキャッシュ用のディレクトリが作られてしまうのですが
この位置を好きな場所に変更したいです。
https://github.com/xojs/xo/blob/7017abeff57ffa96b9c5de254de5fcb4146d5121/lib/options-manager.js#L33
↑ここのcacheLocationの値を、(npmで取得した)xoのソースコード自身を編集することなく
グローバルに変更する方法などありますでしょうか。
よろしくおねがいします。 @ は、Python のデコレーター
Ruby では、@ はインスタンス変数で、@@ はクラス変数だから、
@@ をインスタンス変数として使うのは、不自然 >>535
VSCode, NOde.js の設定ファイルにでも、そういう項目があるんじゃね? デコレーターはPythonからというよりはJavaからだろ。
RoopyにいたってはRuviiの行き当たりばったり文法なんか何も参考にならないし誰も考慮してない。 parentNodeとparentElementって違いあります?
単に親要素取得したい場合どっち使うべきですかね あざす
じゃあparentNodeっていうプロパティは何のためにあるのですか いや、それくらい自分で調べろよ
調べて理解できないのならここで講義できるわけでもないしお前が分かるように伝えるすべがない Nodeのほうがプリミティブ。
用がなきゃエレメント使っときゃいい。
テキストノードいじらざるを得ないことはあったが… たぶん、Element は、Node から派生した、子クラスか何かだろ
Nodeを使う事など、まずない! プロトタイプ継承だっつの。
クラスベースバカはrugyに引っ込んでろ! クラスとプロトタイプは対立する概念ではない
最初からクラスシステムが提供されていてそれに縛られるのがクラスベース言語
プロトタイプベース言語でも構造化のためにやっぱりクラスシステムは必要になる場合も多い
ただそれに縛られていないと言うだけ クラスベースのクラスしかクラスが無いと思いこんでるやつのほうがよっぽどクラスベースバカというオチか javascriptのビット演算は実は速くないと聞いたのですが本当ですか?
内部で浮動小数点数を32ビット整数に変換して、ビット演算して、また戻して・・・という処理が走るらしいのです
今までカッコつけて n & 1 とかやってたのは実はより可読性のある n % 2 でよかったと知り衝撃です
あと、整数化をオシャレに n | 0 とかやってたのも Math.floor(n) のほうがいいらしいですね >>553
そういう時は自分で確認した方が良い
そもそもjsでビット演算とか読みづらいだけでは?機械学習でも回してるなら別だろうけど 速いかどうかは誰かが答えるとして、
n % 2 より n & 1 のほうがカッコいいなんて全然思わないし、
Math.floor(n) より n | 0 のほうがオシャレだなんてまったく思わない。 >>555
いるじゃないですかートリッキーなコード書ける俺はイカしてるんだぜって人が
まあ僕のことですが… 一行チェスボード
Array(72).fill().map((v, i)=>i%9?'■□'[i%2]:'\n').join``
結果:
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□ Array.from({length: 72}, (v, i) => i);
みたく書けばfillとmap一緒にできるよ >>558
書きゃ分かるがそっちのほうが長くなるよ。 夢のないことを言うようでアレだが
'□■□■□■□■\n■□■□■□■□\n'.repeat(4)
のほうがもっと短いし何より分かりやすい。 >560
分かるけど、こういうのは短く書くことに意味があるんだ × 短く書くことが大事
○ 少ない単語数で書くことが大事
単語数が同じで可読性も変わらないから短い方が良いけど >>561
だから>>557より>>560のが短いんだってw
>>558で>>557を書きかえても短くなるどころかさらに長くなるw
長い上に分かりにくいとか最悪じゃんw >>560
こっちのほうが更に分かりやすい。
`□■□■□■□■
■□■□■□■□
`.repeat(4) つ 顧客が求めていた物
`
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
` 用途が限定的すぎると最終的なプログラム量が増えない?
競プロあたりの話ならともかく >>570
そりゃ当たり前だ
具体的になるほどコードは増える
極端に言うとテキストなどはプログラムに任せられないからな
>競プロ
が何か分からないけど、
まぁいいや この文脈で競プロが何か分からないといっちゃう奴にとやかく言われたくないわな
知らないことを威張るのではなく恥と思ってほしいわ >>571
ありがとん
いや、汎用的という意味なら最初の方が関数にくくり出したりしやすそうだなと思っただけ
競プロは競技プログラミングね
数字を読み込んで大きさの異なる盤を出力するとかよくある部類だし、ちょっと考えてた
まぁ最初の書き込みはワンライナーにしかこだわってないっぽいけど >>553
JSはGCすら義務ではない そういう最適化はすべてエンジンの努力
だからここから言うのは一般的なことになるが、
何を使おうと使わなかろうと、型変換やチェックが走ってしまえば遅くなる
結局n & 1としたときのnがなんであるかが問題
十分慎重に扱っていれば、nは内部的にSMI(31bit整数)型で保てているはず
その状態を維持できる演算を続ける限りロスはない
例えば右シフトはOKだが左シフトは実数部30bitを超え31bitになる可能性がある
演算中は32bit整数として扱われるので問題ないが、その値を変数に入れると
doubleにするかどうかのチェックが入ってしまう
ただしその変数が一時変数で最終的に最適化で削減されれば影響はない
Math関数は最適化にブーストがかけられていて
Math.floor(smi)は特別な最適化で理想的な状態なら実際に行われる演算はsmi | 0と同じになる
他にもsmi / 2も除算ではなくsmi >> 1として評価される
結局bit演算を使うのはそこで早くなると言うより、それ自体が最適化を壊しにくいという点で価値がある >>557-562
>562
>中間リストがなくなる
Ruby のmap は、新しい配列を作って返すけど、
map! は、元の配列(self)を破壊的変更して返す
JavaScript には、self を返すバージョンが無いのか?
それと、Ruby をクソって言ってる荒らしが、
色々な板を荒らしまくっているから、そいつにかまわないように!
Ruby の会話を禁止するとか、あちこちのスレタイを勝手に変えている。
jQuery の会話を禁止するとか、スレタイに入れてる奴と同一人物かも? 破壊的変更をドヤってるあたりがRubyistだなあとしか 本当にrupiキチガイは物知らずのバカだなぁ。
新しい配列を返すからこそmapやfilter、reduceをチェインする度に新しい配列が作られるんだというのに。
本当に何にも分かってない。
roopy仲間が「rupuはここがいいんだ」って言ったら訳もわからず崇めてるだけ。
そんなカスが故意にスレ違いして宣伝するクソ言語なんか誰が使うか糞マヌケ。
クソ言語とともに滅びろ! >>575
ここはクソ言語rubyのスレではありません。荒らしはお前。死ね、苦しんで。 よそ様のスレで脈絡なくrubyの宣伝はじめてスレ民が迷惑がっても一顧だにしないrubyキチガイさんの厚顔無恥さはすごいと思います!
rubyのことなんて知りませんでしたが、おかげで一番嫌いな言語になりました!
ありがとうございます! >>575
荒らしじゃないよ
rubyがクソは単なる共通認識 >>575
> Ruby のmap は、新しい配列を作って返すけど、
Rubyのmapは新しい配列を作らないよ?
Enumeratorを返すから中間リストがなくなる クソ言語のクソ仕様の話はよそでやってほしい…
pythonスレみたいにスレタイにもruby禁止って入れようぜ。 >>582
見て笑ったw
どんだけ嫌われてるんだよwww 一人のキチガイがヘイトを集めまくって一つの言語を滅ぼそうとしてるwww この流れを見るとJSも年を取ったなと感じる
俺も何度このスレや別スレでJSは糞だ糞だ言われて出張して弁護したものか
機能が少ないことが逆に将来の可能性を残してるんだと
色んな言語で成功してからを取り入れる慎重さと賢さがあるんだと
いくらPythonバカが来ようと禁止とかしなかった
今の流れはただの弱い者いじめ 簡単に言うと老害
イテレータ廻りなどRubyから取り入れるべきものはたくさんあるし
逆に今となってはRubyを助けてあげることだってできるはず
いくらスレチとは言えこき下ろして排除すればいいってものじゃない イテレータ廻りで今さらrubyから取り入れるべきものとは?
寝言は寝てから言ってほしいね。 >>587
数年前から寝言で言ってんだが
今はもう仕様化が始まってる段階 >>584
言語って最後はユーザーによってトドメを刺されるんだね
非常に貴重な瞬間に立ち会った気がする >>586
俺は実際に色んな意味で老害だから老害な発言しても良いんだよ
でもお前らが老害に老害と言われちゃ駄目だろ
皆が老害な発言をするようになってしまったら言語が年老いたってことになる 居直り強盗みてーだなオイw
本当rubyキチガイはたち悪いわ。 すみません、質問させてください。
おそらくたまに配信されてくる広告の影響で、勝手にリダイレクトする場合があり、
その原因ファイル(広告)を特定したいのですが、どのようにすれば良いでしょうか。
ブラウザの開発ツールでリダイレクト時に止める設定ができれば良いのかな?とふんわり思っているのですが、
開発ツールの操作に疎く、ヒントだけでも頂けたら嬉しいです。その際はできればFirefoxやEdgeでお願いしたいです。
もし質問先として間違っていたらごめんなさい。 >>592
スレチに対してもちょっとは品のある対応しようぜ
蛮族じゃないんだから >>593
開発者ツールでunloadイベントでブレイクさせるようにするとか、
自分のページだったら
window.onbeforeunload = function(e) {
e.preventDefault();
return '止めたわ';
};
入れとくとか。 質問です
ランダムに自然数が入ってて、長さもそれぞれ違う配列が複数あって
この配列をn個(例えば3個)選んで
[0,1,3,5,8,11,15,23,30]
[2,3,4,8,9,16,17,20,21,23,25,28]
[3,6,8,13,16,19,23,27,32]
このn個全てに含まれてる数だけ取り出す
3, 8, 23
ってしたいとき、どうするのがベターでしょうか?
総当たりするしかないかな?と思ってるんですが phpなら配列系の関数山程あるんだけどね
あまりに面倒なら一度サーバーに投げてphpで処理した方が早いかも >>598
なるほどー
実際には数字じゃなく、オブジェクトになる予定なんで
そうなったらJSON化ですかねー >>597
気になったので調べてみた。組み込みには無いね
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set
function intersection(setA, setB) {
var _intersection = new Set();
for (var elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
//Examples
var setA = new Set([0,1,3,5,8,11,15,23,30]),
setB = new Set([2,3,4,8,9,16,17,20,21,23,25,28]),
setC = new Set([3,6,8,13,16,19,23,27,32]);
intersection(intersection(setA, setC),setB); //3,8,23 JSONで文字列比較がありなら>>600をそのまま実装してしまえばいいと思うけど
あまりにデータ数が多いならサーバに投げるのもありだけど、それならphpじゃ心許ないしなあ 考えたんですが
n個の配列の1個目のコピーを用意
tmp[0,1,3,5,8,11,15,23,30]
tmpをループで後ろから
2個目.indexOf(30) == -1 なら tmp末尾削除
2個目.indexOf(23) == -1 なら tmp末尾削除
2個目.indexOf(15) == -1 なら tmp末尾削除
ってのを、3個目、4個目、... n個目と繰り返せば
ループ回数はどんどん減ってくことになるから
総ループ数は最短で済む、のかな?
あ、最初に用意するコピーは1個目じゃなく
lengthが一番小さいやつにするといいのか 今気づきましたがメ欄に番号書いてました…
>>597
>>599
>>603
は私です… >>597
const intersection = (...arrays) => {
const truthArrays = arrays.map(array => array.reduce((acc, n) => (acc[n] = true, acc), []))
const result = []
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
if (truthArrays.map(truthArray => truthArray[i]).every(v => v)) result.push(i)
}
return result
}
const a = [0,1,3,5,8,11,15,23,30]
const b = [2,3,4,8,9,16,17,20,21,23,25,28]
const c = [3,6,8,13,16,19,23,27,32]
intersection(a, b, c)
//=> [3, 8, 23] あっ、
ループの度にMath.max(...arrays.flat())が評価されちゃうから↓の行は、
for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
↓の二行に分けたほうがよかったゴメン
const maxNum = Math.max(...arrays.flat())
for (let i = 0; i <= maxNum; i++) { あっ、オブジェクト?
オブジェクトだったらもっと効率的に出きるかも知れないから例書いといてくれ。 質問です
document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
element.hogehoge="are";
とか
if(element.hogehoge=="are"){〜
みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか? >>608
それは共同開発者に聞いてくれ
共同開発者がいないなら、本気でどうでもいい。好き放題やっていい
なんだったら独自要素作っても良い
<foo>独自要素です</foo>
SEO的にどう評価されるかは知らないけど >>609
ありがとうございます
聞きたかったのは言語仕様としてまず可能なのかどうか(全てのブラウザ環境で使えるのか)だったので、OKのようですね。
こういうことは意外にJavascriptの入門書に書いてない気がします。
ありがとうございます。 単なるオブジェクトへのプロパティの設定だから書いてあるだろ。
domから見たらエレメントは特別だがjsから見たら単なるオブジェクトの一種なんだし >>603
自力で実装するにしても最悪O(n^m)はさすがにキツいかなあ >>611
すごく論理的に読んだらそうなんでしょうし、今なら私にも分かりますが、
>>608みたいに血の通った使い道の説明があったらもっと早く安心して飲み込めたなぁと思うので。 >>610
何を設定しても良いのは間違いないが、
そういう時ようにdata属性ってのがある
data-fooなどはjQueryからも読みやすくて良い >>593
確か、はてなブログだったかな?
質の悪い広告を採用している。
システムセキュリティーの、広告か何かだったかな?
自動的に、広告ページへ飛ばされる DOM に独自のプロパティを、勝手に追加したら、
DOMの仕様に適さなくなるから、DOMじゃなくなる
独自部分は、カスタムデータ属性を使うべき >>596
>>616
593です。まだ試していませんがとても助かります。ありがとうございます。 lodash にある
複数の配列の積集合(共通する値)を取得する
_.intersection(array...)
_.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
// → [1, 2] 「Webブラウザで動かすJS」以外、
たとえばNode環境とかTypeScriptとかの話って、このスレの範囲内?
やっぱ板チ? アリガサンキュー
あくまで例なだけでTSやnodeだけの話じゃないんだけどね >>607
配列の要素になる(予定の)オブジェクトはよくあるクラスのインスタンスです
インスタンス群から、ある複数条件に&マッチするものを抽出するの>>597の目的です
あるひとつの条件にマッチするかどうかはインスタンス生成時に判明するので
条件ごとに、マッチするインスタンス群を配列化しておいて
実際に抽出する際には、選択された条件の配列群から
全てに含まれる要素だけを抜き出そうと考えてました 文字列に応じた処理分岐ってどうするのが一番いいの
パッと思いついたのは3案
案1 素直にif文
if(str === 'hoge') {
hogeFunc();
} else if(str === 'piyo') {
piyoFunc();
} else {
otherFunc();
}
案2 switch文
switch(str) {
case 'hoge': hogeFunc();
break;
case 'piyo': puyoFunc();
break;
default: otherFunc();
}
案3 連想配列
const obj = {
'hoge': hogeFunc,
'piyo': piyoFunc,
};
if(obj.hasOwnProperty(str)){
obj[str]();
} else {
otherFunc();
}
分岐数は大体20〜30で、イベント絡みなので頻繁に呼ばれる可能性が高い
よろしくお願いします [].slice()を使った配列の複製って
2次元配列以降は値渡しできないんだなぁ…
シンプルに多次元配列を複製する方法教えてください >>625
> 文字列に応じた処理分岐ってどうするのが一番いいの
まず速度は無視して一番コードが少なく可読性が高い方法で書く
9割以上はココまでで終わり
どうせ頻繁に呼ばれると言っても
1秒間に100回も呼ばれないだろ?
頻繁と言って良いのは10000回レベルからだぜ >>625
> if(obj.hasOwnProperty(str)){
これは不要 >>628
const コピー先 = JSON.parse(JSON.stringify(コピー元))
関数入れたり等してない単なるデータならこれ使えんか?
さすがjavascript結構速いぞ MessagePort使って非同期にするほうがより良い Ruby でも、clone, dup など、基本は、shallow copy(浅いコピー)で、
deep copy(深いコピー)は、Marshal.dump
Marshal.dumpは「オブジェクト ←→ 文字列」の変換だから、
文字列からインスタンスを作った際に、全く新しいインスタンスが作られる
JavaScript では、lodashの、cloneDeep がある >>631
いいなサンクス!
>>633
lodashも検討します オブジェクトが要素の配列の複製ってやっぱ面倒なんやね
1人でずっとやってきたから俺がわかってないだけなのかと思ってた
複製が予想されるオブジェクトには
自分の複製インスタンスを返すメソッド持たせたりしてるんだけど
これは変なやり方? 別に面倒ではない
ただの構造体なら>>631でいいし
インスタンスのコピーなら当然クラス側にcloneメソッドを付けるのが普通
DOMのように 空ループ1億回するだけならどう言う書き方が最速なのか気になる 内部の状態を変えないなら複製の必要もない
内部の状態を変えたくなったらインスタンスごと作り直せば元のインスタンスの中身は変わらない
そのためにはクラス定義をなるべく小さなものにすること
要はValueObjectよ tableを100個くらいまとめて作るには
for(n=1;n<=100;n++){
document.write("<table><tr><td>aaa</td></tr></table>");
}
のようにdocument.writeでやるしかないんですか?* >>641
普通それはphpで行う
それ以前にtable100個必要な理由はよーわからんが 「サーバーサイドで行う」ならわかるがなぜphp限定 テーブル100個はいろいろと無駄
Canvasでやれ phpとjs使えるだけでプログラマー気取りのweb屋さん document.write使うなし
今のブラウザだとdocument.writeされるたびに全体が再描画されて極端に速度低下する場合があるので
素直にdocumentFragment作ってからappendChildするなり全部文字列で連結してからinnerHTMLに突っ込め >>647
文字列結合してから最後に一回だけdocument.writeすればいいだけ >>638
オプティマイザーにまるっと削除されるんじゃないか、空だと。 一時期、innerHTMLとdocument.writeは使わずにcreateElement使って表示されろって言う奴がいたけど、
jQueryが流行りだしたらほとんど言わなくなったなw document.writeはだけはホント害悪
Feature Policyで禁止にすべき document.writeって使う場面あるの?
昔テストの時に使ってたけど、jsfiddle当たりのサイトでてから全く使わなくなった >>636
基本的に、C/C++ 以外の言語は、参照を使っているから、
代入が参照の代入だけで、新しいインスタンスを作ってはいない。
(ただし、primitive は参照を持っていない)
そのため、deep copy(深いコピー)が無いから、
Ruby のMarshal.dump のような「オブジェクト ←→ 文字列」の変換・シリアライズの機構を使っているだけ
文字列から、新しいインスタンスを作れば、
既存インスタンスの参照を持っていないから、安全
Haxe では、多言語間のシリアライズもできるけど、
抽象クラスを使っていると出来ないとか、色々な制約がある JavaScriptやり始めて20年くらい経つけど、
alertで処理を止めて確認する癖が抜けなくてconsole.logを使うのがいまだになれない >>658
めっちゃ効率悪いぞ、早く覚えたほうが良い
開発ツールとか使ってる? >>641
参考までに、
Ruby, Nokogiri, selenium-webdriver では、
Nokogiri::HTML::DocumentFragment.parse で、文字列から、DOM を組み立てる
最後に、JavaScript のinnerHTML で、そのDOM をページに反映する VSCode には、Quokka.js という拡張機能がある。
ただし、既存ファイルでは使えない
console.log を使わなくても、変数が表示される
let numbers = [ 1, 2, 3 ]
let doubled = numbers.map( n => n * 2 )
doubled
//=> [ 2, 4, 6 ] いやjs/tsはvscodeが統合デバッガ用意してくれてるんで。
デバッギングプロトコルでchromeに接続してchromeのdevtools使うこともできるしndbもある。
Quokkaとかいう商用ソフトの機能制限宣伝版の片棒担いじゃうとこが読点君だなと思う。 webworkerを使って呼び出したスクリプトのデバッグは
いまだにdevtoolしか使いこなせない…… ID出して投票しようぜ
俺は賛成
pythonと同じ【Ruby禁止】 をつければいいと思う
ちなみにpythonスレ
くだすれPython(超初心者用) その41【Ruby禁止】 賛成。スレタイになくてもスレチなのはその通りなんだがあのキチガイには通じない。
通じないのはつけても同じかもだがあいつが犯罪者なのがたった6文字でより明確になる。
せめてそんくらいは溜飲下げさせてもらってもいいだろ。 タグでマークした文字列をタグごと削除する正規表現は
どうなりますか? 使いどころがわからないけど正規表現でやる縛りでもあるの?
セレクトして削除すればいいだけだと思うんだが… 反対。ここまででID出してる人で
賛成は1人、反対は4人か ・文字列が入ってるタグならなんでもいい
・「タグごと」消したい
ってことらしいから、bodyにはほぼ確実に文字列が入っている。つまり、
document.body.innerHTML = '';
でいいな。俺ってかしこい oncontextmenuのハンドラに、innerHTMLで要素の内容を書き換える操作を登録すると
ブラウザの右クリックコンテキストメニューが出てこなくなるのですが仕様でしょうか?
chromeです
というより 途中で送信してしまいました
>というより
そもそもoncontextmenuに登録するとブラウザの右クリックメニューは出てこないと思っていたのですが
違うのでしょうか >>690
いや>>679見ろよ。bodyに文字列入ってるならそのbodyタグも消さなきゃダメだろ。
それじゃbodyタグ残ってるからダメ。
document.body.outerHTML = '';
こう。 右クリックメニューを触るのはもう非推奨だったような気がする
検索しても出てこない >>692
contextmenuイベントハンドラに渡されるイベントオブジェクトでpreventDefault()するか
return false;で戻った場合にコンテキストメニューが表示されなくなる Mapのキーにオブジェクトを使うのって、あまりしない方がいいですか?
できるのはわかってるんですけど、デバッグの際に中身見ても想定通りのキーかどうかがわかりづらいので、アンチパターンだったりするのかなと
識別用に文字列とか用意した方がいい? スレタイに、Ruby禁止・jQuery/Lodash禁止とか、入れてる奴は荒らし!
荒らしが、スレ立てしてるだけ!
無視すべし!
あちこちで、荒らしが荒らしてるだけ! >>699
お前がキチガイruby荒らしだろうが死ね! 文字列などのprimitive は、値しかないから変化しないので、キーに適する
一方、インスタンスは参照・インスタンスID だから、
そのインスタンスが削除されたら、キーが消えて、データを取り出せなくなる >>699
全部お前のせいだろ。JSにもRubyにも迷惑かけんな。氏ね >>701
メール欄を空にするとIDが表示されるよ 例えばJavaと間違われるから見た人が間違わないようにJava禁止と入れるとかいうのなら分かるが
かなり関連性の低い言語の名前を入れるってスレタイ汚しにしかならんから絶対やめろ
Rubyの話題出してる奴が入れたから来ないわけでもないし、そんなことで議論する暇があったら
>>1のテンプレを時代に合わせて改良しようとしろ
ガキクサ >>702
こんのクソボケrubyキチガイまーた適当ブッこきやがって死ね。
オブジェクトをmap替わりに使う場合は適するもクソもキーには文字列かシンボルしか使えねーんだよタコ。
任意のオブジェクトをキーにできるMap欲しいねってことでMap/WeakMap採用されたんだろうがカス。
キーに登録したオブジェクトが消えたらキーも消えて取り出せなくなるのはMapじゃなくてWeakMapの挙動だハゲ。
そのWeakMapの挙動もメモリリーク防げるよう望まれて規定された性質だ糖質。
嘘ばっかり喚き散らしてほんとこいつ嫌い死ね。
というわけで賛成! 何かアンケやってるけどスレタイじゃなくてテンプレでしょ?
そこ違うと結果も全然違うと思うんだけど Ruby禁止とかつけた所で、じゃあPythonならいいのか?ってことになるので
意味がない。荒らしはどうせつけた所で書き込むので
スレタイが長くなるだけで何の効果もない。よって反対 ruby信者が圧倒的にキチガイで辟易しているからこんな事を話ているわけで それならNGワードにでも登録すりゃ良い
スレタイに入れた所で書き込みを制限することはできないんだから >>717
それな
いちいち騒いでるやつの方がうざいわ 低レベルなruby信者がrubyで回答しているのが一番の問題 承認欲求ってやつなんだろうな
賛成いっぱいもらいたい
賛成いっぱいもらったから俺が言ったことは認められたんだ
みたいな >>696
なるほど、閲覧していたサイトもreturn falseをしていました
ただ同じコードを再現しようとしたとき、なぜかinnerHTMLを加えるとブラウザ側のコンテキストメニューが消えてしまいましたね
console.log(1);
return false;
//これだとブラウザ側のコンテキストメニューが出る
console.log(1);
elm.innerHTML='';
return false;
//これだと出ない(return falseの有無でも同じ)
自分はおそらく使う機会が無いのでだから何なんだという話なのですが・・ 例えば、model press のサイトでは、
画像上で、右クリックメニューを表示させたくない
表示されると、画像をダウンロードされてしまうから
だから、return false で検索すると、その場所が見つかる >>724
>表示されると、画像をダウンロードされてしまうから
客や代理店とかもたまに言うけど哲学的表現だよなあ
ダウンローして表示した画像を右クリック出来るとダウンロードされてしまう… firefoxなんだが
SHIFT押しながらだと普通に右クリックで
メニューが出てきたな 例えば、model press のサイトでは、
乃木坂46のNo.1 美人、佐々木琴子の記事が、最も参照される!
この画像をダウンロードされると、定期的に見に来てくれなくなるから、広告のクリックが減ってしまう
また、表示される広告も、個人や時期によって、コロコロ変わる
例えば、佐々木琴子の着ているパーカーを検索してから、ページを見ると、
PUMA のロシアのジャケットが表示されるようになる
それで、そのサイトから買えば、広告収入が入る >>726
知らなかった
もう右クリックOKのアドオンいらんわ
ありがとう なんかを集計し、キーを日本語にしたいとき
オブジェクトをいわゆる連想配列っぽく使うのが普通のやり方ってことでいいんですかね
たとえば
const arr = ["孫 悟空", "孫 悟飯", "孫 悟天", "猪 八戒", "沙 悟浄"];
というリストを元に
//obj = {
//"孫" : "悟空 悟飯 悟天",
//"猪" : "八戒",
//"沙" : "悟浄"
//};
のような結果が欲しい場合、
const obj = {};
arr.forEach((elem)=> {
const seimei = elem.split(' ');
const sei = seimei[0];
const mei = seimei[1];
if( obj[sei] !== undefined ) {
obj[sei] += " " + mei;
}else{
obj[sei] = mei;
}
});
とするってことでいいんでしょうか
ifの部分(そのキーの中身がまだない場合)がやや大げさに感じるのですが、これはしょうがないんですかね >>729
まあそうだわな
それよりスペース区切り文字列で格納するってちょっと斬新と思った 配列にする以外の発想がなかった俺の
頭の硬さたるや… >>729
const obj = arr.reduce((acc, name) => {
const [sei, mei] = name.split``;
acc[sei] = acc[sei] ? acc[sei] + ' ' + mei : mei;
return acc;
}, {}); >>733
間違えた
>>729
const obj = arr.reduce((acc, name) => {
const [sei, mei] = name.split` `;
acc[sei] = acc[sei] ? acc[sei] + ' ' + mei : mei;
return acc;
}, {}); >>734
まあそんな感じじゃない?
あまり空白でつなげるってないけど、俺なら
const obj = {}
for (const [sei, mai] of arr.map(name => name.split(' '))) {
if(obj[sei]) {
obj[sei] += ' ' + mei;
} else {
obj[sei] = mei;
}
}
あたりにしそう >>736
これならどう?
const obj = Object.entries(arr
.map(name => name.split` `)
.reduce((acc, [sei, mei]) => (acc[sei] = [...(acc[sei] || []), mei], acc), {}))
.reduce((acc, [sei, meis]) => (acc[sei] = meis.join` `, acc), {});
>>734ならループ1回、
>>735ならループ2回で済んでいるところ、
なんとこれは計4回も無駄にループしてる。
まいったか >>738
jsである以上無駄ループはある程度仕方ないと思うけど、reduce内で副作用があるのは個人的に好きくないんだ
副作用はfor文で明示したい >>739
副作用取ったぞ!
const obj = Object.entries(arr
.map(name => name.split` `)
.reduce((acc, [sei, mei]) => ({...acc, [sei]: [...(acc[sei] || []), mei]}), {}))
.reduce((acc, [sei, meis]) => ({...acc, [sei]: meis.join` `}), {}); >>740
ちょっと笑った
やっぱりjsで関数型ちっくにやるもんじゃないな ループ1回で済む>>734から副作用取ればいいじゃん。
const obj = arr.reduce((acc, name) => {
const [sei, mei] = name.split` `;
return {...acc, [sei]: acc[sei] ? acc[sei] + ' ' + mei : mei};
}, {}); >>743
ループ回数分オブジェクトが再構築されるのがえぐい じゃあ副作用使え。
現在のコンピュータのアーキテクチャでは副作用使った方が効率はいい。
そうしないのは効率以外のメリットがあるからだが今回reduce内のアキュムレータなんぞはわりとどうでもいい。 arrを破壊しちゃダメなケースもあるでしょ
イテラブルをループ内でミューテートはノーグッド(ルー風) おっちゃん
name.split` `;
これが馴染めん… コールバック関数をうまく使えないので、お助け下さい
現在地の緯度経度を取得するため、
navigator.geolocation.getCurrentPosition()
https://developer.mozilla.org/ja/docs/Web/API/Geolocation/getCurrentPosition
を使おうと思いましたが、successから返す方法がわかりませんでした
具体的には、以下のようなマップシステムを作りたいと考えています
・「北海道」のボタンを押すと、地図の中心を北海道にする(他にも各地があります)
・現在地を押すと、現在地を中心にする
どのように書けば良いでしょうか
https://jsfiddle.net/y0qb63fs/6/ >>747
第一引数に文字列を取り、第二引数以降がないか、または省略できる関数hogeに対し、hoge('fuga')をhoge`fuga`と書いて同等の結果を得ることができる。
これはES2015のtaged templatesの仕様と、['piyo'].toString()が'piyo'となるjsの仕様を組み合わせて利用したイディオム。 >>749
おっちゃんそれは勉強した
>第二引数以降がないか、または省略できる
これが解せん
`` で書く場合と(arg, arg)で書く場合が混ざるのがすごく気持ち悪い…
気持ち悪いのはおっちゃん昨日飲み過ぎたからだけど(´;ω;`) >>750
まあ別に何か付加価値のある書き方じゃないからな。
俺はsplit、join、querySelector[All]のみに使うことにしてる。 >>741
> やっぱりjsで関数型ちっくにやるもんじゃないな
関数型言語でやったらもっとシンプルに書けるというの?
同じでしょ? >>748
コールバックが呼ばれた時にはコールバックの外の処理は終了済み
コールバック内に後続する処理を全部書く手もあるけど
今時は見た目と実行順が一致するのでPromiseでラップしてasync/awaitする
https://jsfiddle.net/ny2px8ma/ >>754
うわあああああ!!
>コールバック内に後続する処理を全部書く手もあるけど
これを避けたかったのも汲んで頂き、感激です;;
ありがとうございました!!! >>754
jQueryってasync/awaitとも連携できるんだな 独自仕様のpromiseというかdefferedを持ってたけどver3で標準仕様のPromises/A+に合わせた。
標準のpromiseに沿ってるんだから当然awaitは効く。そうなるように作られてるんだからな。 >>756,757
連携できるけどその例では連携してないでしょ
それに連携できるのはjQueryが標準に沿ってるからではなくて
標準がライブラリのためにPromiseではなくThenableを期待するようになってるから 結局、このパターンってどうすりゃいいんだ?
待機時間以内なら返り値、それ以上ならエラーみたいに返り値で返してくれればいいのに >>757>>758
でも独自仕様でしょ
ライブラリに合わせるのはやっぱりおかしい >>758
なるほど。しかしthenableてすげー単語だなw
メリケンの国語教師(英語教師)は日本みたいに正しい英語ガーとか喚いてないんだろうか… >>761
欧米人も文法適当
fishの複数形がfishって意味不明だろ、普通にfishesにしろよってのは普通に言われている
そもそもなんでfishの複数形がfishなのかの出展がどこにもない
日本語にも山程そういう点はあるけどな
「新しい」の読み方が「あたらしい」など
※本来は「あらたしい」だけど何故かどこかでなまって「あたらしい」になった >>761
ableは何にでもつくぞ
peopleにだってつくんだから
言葉って文法ではなく雰囲気だよ >>758
連携っていうのは、これの話
$('button').on('click', async function(){
普通にjQueryの引数にasyncって使えるんだなってこと んなわけねーだろって思ってすいませんでした
https://i.imgur.com/lzU2fST.png
実際こういうニュアンスなのかな?それだけは知りたい >>765
うん、だからそれは連携でもなんでもないよねって言ってる
呼び出す側からしてみれば返り値を気にしない場合それがasyncな関数であろうが無かろうがこれっぽっちも関係ないのだから >>766
人間らしい→人格のある
って感じじゃね
優しさなら人の心がわかる優しさって感じ >>764
ハイエースしてクジラックスしたいとか言うもんなぁ >>>768
思ったより英語って柔軟性あるんだな
まだニュアンスはちょっとばかし分からんけど、勉強したくなったw
ありがとう! kanojo's manko is sonyuable >>767
要するに連携って言葉に食わなかっただけ?
そんだけなら、ぐちぐち言う必要ないでしょ?
jQueryとasyncは組み合わせて使えるって言えば満足? momentとasyncは組み合わせて使える
mathjsとasyncは組み合わせて使える
pdf.jsはasyncと組み合わせて使える
jszipはasyncと組み合わせて使える
それから… >>781
jQueryとasyncは組み合わせて使えるっていうのも同じ
>>782が示したように頓珍漢な発言
私何も分かってませんよと言いふらしてるようなものだから
恥ずかしいから控えてくれ まあまあ
jQueryの詳しい話は、jQueryスレでやろう >>782
やっぱり便利だよね。
それと同じようにjQueryもasyncと組み合わせて使うと便利なんだよ
たくさんの便利の中の一つ すごいジョーダンがナイキ履いてジャンプしてる→俺もナイキ履いてジャンプしてみた→俺すごい どこぞの人がReact使っていた→俺も使ってみた→俺すごい jQueryのシェア、まだ上がり続けてるんだってな 質問スレだから質問
なぜJQueryはこんなに論争を巻き起こすのですか? 特定分野に置いてjQueryよりも優れている技術がある
それをすべての場合においてjQueryよりも優れていると勘違いしている人がいる
そういう人がjQueryはオワコンとか言い出したのが発端
特定分野に置いてjQueryよりも優れているのは事実だが
その特定分野が狭いという現実がある
jQueryよりも優れていると信じて疑わないので
いつも論争を巻き起こす >>789
宗教戦争
好みで言い合っているから永久に論争は終わらない
本当に議論スべきは、どういう機能・規模のサイトを作る時に、
何が必要か、どれを使うと便利かで話し合うべきだがここは質問スレなのでよそでやればいいと思う 特定分野に置いてjQueryよりも優れているのは事実だが
その特定分野が狭いという現実がある
そのためどれだけ時間がたってもjQueryのシェアは増える一方
誰も脱jQueryをしてくれない。 新しいサイトではjQueryを使わないって言ってる人がいるけど
実際には本当に新しいサイトなんてまずないからね。
新しいサイトを作る場合でも、大抵は前に作ったサイトをコピーして
そのサイト用に修正する。それが一番早く作れる方法だから。 特定分野に置いてjQueryよりも優れている技術がある
それなのにすべての場合においてjQueryが優れていると勘違いしている人がいる
そういう人が脈絡なくjQueryが最強とスレ内容に関係なく至るところで暴れだしたのが発端
特定分野に置いてjQueryも優れているのは事実だが
その特定分野が狭いという現実がある
jQueryが最強と信じて疑わないので
いつも論争を巻き起こす >>794
人が書いた文章を意味を反対にしてパクるなよ
そんなことするからメチャクチャな内容になってるし >>789
別にjQeryが論争を巻き起こしてるわけではないです
全てをjQeryで片付けるマンとjQery絶対許さないマンのただのじゃれあい
宗教戦争なんて大層なものじゃない 最近はすっかり下火になったと思います。
jQueryはオワコン説 新規でWebアプリ開発はもはやjqueryはあり得んわ jQueryなんぞとっくにマスターしててヒマだから新しい概念のフレームワークなど楽しく勉強してるというのにjQueryバカは「jQuery以外不要!勉強するな!俺が勉強してないのにムキーッ」
とスレチでつっかかってくるので遊んであげてるだけ。ムダだと思うのは自由だからお前が勉強しなきゃいいだけだろってw
なーに人の勉強内容にケチつけてんのかね。もうjQueryに学ぶことなんてないよw >>798
そりゃウェブアプリに限ればそうだろうよw
殆どがウェブサイトだからな >>799
そんな話してないぞ?
jQueryはオワコンじゃなくて
両方使いましょうって話をしてる DOMを管理するライブラリ/フレームワークは基本的に共存できない。
angular react vueなどのvDOM勢からしたらそこまでしてわざわざ軒先貸してあげるメリットがまるで無い。 ようするにブラウザ標準のDOM APIとフレームワークは相性が悪いわけ
DOM APIを直接(またはjQueryなどのライブラリを使って)操作することを
禁止しているから web componentsが完成すれば、コンポーネント(≒HTMLタグ)を
プログラマが作ってウェブデザイナはそのHTMLタグを使う時代になる
コンポーネントは既存のHTMLタグの機能を拡張して動きをつけたものだが
汎用的なものであるためデザインは含まない(デフォルトがある程度)
デザインはCSSでやるという今と同じ流れ
コンポーネント自体はDOM APIを使って作るだろう。
じゃあjQueryは不要になるのか?というと、コンポーネント同士の連携で使われる
CSSでコンポーネントにデザインを、jQueryでコンポーネント同士の連携を。
そこにフレームワークは登場しない つける動きがもうコンポーネント作る時点で作ってあるんだから出番ねーよw
さすがに要素の移動程度ネイティブapiでやるわwww rubyといいjQueryといい本尊が落ちぶれた信者は大変だな。
まぁ迷惑だから出ていけ。 parcel+react+flow←どんなイメージ? CSSで切り欠き部分まで一杯にコンテンツを表示しているときに
対象の要素の隠れた部分、もしくは切り欠き部分のマスクを取得、計算するにはどうしたら良いでしょうか? 要素のonclick属性と、click()のバインドは全く別物なのでしょうか?
上書きされることはないのでしょうか
https://jsfiddle.net/0a231k9s/ onclick属性
addEventListener('click', e)
jQueryのclick(e)やon('click', e)
これら3つは別物と考えてok
jQueryは内部でaddEventListener使ってるけどイベントハンドラは独自管理 無名関数の代わりにアロー関数を使う事はありますか?
互換性とthisのバインドの違いが怖くてビビって使えない >>820
ありがとうございます
使えるように勉強します すいません初心者の質問です
JSでは、C言語みたいに、1つの式しか書けない所で、「i++,j」みたいに書くことで
「i++という処理だけをして、その結果を捨てて、そこに入る値としてはjを使う」
という文法ってあるんでしょうか?
ちなみにこの文法のことをC言語で正式に何と呼ぶのか分からないので
Javascriptにこれがあるかどうかもうまく調べられないという状況です カンマ演算子を好んで使う職業プログラマなんておらんだろ
関数型云々とか関係ない コンマ演算子
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9E%E6%BC%94%E7%AE%97%E5%AD%90
プログラミング言語 C および C++ におけるコンマ演算子(コンマえんざんし)は、
左被演算子を評価しその値を捨て、その後右被演算子を評価する演算子である。
順次演算子(じゅんじえんざんし)もしくは順次評価演算子 (sequential-evaluation operator) と
呼称されることもある[1][2][3]。JIS X3010ではコンマ演算子と表記されている。 >>826
積極的に使うわけではないが、一つの文にしたい時には使う アロー関数の略式で使うことあるし、関数型云々は関係ないな 副作用嫌う関数型主義者がA,BでAには副作用しか期待できないカンマ演算子を許すはずがない 皆さんありがとうございます。
カンマ演算子と言うんですね。そしてjsにもあると。
大変勉強になりました。 >>835
> カンマ演算子を使う事が副作用のトリガーではない
正しい。
が、A,BでAの部分で副作用を使わない場合はAの部分は全くなにもしないということ。それは単にBと書くことと同じである。
A,Bと書くということは、普通はAの部分で何か処理をさせる。
その場合その処理とは副作用以外あり得ない。
別に一般の言語では普通のことだが関数型信者は許せないのである。 >>837
> その場合その処理とは副作用以外あり得ない。
なぜ? >>837
> が、A,BでAの部分で副作用を使わない場合はAの部分は全くなにもしないということ。それは単にBと書くことと同じである。
「副作用を伴わない=何もしない」って本気でそう思ってるのか...
返り値に影響する処理なら何もしてないわけではないだろうに A,BでAが帰り値に影響を与えるということは、すなわちAの部分は副作用を持つ。よく考えてみるんだな。
例:
var a;
var b = (a = 1, a + 2);
悪いとは言ってない。普通だ。
これを悪いと考えるのが関数型信者なのだ。 副作用を伴わない関数↓
const nosf = n => n * 2;
const unko = (nosf(3), 10);
nosf(3)の唯一の成果は捨てられる。
=意味がない
=const unko = 10;と書くのと一緒
=何もしないのと一緒
副作用を伴う関数↓
const sf = n => {console.log(n);};
const unko = (sf(3), 10);
単にconst unko = 10;と書くのとは違い、3がコンソールに出力される。
=意味がある。そして副作用でもある。
A, Bと書くとき、Aに期待できるのは副作用のみである。
だからなんだ?なんでもない。ただそれが関数型信者は許せないのである。 CPUに計算はさせてんじゃん。捨てられる無駄な計算をw >>840
やはり、ロジックがおかしい
再考を推奨する
[1,2,3].map(v => (v += 2, v * v)); // [9, 16, 25]
>>841
変数名からして汚いコードだな... >>843
オーケーオーケー、つまりあなたは
v += 2
の部分が副作用じゃないと言いたいんだな?
そっかぁそうだったのかぁ…
やっぱりwikipediaは信用できないなぁw
https://ja.m.wikipedia.org/wiki/副作用_(プログラム)
プログラミングにおける副作用(ふくさよう)とは、ある機能がコンピュータの(論理的な)状態を変化させ、それ以降で得られる結果に影響を与えることをいう。代表的な例は変数への値の代入である。 副作用が何かも知らないやつが突っかかってんのか
知らないなら黙ってりゃいいのに >>844
君の出したところによると、参照透過性の満たすべき条件は、
1. 同じ条件を与えれば必ず同じ結果が得られる
2. 他のいかなる機能の結果にも影響を与えない
なわけだが、
[1,2,3].map(v => (v += 2, v * v));
は副作用があって、
[1,2,3].map(v => { const x = v + 2; return x * x; });
は副作用がない、といいたいのだな?
どちらも、1,2の条件を満たしており、他のいかなるスコープの変数にも影響を与えないとしても、前者は副作用があるのだな? >>847
A, Bと書くとき、Aに期待できるのは副作用のみである。
何か文句ありますか?以上。 >>848
副作用がないコードは既に説明した、といっておこう >>848
はい。文句あります。
a=foo(),b=bar(a),c=baz(b) >>844
偉そうな物言いは「破壊的代入」で説明されている部分を理解してからにしてくれませんかね >>851
副作用というのは、関数(>>850でいうfoo, bar, baz)の
戻り値以外に影響を与えることなので、>>850には副作用はありません
純粋関数型言語Heskellの例
https://qiita.com/7shi/items/145f1234f8ec2af923ef
> a = 1
> b = 2
> c = a + b
>
> main = do
> print c
カンマ演算子を使うと
a=1, b=2, c=a+b
となる。ここに副作用はない ちなみに>>850を副作用なしで書くとこうなる。
const c = baz(bar(foo()));
tc39で議論されてるパイプラインオペレータが入ると将来こうも書ける。
const c = foo() |> bar |> baz;
まあfoo, bar, bazの中で副作用使ってるかどうかまでは関知しないが。 > ちなみに>>850を副作用なしで書くとこうなる。
> const c = baz(bar(foo()));
ぷぷぷw
あれあれ?もしかして変数に代入したら
それは副作用だって思ってんの? 「変数代入=副作用有」はネタじゃなくて本気だったんだな… ミュータブルと副作用の違いもわかってないっぽいし、律儀につき合うこともないと思うが…みんな真面目だな 以下の3つはどれも全く同じ処理をしており副作用はありません。
これぐらいみんなわかりますよ?
function func() {
return baz(bar(foo()));
}
function func() {
const a = foo();
const b = bar(a);
const c = baz(b);
return c;
}
function func() {
const a = foo(), b = bar(a), c = baz(b);
return c;
} ミュータブル以前の問題で「代表的な例は変数への値の代入」の説明を見て、反射的に脳内回路が出来上がっただけじゃないかね
説明の一部分だけ読んで早合点するやつは、最近珍しくない >>857
いや真面目なんじゃなくて
遊んでるだけだと思うw >>853の挙げているHaskellのコード
> a = 1
> b = 2
> c = a + b
>
> main = do
> print c
をあえてJavaScriptで同等に書くとこうなる。
const a = 1;
const b = 2;
const c = a + b;
console.log(c);
カンマ演算子を使った
a=1, b=2, c=a+b
の場合は、
a=1
b=2
c=a+b
の3expressionすべて副作用を持つ。
これは、a, b, cの各変数をvarで宣言済みか、letで宣言済みか、あるいは宣言なしのグローバルかに関わらず、である。 >>859
そんな高度(?)なこと考えてないよ。
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ
C言語のカンマ演算子の代表的な使い方であるfor文の初期化式でも代入してるのになぁ
for(int a=1, b=2, i=0, i < 10; i++) >>861
> の3expressionすべて副作用を持つ。
じゃあ、副作用の内容を言ってください >>861
>>858の何処に副作用があるのか言ってみてねw だから代入は副作用だって。
JSは副作用書けるしよく使うというだけの話だろ > だから代入は副作用だって
それだと純粋関数型言語であるHeskellにある代入(正確には束縛)
をどう説明すんの? >>866
自分で書いてんじゃん。
Haskellに代入はない。束縛のみ。 const a=1, b=2, c=3 って書いたら
ちゃんとbもcもconstになるな。
ってことは
> const a = foo(), b = bar(a), c = baz(b);
は再代入できないから完全に副作用なしだ >>867
今は束縛かどうかじゃなくて、副作用があるかどうかです。
で、副作用あんの? JavaScrptのconstへの代入は
値を変更できないから束縛相当になるよ
つまりこれは完全に副作用がないということ
> const a = foo(), b = bar(a), c = baz(b); カンマ演算子使うことと、副作用にはな〜んも関係ないってこったな 日本語wikiだと
> 代表的な例は変数への値の代入である。
ってだけなのでちと分かりづらい
英語だと
> said to have a side effect if it modifies some state variable value(s) outside its local environment
とか
> Example side effects include modifying a non-local variable, modifying a static local variable, modifying a mutable argument passed by reference, performing I/O or calling other side-effect functions.
とかあって分かりやすいね 結論としてはこれ
> 単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ constへの代入なら副作用はない
> const a = foo(), b = bar(a), c = baz(b); >>862
> for(int a=1, b=2, i=0, i < 10; i++)
C言語は知らないが、JavaScriptでは int を let に直したとして、カンマ演算子ではないぞ じゃ[1,2,3].map(v => (v += 2, v * v));
も、[1,2,3].map(v => (const w = v + 2, w * w));って書けばいいな!
あ、あれ?(TдT) 変数も代入も言語ごとに原理が異なるわけで、一律に「代入=副作用有」と考えるのが間違いの元 >>885
for(Expression; Expression; Expression)Statement
12.16 Comma Operator ( , )
Syntax
Expression:
AssignmentExpression
Expression, AssignmentExpression
forのExpressionにはカンマ演算子が使えることを確認しました。
やはりカンマ演算子ですね function plus(a){
return b => a + b;
}
function square(n) {
return n * n;
}
function compose(...fs) {
return x => fs.reduce((y, f) => f(y), x);
}
[1, 2, 3].map(compose(plus, square));
うん、これで解決だな! [1,2,3].map(v => (v += 2, v * v));
最初のイテレーションで仮引数vに1が代入されたのち、v += 2することが副作用かどうかと、
それが副作用でも関数外に漏らしてないから問題ないのとは別の話では? だーかーら、マヌケってだけだろー
(>>848より)
> A, Bと書くとき、Aに期待できるのは副作用のみである。
↑に対して
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ >>888
> for(var VariableDeclarationList;Expressionopt;Expressionopt)Statement
ここは読んだか?
Expression の中に VariableStatement があったか?
VariableStatement の中に Comma Operator があったか? 結局[1,2,3].map(v => (v += 2, v * v));のv += 2は副作用なの副作用じゃないの?あくしろ >>891
「代入=副作用」の認識だから、代入出来る事に気が付いても副作用で使えないと思ってるんだろ >>889
最後のplusじゃなくてplus(2)の間違い。すまんこ やっぱり変数宣言は特別なんじゃん
さっき勉強してから書けとか言ったやつ出てこいよ >>888
そもそも、その Expression だと
for (i = 0, j = 9; i <= 9; i++, j--) になるでしょ?
"var" という文字はどこから出てきたの? で結局[1,2,3].map(v => (v += 2, v * v));のv += 2は副作用なの?副作用じゃないの!!?? >>894
> VariableStatement の中に Comma Operator があったか?
ないから、VariableStatement ではないということ >>900
代入は副作用ではない
再代入は副作用である
再代入を避けて代入だけにすれば
副作用はない >>901
悪いけど以下の(ア)に入るのは1か2か答えてくれる?1か2の一文字書くだけだから出来るよね?
[1,2,3].map(v => (v += 2, v * v));
のv += 2は(ア)である
1. 副作用である
2. 副作用ではない >>902
その一文に対しては「VariableStatement のカンマはカンマ演算子ではない」が正しい
君の一文を証明する事実は「Expression の中に VariableStatement がない」
従って、>>888の論理は成立しない やっぱり変数宣言は特別なんじゃん
さっき勉強してから書けとか言ったやつ出てこいよ >>904
Wikipediaの2つの成立条件を考えれば、2. は迷惑だろ × 2. は迷惑だろ
〇 2. であることは明白だろ >>907>>908なるほどありがとう!
ではJavaScript質問スレ民の総意として、
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました!
めでたい。早速Haskellスレに貼ってくりゅ! >>904
だから"再"代入だから副作用だっていってるだろ
それに対して、代入すべて副作用だって言ってるバカが居るから
一回しか行わない代入(つまりconstが使える場合)は
副作用じゃないって話をしてるんだが
その説明をしないと、お前がバカになりそうだからな
(代入は副作用っていったーって騒ぎまくりそうだからw) Numberで(値渡しで)考えるからおかしくなる
const xs = [[1], [2], [3]];
console.log(xs);
const ys = xs.map(v => (v[v.length] = 2, v.concat(v)));
console.log(xs);
これでわかるだろ >>911
v[v.length] =2よりv[0] +=2にするべきだったな、ごめん >>910
では、再代入が副作用の性質を持っている事を証明する実証コードを書いてくれ 逆。副作用とは何を意味するか?の答えの一つが"再"代入 >>917
うん。再代入しても副作用の性質が現われてないよね。 >>911
それは「参照の値渡し」のことだな
オブジェクトのプロパティ操作が問題で再代入は関係ない >>919
関数の中では副作用の性質が現れてる。
関数を抜けると消えるってだけ >>921
で、それはどんな仕組み?
ガベージコレクションのことをいってるの? この質問者置いてけぼりでズレた議論かますのいかにもここの住人ぽいな 「2. 他のいかなる機能の結果にも影響を与えない」の意味を理解しようともしないで、「代入=副作用」で思考停止しているだけ >>924
ローカル変数は内部変数なので、「2. 他のいかなる機能の結果にも影響を与えない」 >>926
だから関数の外部には影響がないが、
内部(関数の中)では影響が出てるって>>921で書いたろ
お前俺のレスに周回遅れしてるぞ >>927
内部的動作なら副作用はない、って何度もいってる >>928
だから内部では影響出てるって言ってる
省略するんな >>929
だから、その動作は副作用ではないって何度もいってる
定義を妄想すんな > だから、その動作は副作用ではないって何度もいってる
その根拠は?何処かで誰かがそう言ってるの? [1,2,3].map(v => (v += 2, v * v));
最初のイテレーションで仮引数vに1が代入されたのち、v += 2することが副作用かどうかと、
それが副作用でも関数外に漏らしてないから問題ないのとは別の話では?
ちなみに>>907>>908のお陰で
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました! 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>932
> プログラミングにおける副作用(ふくさよう)とは、ある機能がコンピュータの(論理的な)状態を変化させ、
> それ以降で得られる結果に影響を与えることをいう。代表的な例は変数への値の代入である。
って書いてますね。これが答えですね。 誰かさんって>>847のことだな。
しれっと>>844が持ち出したことにしてるけど>>844そんなとこ触れてないw >>934
さすがwikipediaウソばっかり!信用できないな! >>934
だから、それは後ろの方に書いてある破壊的代入のことじゃないのか?
しかも、その一文だと再代入どころか代入全てアNGと受け取れるが、再代入だけNGとしたのはどうしてなんだ?
参照代入なら分かるが、JavaScriptで他に影響がある再代入なんてないだろ? Wikipediaの件は>>875が補完してくれているのに 他板まで荒らしに行くとかやべーな
一昔前は毛の壁に目を付けられてたし、jsにはそういうのを惹きつける何かがあるんだろうな >>937
あのな? 「今回の例では問題ない」は副作用じゃないことの理由にはならないんだよ
> [1,2,3].map(v => (v += 2, v * v));
これじゃなくて
v += 2 だろ?
v += 2 に副作用があるかどうかだろ?
あるんだよ。 >>935
俺はURLを貼った>>844が発端(844がWikipediaを信頼したということ)だと思っているが、誰が持ち出したかなんてどうでも良くね?
ソース提供者の名ぐらいいくらでも譲る >>875が正解だと思うけどねえ
英文アレルギーの人はこれだから困る まとめ
カンマ演算子につき、
A, Bと書くとき、Aに期待できるのは副作用のみである。
カンマ演算子が取れるのは式(Expression)のみである。
変数宣言(VariableStatement)は宣言であって式ではない。
すなわち、
const a = 1, b = 2
は変数宣言であり、
またこのカンマはカンマ演算子ではない。
[1,2,3].map(v => (v += 2, v * v));
のv += 2は仮引数vを書き換える副作用である。
カンマ演算子は式(Expression)しか取れないので、副作用なく
[1,2,3].map(v => (const w = v + 2, w * w))
などと書くことはできない。
なぜならconst w = v + 2は変数宣言(Statement)であって式(Expression)ではないからである。
カンマ演算子を使わず
[1,2,3].map(v => {
const w = v + 2;
return w * w;
})
と書いたときはどこにも副作用がない。カンマ演算子もどこにもない。 まとめ
> カンマ演算子につき、
> A, Bと書くとき、Aに期待できるのは副作用のみである。
a = 1, b = a のような書き方ができるので間違い
単に A, B で Aの部分で代入ができることに気づいてないマヌケってだけ >>945
そのカンマが(変数宣言ではなく)カンマ演算子である場合、a = 1もb = aも必ず代入であり副作用。 >>948
だよな!こうすればいいんだよな!
[1,2,3].map(v => (const w = v + 2, w * w))
あ、あれ?(TдT) >>875のソースはこれかな
https://en.wikipedia.org/wiki/Side_effect_(computer_science)
5chの匿名意見よりもこっちを読んだ方がいいと思うよ >>950
あなたが土屋太鳳に挿れられないように、そこには式(イケメン)しか入れられません。カンマ演算子は式しか取らないから。
宣言(お前)は挿れられません。 >>953
どれどれ?
> One common demonstration of side effect behavior is that of the assignment operator in C++.
> For example, assignment returns the right operand and has the side effect of assigning that value to a variable.
なるほど。
すぅーっ…
代入は副作用ーーーッ!!
source:
https://en.wikipedia.org/wiki/Side_effect_(computer_science)
Thanks to >>953 まとめは>>953で十分だな
自分の知識の再確認だったが、日本語Wikipediaよりも確かに分かりやすかった >>957
代入が副作用なわけあるか。英語版Wikipediaも間違っている。 >>957
C++の代入が副作用と言ってるだけでJavaScript代入は副作用なんかじゃないから。やっぱwikipedia信用ならない。 >>957
また、脳内パーサが狂って、脊髄反射で代入全てが副作用と思い込んだな
学習しない奴だ >>959
いや、よく読めよ
>>875がポイントとなる一文を抽出してくれているだろ
Example side effects include modifying a non-local variable, modifying a static local variable, modifying a mutable argument passed by reference, performing I/O or calling other side-effect functions.[1] >>961
[1,2,3].map(v => (v += 2, v * v));
のv += 2はどっちかな?
答え:
v += 2は、
・式全体としてv + 2の評価結果を返す主作用と、
・その値をvに代入するという副作用を持つ。
式v += 2、式v * vとカンマ演算子からなる式(v += 2, v * v)は、v += 2の主作用は捨て、副作用により更新されたvの値を用いv * vの評価結果を返す。 >>957
お礼は>>875にいってくれ
俺は英語版Wikipediaを探しただけだ
いずれにしても、”in C++” が目に入らずに迷走しているようだが >>957の訳
> One common demonstration of side effect behavior is that of the assignment operator in C++.
副作用の振る舞いの一般的なデモとしては、C++の代入演算子があります。
> For example, assignment returns the right operand and has the side effect of assigning that value to a variable.
例えば代入は右オペランドを返し、かつそれと同じ値を変数に代入するという副作用を持ちます。 >>966
わざわざC++って言ってるってことで気付かないか?
JavaScriptでは副作用じゃねーんだよ!!!
バーカ!w >>834の読解能力の低さがまた露呈してしまったな >>960も指摘してくれているんだけどね
この人、都合の悪いところは読み飛ばして、都合の良い部分だけ読むから、日本語でも通じないんだよね >>968
だなw
[1,2,3].map(v => (v += 2, v * v));
でv += 2の副作用なんて使ってないというのに。
C++じゃあるまいし。 以上ここまで
今まで極狭義で都合のいい使い方しかしてなかったやつが
本来の意味を知って焦ってるの図でした
情報学科行けば習うことなのにね JSの場合valueOfなんかがあるから関数単位で副作用なしを保証するのは難しいんじゃないか? スレに、Ruby 禁止とか、jQuery, Lodash 禁止などを入れて、
スレ立てしてる奴は、荒らし!
そいつは他言語を理解できないから、禁止して荒らしくる
普通のプログラマーは、5言語ぐらい使えるのが普通。
荒らしは、働いてないニートだろ >>977
レス乞食はいい加減やめよう
みっともないぞ >>977
他言語を理解できないのはお前だろruby キチガイ死ね。 >>977
だったらrubyスレは多言語歓迎だと宣言してよ
5言語の話題が乱れ飛ぶぐらい問題ないんでしょ んまぁモダンな俺はvue、nodeの話がしたいんだがねぇ
一応ここのレベルに合わせてるけどw それぞれスレあるんだが?w
検索もできないとは大した高レベルだことw
それとも質問スレで初心者相手にイキるのが生き甲斐のおじいちゃんかなw >>981
日本語読めない韓国人だろ
さっさと国へ帰れよ >>982
>>983
バカコーダーがイキっててワロタ
生JavaScriptを一生書いてろよレガシージジイ おじいちゃん「ジジイ!」
口の汚いおじいちゃんだことw 質問スレは特定のライブラリやフレームワークの布教スレじゃないのに
まるで前提条件であるかの様に回答する奴が居るから困ってるんだけど >>987
無視が一番だが、質問者が反応してしまうから、そこに齟齬があると反応せざるを得ない奴だな 最近jsをやり始めたんだが、メモ帳でhtml,cssが動くのに驚いていたらjavascriptもできて感動してる。 ideいらないじゃん?
これってメモ帳がすごいのかjavascriptがすごいのかもうわからない。 >>996
IDEがプログラムを実行してると勘違いしてる さっぱりわからん
メモ帳でhtmlやcssが動くとかjavascriptができるってどういう意味だ?
ソースを編集できるっていう意味か? このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 78日 3時間 18分 24秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。