+ JavaScript の質問用スレッド vol.135 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです ■FAQ
◆開発者ツール(Developer Tools)の基本的な使い方
▼諸注意
- 本説明では Google Chrome の開発者ツールの名称に従います。他ブラウザで使う場合は適宜読み替えて下さい。
- Edge- でコンソールを使うには予め開発者ツールを起動しておく必要があります(開発者ツールを起動しないと console.log() が機能しません)
- Safari はデフォルトで開発者ツールが無効な為、有効に設定する必要があります。
https://developer.apple.com/library/safari/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html
▼要素を検証
1. ページ上で右クリックして [要素を検証]
2. [Elements] パネルが開き、対象のDOMノードが選択される(選択対象が目的の要素でなければ [Elements] パネル上で選択し直す)
3. 右側のサイドバーから知りたいステータス名のタブを選択する
- [Styles] タブ … CSSプロパティの指定値を表示 (※カスケードによって上書きされたプロパティは取り消し線で表示される)
- [Computed] タブ … CSSプロパティの算出値を表示("font-size: 1em" を指定していても算出後の "*px" で表示される)
- [Properties] タブ … 選択したDOMノードのプロパティを表示
▼コンソール
1. JavaScript コード上で console.log('Hello, World!'); と入力
2. [Ctrl] + [Shift] + [I] キー(IE は [F12])で開発者ツールを開き、[Console] パネルを開く
3. [Console] パネルに "Hello, World!" と表示される
(※window.alert() は String 型に変換されますが、console.log() は Object 型の中身をそのまま表示してくれます。) ■FAQ(続き)
◆JavaScriptの実行速度
JavaScriptの速度は「ブラウザ名」「ブラウザのバージョン」「PCスペック」に依存します(ブラウザのバージョン毎に最適化具合が異なります)。
速度の疑問解消の為に http://jsperf.com/ (githubのアカウントが必要です)にコードをUPしてブラウザ毎に速度計測する事を推奨します。
例外として、仕様における理論上の速度が明確になっている場合があります。
例えば、正規表現によるマッチング処理を考えた場合、「RegExp#test > RegExp#exec > String#match」は ES5 仕様で保証(要出典)されています。
ES5 仕様において RegExp#test が最も処理数が少なく、String#match が最も処理数が多いことが明確だからです。
ブラウザによっては RegExp#test の最適化が十分でなく、String#match の最適化が RegExp#test より十分であれば逆転する可能性はありますが、各メソッドの最適化が一律であればこの前提が崩れる事はありません。
■各種仕様
◆ Standard ECMA-262
http://bclary.com/2004/11/07/ (ECMAScript 3 HTML版)
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/ (ECMAScript 3 和訳)
http://www.ecma-international.org/ecma-262/5.1/ (ECMAScript 5.1 HTML版)
http://tsofthome.appspot.com/ecmascript.html (ECMAScript 5.1 和訳)
http://www.ecma-international.org/ecma-262/6.0/ (ECMAScript 6 / ECMAScript 2015)
http://kangax.github.io/compat-table/es5/ (ECMAScript 5 compatibility table)
http://kangax.github.io/compat-table/es6/ (ECMAScript 6 compatibility table)
◆ HTML Standard (HTML5)
http://www.whatwg.org/specs/web-apps/current-work/multipage/
http://momdo.s35.xrea.com/web-html-test/spec/WD-html51-20130528/Overview.html (HTML5.1 部分訳)
http://www.hcn.zaq.ne.jp/___/WEB/WebStorage-ja.html (Web Storage 和訳) 前スレの977の方ありがとうございました。
仕様上できないのですね。
残念です。 装飾はいくらでもできるけどここはJavaScriptスレだからスレチ 前スレの、>978
<div id="div-a">
<input type="text" id="text-a" value="あいう">
<input type="text" id="text-b" value="abc">
</div>
var input_elems = $.map( $('#div-a > input'),
function(elem, index) {
return $(elem).attrAll(); // this === element
}
);
Cookies.set( 'input', input_elems ); // 設定
obj = Cookies.getJSON('input'); // 取得
console.log( obj );
結果
id: "text-a", type: "text", value: "あいう"
id: "text-b", type: "text", value: "abc"
Cookie のライブラリは以下を使っています。
js-cookie/js-cookie
https://github.com/js-cookie/js-cookie
$.fn.attrAll は、以下のブログで定義されています。
要素の属性を全部取得する
https://hokaccha.hatenablog.com/entry/20130819/1376895914 特定の <div> のなかの <input> の状態を全部sessionStrageに保存して
あとでそれを再セットするって input の数や種類に依存せずにかけませんか?
div にも input にもユニークな id が振られてます
input.type は今の所 text select と checkbox だけです
native js でも jQuery でもいいです >>9
前スレの>>978じゃないけど、
要素の属性取るならそんなプラグイン使わないで
jQuery標準の $.serialize か $.serializeArray を使えば良いんだよ
<form>要素以下になくても使える
今回の場合はserializeArrayの方が使い勝手良いかな?
https://api.jquery.com/serialize/
https://api.jquery.com/serializeArray/
で、実はそんなのは簡単で、面倒なのはこっち
> input.type は今の所 text select と checkbox だけです
フォームの中身を全て保存して戻すってのは
以前に実装したことあるけど、
typeみてselectだったら〜checkboxだったら〜みたいな
コードを書いた記憶がある。意外と面倒くさい inputのtypeでselectってなんだ?教えてクレヨン
input type="file"があったら面倒なことになりそうな
そうでもないか? あー、でもidで見分けるのか。inputっていうからnameで見分けるのかと思った
var data = {};
$(":input").each(function() {
switch(this.type) {
case 'checkbox':
data[this.id] = this.checked;
break;
default:
data[this.id] = this.value;
}
})
データをかき集める所はこんな感じかな
idでユニークになるならserializeArrayみたいに配列で持たなくていいね。
ちなみにmultipleなselectには対応していない
こんな風にtypeを使って見分けることになるんで
> input の数や種類に依存せずにかけませんか?
に関しては、書けません。というのが答えになる。 >>15
時間の無駄。わかってる結論へ至る道はお前1人で勝手に進んでろ >>11
serializeArray は、送られる属性が少ないし、
successful controls しか送られていない
使いどころが難しそう 送られる属性ってなんや?
フォームのGET・POSTで送られる情報の
全てを網羅してるぞ? serializeArray を使うなら、name, value を使うように統一しないといけない。
type, id が無いから、使いずらいかも
input.type には必ず、text, select, checkbox を指定しておけば良いかも serializeArray を使う場合、type, id が無くても、
name, value を使って、name がユニークなら、コントロールを特定できるのか formだと既存のjsコードと衝突したらかなわんし
ほぼ同一のformが複数あるなんてしょっちゅうあるから
汎用性なんて考えない方がいい気がする <select name="single">
<option>Single</option>
<option>Single2</option>
</select>
select は、input タグじゃないのか >>16
分からない場所に突き進む道を選ぶのね、ご愁傷様 九州は汲み取り式とか四国はベルサイユ宮殿式とかそういうのがあんの? 雑多な要素を後から保存するのは無理がある
データの作成・保存はカスタムエレメントで閉じておくべき
例のvalueの問題はinputやtextareaを継承してonchangeで見てもいいが
contenteditableとして要素ごと作ればobserveも統一できるし見た目の調整もやりやすい >>26
正しい仕様を確認するための質問を無視する→理解の放棄 >>15
HTMLはその場合の操作も定義されている
>>The type attribute ...... the invalid value default are the Text state. >>33
そりゃそうだが、将来的にtype属性値の種類が増えるかもしれんし、わざわざ不正値を指定する理由はあるまい まだ到着してなかったのかよw
俺は最初からわかってる結論へ至る道の到着点にいるぞ?w selectボックスで、10番目の要素を自動的に一番上までスクロールさせる方法ってありますか? /::::::::ソ::::::::: :゛'ヽ、
/:::::::-、:::i´i|::|/:::::::::::ヽ
/::::::,,、ミ"ヽ` "゛ / ::::::ヽ < 一億総活躍
/::::::== 卍 `-::::::::ヽ
l::::::::/ .,,,=≡, ,≡=、l:::::::l /. ̄) 英訳は「Promoting Dynamic
|:::::l゛ .,/・\,!./・\ l:::::::! / /二、.
|`:::| :⌒ノ/.. i\:⌒ |:::::i 丿 Y .i Y Engagement of All Citizens」
(i ″ ,ィ____.i i i // ( ゝ' ノ ./ /
ヽ i / ■ .i i / ,ゝ-、_)--'-' (全国民の精力的な参画の推進)
l ヽ ノ `トェェェイヽ、/´ /{ ゝ、__ハ|ヘ
/|、ヽ `ー'´ / ィ'/ハ____ハ つまり国家総動員
//l ヽ ` "ー−´/ ////////////ノ
,,ィ''"/// | >< ////////////{///////////
r''"////// ..|/:::::ノ//////////////}/////////Y
////////| /:::::{///////////////{////////// Javascriptのデータ型って先に指定できないのか?
int Number;
とか
string name;
とかは データ型を指定できてたら良くなかったことはたくさんある
例えばここ何年か今までintだったDOMの値が
高画面解像度デバイスのためにfloatになってきる >>43
それは型キャストで解決できる程度の問題かな
floatを返していても型がintだったら自動的に
小数点以下切り捨てられる
むしろその方が想定しない型にならないのでいいかもね >ここ何年か今までintだったDOMの値が
>高画面解像度デバイスのためにfloatになってきる
どういうこと? 4Kとかだとコンテンツ全体表示できるから要素固定して表示するようなソリッドレイアウトよりも
リキッドデザイン的なものに変わってきた、ということでは 2^32-1を超える値扱ってんの?それとも小数点以下の値が来てんの?どこで?ってことなんだけど 一時そういう話があったがここにあるように今はまたintに戻った
https://www.w3.org/TR/cssom-view/#changes-from-2013-12-17
だけどChromeではまだサポートされてて
ズームしてdocumentElement.scrollTopなんかを弄ると分かる
200%以上に拡大すると分かりやすいだろうけど
特に低スピードのスクロール時にここで実際に役に立つことが分かる
http://output.jsbin.com/qedore 別に入ればなんでもいいんだけどいつもvarで型を作って自動でやってるから
Javascriptの基本的な型の作り方はvarなのかなって 朝鮮人みたいに揚げ足とる根性悪い奴がいるな
普段何の仕事してんの?
ニート? 根性悪いやつが居るように見えるのは本人が根性悪いんだろうな 朝◯人と悪口いってる時点で人の屑
ジャップのくせに 「朝鮮人」は今や悪口ではないし
「JAP」は昔は米国新聞でも普通に使われてたただの略語というか日本の愛称だった
たかが三文字の言葉であれこれ思うのも馬鹿らしいよ リアルで朝◯人なんて言ってみろよ
どう言うことになるか分かるか?
リアルで言えない差別用語をネットで
使って吠えてる糞野郎 >>58
意味分からん
中国人
フィリピン人
朝鮮人
普通に使うぞ
変な嫌悪感を持ってるのはそういう学校教育された中年世代だけだろ 【研究】飲むだけで差別主義者が更生する「道徳ピル」
>米国では、多くの学生が成績向上や適性試験をパスするために、リタリンを治療以外の目的で服用しているとの報告がある。
差別主義者は薬物でも服用させなければ駄目だな
市ぬかもしれないが生きてても仕方ない奴らだからどうでもいいわ 知能が低いと複雑なことを考えられないから
極端な白黒思考になる
これが差別主義者
道徳ピル飲んで知能を上げるしかない
薬害で市んだら害虫が一匹消えたという事でそれはそれでおっけ DOMは仕様がコロコロ変わる
だからその違いを吸収するライブラリが必要になる 逆だな
原則DOM標準は後方互換性を守る
JSのライブラリはバージョンアップで簡単に切り捨てる
ライブラリを使ってるとむしろ追従が大変になる 自分の引き出しにあんまり実例なくてわからないんだけど
バージョンアップで切り捨てるって旧UAを?だったら旧バージョン使い続ければ良いのでは? uaって?無駄にコンテキストから推測させないでほしい。
あなたは数文字節約できるかもしれないけどこっちはいい迷惑。 >>67
パフォーマンスや新機能のためにバージョンアップしたくても
再設計が必要なほどAPIが大きく変わってることが珍しくないということ
YouTubeのCr以外で遅い問題もPolymerがそうだからYouTubeが追従できないから crって?無駄にコンテキストから推測させないでほしい。
あなたは数文字節約できるかもしれないけどこっちはいい迷惑。 >>66
> JSのライブラリはバージョンアップで簡単に切り捨てる
> ライブラリを使ってるとむしろ追従が大変になる
どのライブラリ? AngularとかReactとかかな?
なんか更新頻度高いしね
その点jQueryは安定していていいよ。
そもそも追従するほどバージョン出てないしw >>69
それ、単にそのライブラリ・フレームワークの設計が杜撰ってことじゃ
その互換性の部分以外のとこも大丈夫なのか?となりそう angularって言うほどいいかな?
偉そうな事言うのは嫌なんだけど
vueやreactの方が絶対いい >>72
杜撰ってわけでなくJS界のトレンドなんだろうな
jQueryみたいに切り捨てられないと(それでも利用度からすれば比較的切り捨ててる方)
負の遺産化するし >>74
jQueryは負の遺産にはならんよ。
DOM操作を短く簡潔にするためだけのものだから
使わないならjQuery1行をそのまま数行に対応付けて書き直せる
冗長になりますよってだけで誰もやらないけどね
負の遺産っていうのはAngularやReactなどの
最近のフレームワーク。違う書き方にしようとしたら
全体に手を入れなければいけない フレームワークは離脱するには設計から構造からやり直さないといけない
jQueryのようなライブラリは設計構造はそのままで済む場合が少なくない(※)が使用部分が広範になりがちで書き直し量が多い
※例えばアニメーション関係をjQueryに頼っていると構造にも絡んでくる
独特な機能を提供するライブラリは関係部分だけ書き直せば済むといえなくもない フレームワークで作られるのは迷惑。
意識高い系の人がフレームワークで使って作ったサイトをサーバに乗せるのに凄い苦労した経験あり。 jQueryで唯一評価されるのはSelectorsAPIの基礎になったってことだけ element.style="width:100px;background-color:green;";
でいけたんだけど、element.style.width="100px"みたいにプロパティと値をわけて書くのと何か違いはありますか 可読性がよくないぐらいでは
element.setStyle({
"width": "100px",
"background-color": "green",
});
とかがあればいいな
prototypeいじりたくないけど >>79-81に便乗質問なんだけど
・element.styleにはCSSStyleDeclaration オブジェクトが入ってる
・element.styleに直接CSS定義テキストを代入できる
・element.styleに直接CSS定義テキストを代入した直後でも
element.styleにはCSSStyleDeclaration オブジェクトが入ってるし
element.style.width を変更することもできる
CSS定義に変更があった場合変更内容を元にelement.styleを再設定してるという感じだと思うんだけど
こういう挙動はどう理解したらいい?
より具体的には、ブラウザの実装がそうなってるというだけなのか
それとも同じような挙動をユーザがjsコードで実現できるのか >>81
Object.assign(element.style,{
width: "100px",
backgroundColor: "green",
})
>>82
内部Proxyだと理解したら良い >>78
SelectorsAPIなんてjQueryの劣化版だろw
単にNodeListを返すだけで、そのNodeListを扱う方法まで作らなかった
jQueryはNodeListみたいに単に要素の配列を返すのではなく
要素の配列を内包した、jQueyrオブジェクトを返すことで
要素の配列そのものをメソッドで操作できる
ここが重要な所なのに、SelectorsAPIはそれを理解せず
単に要素の配列を返しただけ jQueryはいつgetContextに対応してくれますか
あとマウス座標取得決定版みたいなのも欲しいです
$(event)みたいにできたらいいのにな >>83-84
thx
あるんだな・・・意義はわかんなくはないけど正直どうかと思うが・・・
あとでじっくり読んでみる >>86
getContextに対応するだけでいいの?
canvas自体に対応しないとあまりメリットなくない?
jQueryになれてるなら、D3.js を使うのが良いと思う
canvas操作をjQueryライクに書くことができる
俺も普段はjQueryを使うけど、canvasを操作したい場合はD3.jsを使うよ
こんなk何時
https://codezine.jp/article/detail/7459
> D3.jsのセレクタを用いて宣言的に記述すると、以下のように簡潔に記述することができます。
> d3.selectAll("p").style("color", "white");
> コードも、d3.selectAll("p")ですべてのp要素を取得、style("color", "white")で
> 文字色を白に設定、と直観的で分かりやすくなったのではないでしょうか。 >>86
> $(event)みたいにできたらいいのにな
$(window).on('mousemove', function(event) {
console.log(e.screenX);
console.log(e.screenY);
console.log(e.pageX);
console.log(e.pageY);
console.log(e.clientX);
console.log(e.clientY);
console.log(e.offsetX);
console.log(e.offsetY);
}); あ、間違った。
× console.log(e.screenX);
○ console.log(event.screenX);
以下同じ >>87
今だったらもしかしたらゲッターセッターになるのかもしれないけど
それらがJSに無かったころからCSSOMはあるしね
配列のlengthのようなものだよ array.lengthはちょっと違うのでは
array.lengthを書き換えても即座に自動的に書き換えられたりしないだろう するよ
TypedArray の様にゲッターやセッターではなく
プロパティアクセス時に0や1などと同等にフックして内部プロパティを変更してる JavaScriptって最近、変数に型つけたり、クラスを作ったりするらしいけど
もはやそれActionScriptじゃねーの? >>94
昔ES3(ECMAScript 3)っていうのがあって、その後普及したのがES5
今はES6という名前だったのがES2015に変わって、ES2016だとかES2017だとか・・・
それは良いとして、ES3とES5の間にあったのがES4
ES4の夢は壮大で、クラスベースで型もあって・・・
そのES4に完全準拠することを目標にActionScriptは開発されていた
ところがES4の夢があまりにも無謀で破綻した。
そして型などの機能を減らして現実的にしたES5ができた
ActionScriptは破綻したES4相当なんだよ。消えたES4の成れの果て
JavaScriptに準拠しつつ型を取り入れたのはTypeScript A → B → C → D
とasync関数が繋がってるのをイメージしてください
Aから始まりEが完了すれば順にC、Bと完了してAに戻ってくるイメージです
ここで、Dの段階でBからの流れをやりたいとします
しかし、Dの次にBを続けると、
それまでのB → Cの流れの中で消費されているメモリが残ってしまいます。
もうDや過去のCやBに戻らせる必要はありません。
しかし、Dを開放してB'を開始すると、Aまで完了してしまい、それはよろしくありません。
A → B → C → D
まで来たところで
A → B → C → D → B' → C' → D'
となるのはメモリリークしやすく、チェーンが非常に長くなると色々なバグも発生しやすく
デバッグのしやすさにも関わってくるので避けたいです
とはいえ
A → B → C → D -...> B' → C' → D'と切り離すと
Aで行っている初期化・完了・例外処理から外れていってしまうため問題です
理想的には、チェーンをA → B' → C' → D'
とつなぎ直したいのです
どうしたらよいでしょうか 設計段階でみょうちきりんな動きの要求を加味しとけよ 仕様としては、どの処理進行状態でもリセット、ぶつ切り行為が発生しうるという状況です
一応今はBで作業キューを持ってそれにCを追加する形にしていますが、
いかんせんコードがキレイではありませんし、僅かな仕様妥協が入ります
おそらくPromiseのラッパー的なとこから、根本的な非同期チェーン構造を
素朴なPromiseではなく1から考え直して別の物にすべきだと思うのですが
いいアイディアは無いでしょうか
全てのasync、async generator関数でCancelの概念と実装をしたら良いのでしょうか
全てのawait時にそれがCancelかどうかチェックして処理をするとか
それはそれで漏らせないコードが多くなりそうですし、処理が複雑になりそうです
一応今は各処理にセッションを渡すようにしていて、表に影響がある処理ではそのセッションが切れていたら何もしないことで、
特にイベント等から繋がる不要なチェーンが発動しても空回りさせることで影響がないようにしています
今はメモリの開放は時間経過やイベントをあえて見捨てたチェーンに伝わらせて
空回りを利用して自然と勝手にほぐれて、その後GCが回収してくれることに頼っています
しかし、今回は下手に空回りもさせたくないという状況です
コードを極力シンプルに保ちながらしっかりしていてかつ柔軟性も持った非同期処理構造を作るにはどうしたらよいでしょうか
例えば非同期でも、場合によっては完了を待たずに次に進みたいことってありますよね
例えば、Loadingを表示するとき
await View.fadeInLoadImage()
let file = await Network.fetchFiles( )
await View.fadeOutLoadImage()
とするとフェードイン、アウトの時間が無駄なので
View.fadeInLoadImage()
let file = await Network.fetchFiles( )
View.fadeOutLoadImage()
とすると思います。ですが、このフェードが動いているときに
コンテキストがリセットされると、色々懸念事項が生まれます
そういうのもスマートに扱える方法を知りたいです 真面目に言うと
・開示されたごく一部だけで単純な仕様ではないことがわかるのに
・全貌の情報なしに
・コードがきれいかどうかや柔軟性など曖昧な要求を回答できる人間はいない >View.fadeInLoadImage()
>let file = await Network.fetchFiles( )
>View.fadeOutLoadImage()
>とすると思います。
let file = await Network.fetchFiles( )
だけやればいいじゃん馬鹿なの >>101
具体的な細かな話は気にしなくて結構です
私が知りたいのは、皆さまが一般的にこういう問題を抱えないために使っている
オススメTask系のフレームワークだったり、普段意識してる設計パターンについての話です
コードが綺麗とか柔軟とかいうのも、厳密に定義しようとしてもらわなくて結構です
そこは私がどう感じるかではなく、皆さんが素直に自然と良いと思ってる手段を知りたいと言うだけです 安全な近道なんて無い
> しかし、今回は下手に空回りもさせたくないという状況です
下手に空回りさせないように地道に書けとしか
F/W信奉者にありがちだが解決してくれる何かを探すのを止めてみるべき >>103
質問が意味わからん。最初にasyncって決めつけてるのが駄目なんじゃないの?
asyncは実装なんだからそれを使うと決めるのは最後。
実装の話は忘れて、何がしたいのか綺麗にまとめたら?
あんなごちゃごちゃしてたら読む気にもならんよ AとかBとか処理があるんだろ?
function process() {
A();
B();
C();
D();
B();
C();
D();
}
普通に書けばメモリリークにもならんし、
何が言いたいのかさっぱりわからない。
ここを出発点として、何が言いたいのかをまとめろ。 あとから動作仕様変えても処理順や状態に起因するバグを起こさないパーフェクトなフレームワークはなんですか
一行にまとめるとこんなかんじ? いまいちよくわからんが
なんかデータ読んでる最中に(let file = await Network.fetchFiles( ))
フェードイン/フェードアウトみたいなことしてるんだけど(View.fadeInLoadImage())
読み込み中止ボタンを追加したいんだが(Cancelの概念と実装)
そんなときどうしたらいいの
って質問なんだろうか? そういう処理を自分で書くのは面倒だから嫌だそうだ
>全てのawait時にそれがCancelかどうかチェックして処理をするとか
>それはそれで漏らせないコードが多くなりそうですし、処理が複雑になりそうで
自分で細かく書かなくてもうまいことやってくれる何かが
希望のようだが、それをハッキリと書かないところをみると
フレームワークやライブラリ推しの書き込みの準備行動じゃねーかな >>104
地道に書くのは良いのですが
この先あちらもこちらもその場その場に書いていくと
メンテ面とか手に負えなくなって破綻してしまうかもしれないので
まだ取り返しの付く段階で場合によっては基礎システムを1から挿げ替えたほうが良いかもと思った次第です
>>105
現在Workerも使った大きく分けて十種類程度のタスクモジュールがあり、その中の関数の殆どが非同期もしくは並列に動いている状態です
最初はコールバックでも良いような規模で、その後async関数に切り替え、途中から自作イベント管理を追加し。。。。。。
という感じで大きくなるごとに対策してきました。
もう次に何かするなら、それで最後まで行きたいので相談させてもらっています
>>106
それで直ちに問題が会って動かなくなるというわけではないのですが、そうしたくないいくつの理由があります
・AからDまでの生存期間がそれなりに長い(ユーザーの操作次第、通常数分〜数時間程度)
・BからDまでは無制限に繰り返される可能性がある(ユーザーの操作次第)
・BからDまでで大量のリソースを使い得る(通常数十MB〜数百MB)
また沢山イベントハンドラやフックが残ったままになるのが気持ち悪い
(BからDまでが終われば生きた参照が無くなるのでGCによって自然と開放される) >>107
その通りですが、最初は問題なかったけれど複雑度が上がって無理が出てきた現状を
改善できる今より一歩上の非同期取扱概念(コツ)を知りたいと言うだけです
例えばPromiseにしてもCancellableだったりCancalTokenだったり
async generatorの代わりにObservable系を使うという手もあると思います
そういうちょっとした変更やラッパーで乗り切れるのではないかと感じています
>>108
それは例です。実際はそういうコードはありません。
メインの質問は>>97です
その例で言いたいことは、フェードアウト処理が例えば大げさに10秒かかったとします
そしたらその間にもう画面がローディング画像のフェードアウトをしていて欲しくないものになってる可能性もありますよね
1つの考え方としてはView.fadeOutLoadImage()にキャンセルできる関数を返させて、
それを関数の最後まで保持しておいて呼ぶとか考えられます
実際にそういうことをしているのですが、変数の局所性が悪くなってコードが読みづらくなります
また、その関数の終わりまでしか引き伸ばせません。もう少し先までで良いという時はイベントに登録したり煩雑になってきます。
今は場合によってはキャンセル手段を返させたり、イベントを監視させたり、セッションを確かめさせたり色々やっていますが
いかんせん一貫性がないので、その点も合わせてもっとステキな方法があるのではないかなというための例です
>>109
また自分で思いつきで書いても良いのですが、私だけのコードではないので
将来メンテする人のために少しでも良い方法を知りたい感じもちょっとはあります async関数が繋がるってのがまず分からない
サンプルコード位は出せないの 頑張って説明してくれてるんだろうけど
俺の頭では理解できない
後は頼んだ >>112,113
繋がると言うのは
async function A ( ) { ...... await B( ) ...... }
async function B ( ) { ...... await C( ) ...... }
async function C ( ) { ...... await D( ) ...... }
のときA( )と呼んでからD( )まできた状態です
Dが解決しないとCが進みませんし
Cが進んで終わり解決しないとBが進みませんし
Bが進んで終わり解決しないとAが進まない状態です
問題はここでDから仕切り直してまたB'を呼びたいというときです
感じとしてはAがOSの起動、Bがブラウザの起動、Cがページの起動、Dがその中のプログラムスクリプトだと思ってください
OSはブラウザを起動し、もし終了したら自信も終了するよう計画します
ブラウザはページを起動し、もし終了したら自信も終了するよう計画します
ページはスクリプトを起動し、もし終了したら自信も終了するよう計画します
今したいこととは、DがB'、つまりスクリプトが新しいブラウザウィンドウを立ち上げようとしている状態です
ここで、他と同様にスクリプトがそのブラウザウィンドウの終了を待機したとしましょう
ブラウザウィンドウが無数に増え得てまずそうですよね
それでは、スクリプトがブラウザウィンドウの終了を待機しなかったとしましょう
この場合はスクリプトの処理が終わり、芋づる式にページ、ブラウザと終了します
そこまでは良いのですが、それに続けてOSも終了してしまうことになり、これは問題です
なので今取っている対策としては、Bにタスクを登録できるようにするということで、
つまりブラウザをタブ化して1つのインスタンスとし、全てのタブが閉じるまではブラウザが終了しないようにしています
それで上手く言ってるのですが、このような工夫をしないといけない箇所が段々増えてきており
危機感を感じているという次第です >>110
お前は自分が賢いと思ってるつもりの馬鹿だよ
基礎を何もわかっちゃいねぁ
>>106を読んで理解できてないだろ?
function process() {
A();
B();
C();
D();
B();
C();
D();
}
このコードでな、Aの中のコードの生存期間は、
Aが呼ばれた時に始まり、Aが終了すると消えるんだよ
B〜Dも同じ。お前のように長い生存期間のものなんて一つもない >>113
わかるわけがない。
こいつは、基礎から大幅にずれた理解をしてる。
完全に間違った知識をもとに語っているから
説明全てが的外れ。
そんなのを読んで理解できるわけがないんだよ >>97
>>103
> 具体的な細かな話は気にしなくて結構です
あなたが解決できない原因はこれ。
理屈をすっ飛ばして、結果だけを求めるから理解できない。
ぶっちゃけ、一般的なフレームワークを使ってるという安心感が欲しいだけで理解する気は全くないでしょ?
解決手段は、配列と再帰を組み合わせるだけ タスクでも監視でも、これらの強制途中終了または放置が、予期しない副作用が不具合を起こす可能性をゼロにすることは不可能だろう
将来どんなコードが来るかわからんのだろ
自分でもそう思ってるけど上司の説得材料が欲しいから
こんなに長文を書いて反論で説得材料持ってきて欲しい、ってところじゃないのかね? ちょっと日本語文法おかしくなったがあまり気にしないでくれ チェーンさせるのとworkerで並列動作させるのとじゃ全然事情違くね >>120
>>97は並列動作じゃなくて、逐次動作じゃないの? つーか非同期処理を含む関数を同期的に順次実行することを
チェーン って言うもんなんか? >>122
>>97を読む限り、完了をトリガーに次の処理に移っているように読めるけど、彼は並列処理の意味を理解してるのかね…
そもそも、並列処理なら、Promise.allで十分だろうに なんとなく程度しか理解してないのに再設計を振られた上流SE説 >>123
だーかーらー、
こいつは基本自体がわかってないから
用語も間違ってると考えて間違いないよ
だから難しい用語をなくして、
基本の基本の話からしないといけない
その証拠が >>115 にレスがまったくないこと
このレベルの話から自分が抱える問題につなげることができない
関係のある話だってわかってないから あいつが気にしてるのは、リソースの問題
関数の生存期間の話をしてるのだから
並列処理は全く関係ない話なんだよ。
ようはローカル変数がわかってないレベル
asyncとかpromiseの関係ない話をすると疲れるだけだぞ。
関係ないことを教えるだけで問題解決せずに終わるからな >>115,116
問題は、今回の処理は非同期で繋がっているので、
つまり、そのように並べた状態ではなく入れ子状態になっているということです
お伝い忘れてすみませんが、A->B->C->Dという関係は対等な処理を分けたものではなく
親子関係というか、包括関係と言ったらいいのですかね?とにかくそのようなものになっているのです
例えばDがメニューバーの表示とすると、
B'を再び呼び出す必要があるかどうかはDの動作にユーザーがどう反応をしたかどうかであり
勿論違う処理のケースも有るのでその結果をCで待ちわびなければなりません
実際はもう少し複雑ですが、簡単に書きますと>>114のような関係になっているということです
要するにDは下っ端も下っ端だけど、その特質上特権的な状態変化を起こす可能性があるものということなのです
>>117
私はここ何年かちょくちょくこの非同期の問題をどういう形で解決したら良いかを考えたこともあります
なので皆さんの中でよく考えて持論だったりそういうセンスを習得した人が居るのではないかと思いました
私が聞きたいのはそういう感覚であり、まさか具体的なコードに対する回答が貰えるとは思っておらず、
>>97や>>100で挙げたようなパターンに対して、ビビッとそういうときはこうするもんだという
決めつけたような適当な経験の言葉をいくらか頂けたら刺激として私に取り込もうと思ったところです
なので皆さん、適当でいいので言葉をください
例えば>>115さんは大変参考になりました
関数を小さく分割して入れ子になりがちだけど、もっと整理して単純なものに持っていけるのならそうしようと思います >>118,119
最後の頑張りのための気持ちを高めるためと、問題提起というわけでもないですが、
非同期処理の様々な難しさに対して皆さんがどう思考してるのかを聞きせてほしいということであります
>>123
チェーンというときはだいたいPromiseチェーンを意識しています
>>120,121,124
沢山のことを、直接的に掛けない部分もあり、事実と例えの質問を交ぜて書いた事もあって混乱させてしまいすみません
AからDまでは平行処理ではありません。沢山の非同期関数が同期的に枝分かれ状に呼び出されているルートの内の1つを選びだしたと考えてください。
実際のコードでは平行、並列の部分もありますが、ひとまずそうお考えください 話を単純に戻して整理します
質問A)
皆さんは非同期処理が複雑になってきたらどのような対処を考えますか?
例1) コンテキストが変わると無効になるセッションをほぼ全ての関数に渡して置いて逐一セッション切れを調べるようにする
例2) キャンセルの値や手段を定義してそれを伝播させる(Cancellable Promise)
例3) その合わせ技のようなもの(CancelToken)
その他)
質問B)
>>114の状態で>>97の問題に直面したとき、
要するにいままで繋がってきた流れの中で突然安全にリセットしたくなったときはどうすればいいのか
例1) >>114で言ったように、ブラウザがほぼいつでも安全にタブを閉じれるように、
つながりの根本の方に枝を生やしたり切り落とせるポイントを用意しておく
例2) チェーンにを触れるPromiseをメモリリークを起こさないよう必死に再実装して明示的に切り離すようにする
例3) 生Promise+awaitに頼らない新設計を考える
その他)
質問C)
イベントを使うと不特定多数の直接知らない待機状態の処理を動かせて便利だが、
非同期処理のためタイミングが問題になる場合はどのような工夫をすればいいか
つまり、一方的にイベントを発火するだけではなく、それを全員がきちんと受け取って把握し
必要なら一定の準備ができたというフィードバックを得られるようなイベントシステムをきちんと整備するべきか、
それとも質問Aに書いたようなセッションだったり、今の共有状態変数を準備して対処するか
皆さんはどちらで組まれてるコードがお好きか
また他の場合でも一般に、問題解決のために高度に抽象化仕切ったシステムを作り上げたものと
例えばグローバル変数を1つ使うなどしてでも比較的シンプルに乗り切ったもの
場合によってそれらのスタンスを使い分け混合した状態
皆さんはどのスタンスで組まれてるコードがお好きか 質問1〜3)コードの正確性や安全性の検証に、コードを書くよりも圧倒的に多い工数/人数を費やす
結局、突き詰めると把握できない把握しきれない何かが問題なら
どんな状況でもコード生産速度を優先した途端に必然的に不具合が生まれる
規約が守られているか設計思想に合っているか
確認させる土壌を作るほうがマシ >>129
> 問題は、今回の処理は非同期で繋がっているので、
> つまり、そのように並べた状態ではなく入れ子状態になっているということです
なりません。
少なくともメモリ使用量に限っては関係ありません 入れ子というのはこういうもののことです。
promiseやasyncではこうなりません
function process() {
A(function() {
B(function() {
C(function() {
D(function() {
B(function() {
C(function() {
D(function() {
// do something
});
});
});
});
});
});
});
} >>131
> 皆さんは非同期処理が複雑になってきたらどのような対処を考えますか?
非同期処理も、非同期処理じゃない場合も同じ。
処理を単純化して、その組わせで作る
> 例1) コンテキストが変わると無効になるセッションをほぼ全ての関数に渡して置いて逐一セッション切れを調べるようにする
> 例2) キャンセルの値や手段を定義してそれを伝播させる(Cancellable Promise)
> 例3) その合わせ技のようなもの(CancelToken)
これらは非同期処理が複雑になったときの対処法ではない。
非同期処理かそうかは関係なく、処理の途中で
キャンセルしたい場合に実装すべきこと
1のセッション切れは意味不明。独自用語使うな。
何がしたいのか全く不明 繰り返しになるけど頼むからサンプルコードで示してくれ
長々説明してくれるのは良いけど独自用語が混ざって訳分からん >>132
確かにそうでしょうが、その規約だの設計思想だのも私に委ねられてる状態でして
結局の所、コードが動かないから、不具合が生じているから質問しているわけではありません
ただ少しでも良いコードを残したい、書いていきたいと思った次第で、
私はJSの「良い」コードというのはその時その時代の世界のJSerがどう考えているかで決まると長年思っているのですが
async関数やPromiseが入って2,3年がたった今どのような「良さ」を皆さんがそこに考え出してるのか
その感覚の言葉のシャワーを浴びて私の感覚を少しでも正しい方向に矯正したいというのが正直な気持ちです
>>133,134
言葉に認識の違いがあるのかもしれませんが要するに>>114の形だとお考えください
>>137
確かにおっしゃる通りです 同期と読み替えてくださって構いません
結局私は自分の中でも問題をまとめきれて居なかった上、色々書きすぎて本質を見失っていたようです
大変申し訳ございません
実際のところ、私がこれまで書いてきた問題(>>111など)は全て繋がっていて切り離せないものだったようです
結局私は、非同期『管理システム』、そのパターンを求めているのです 非同期と同期の大きな違いは、非同期は、同期で言う割り込みのように、
ユーザーの操作などによるイベントによる別の処理が途中と言って良いようなところで発生し得ることでしょうか
私は>>114でBで複数のCを待ちわびることで解決したと言いましたが、本当はそれだけではないのです
Cに相当する処理は実際は複数の非同期関数が繋がっているということもありますし、
その中ではawait Promise.race([D(),timeout(42),listen('buttonclick')])のようなものも使っています
ユーザー操作やタイマーや、他所から来たイベント次第でいつどう処理が完了するかは分かりません
要するに、シンプルに考えればDがBにnewC'を登録し、Dが終了すればoldCが開放されるように見えますが
実際はDが終了した段階でCはもうDを待ってはおらず、別の処理を始めているかもしれないです
Dはメニューと例えていたので変かもしれませんので言い換えると、
実際はC5が終了した段階でC4はもうC5を待ってはおらず、別の処理を始めているかもしれない、ということです
なので独自用語でセッションと言いましたが、関数開始時などに渡され、その関数が担当する処理が
未だ有効かどうか分かるオブジェクト用意し、コンテキストが変わるときにそのオブジェクトを無効状態にしておくことで、
そのような「タイミングのズレ」にだいたい対処しています
つまり、私は今基本的に素のasync-awaitを使いながら、時にはイベントを使ったり、セッションを使ったり、
Bのような部分的にタスク管理したり、色々しすぎているので
これを大きくまとめた比較的大規模なタスク管理システムを導入して整理し直すか、
もしくはそこまで行かないが10必要だったその場しのぎ対処が5になるような
比較的ちょっとした共通追加対応策についてのヒントや方向性のアドバイスが知りたいと言うことです
すみませんでした。 >>141
あぁ、わかった
お前に言えることは「余計なことすんな」だ
問題がわかってないお前が決めた所で失敗するだけ
問題が発覚した時に、後から方向転換できるようにしていればいい。
問題が起きたときに、最初に決めたルールは絶対守れと押し付けるはやめろ > これを大きくまとめた比較的大規模なタスク管理システムを導入して整理し直すか、
そんなものはこの世に存在しない
大規模 = 悪 だから覚えておいたほうが良い
つまりお前の発想は間違いに突き進んでる >>143,144
私はこれまでこのプロフェクトを2度白紙にして本当に0から作り直したのですが
この調子で行くと完成と同時くらいに3度目の限界点が来るんじゃないかなと
次の人が必要なら好きに作り直しゃ良いですっかね? 間違いを指摘されて、本当に理解したかはともかく、それを間違いと認められる点は美徳
ただ、「あるはずだ」で質問を延々続行するのはどうかと >>146
反省してないからそうなる
先に問題点を洗い出せ
問題点がわかってなくて反省できるわけ無いだろ
この調子で行くと3度目じゃ終わらないだろうな
反省しないお前のやり方じゃ何度も同じことを繰り返す
要するにお前の能力不足だ 能力不足っていうのは、プログラミング能力だけのことじゃない
不足してるのはリーダーや管理者的な能力だよ だいたい過去2度白紙になった原因は何よ要件変更じゃないの
どんな要件変更にも耐える設計作るのと永久機関作るのとどっちが現実的 >>148,149
それは十二分に承知してる
俺じゃなかったら1回目で済んでる
なんで経験浅い俺に任されたんだ
正直問題点は行の数だけある
流石に3回目なのでなんで動いてるのか分からんようにはなってはいない
でもそれが俺の限界
この先最後の最後に細かなバグに苦しめられることは必死
多分修正しきれる可能性のほうが低いだろう
もう疲れたよ
すみません
質問閉めます
と言っても多分参考になった
頑張る >>150
1回目、2回目は成果物完成間近に根本的問題が避けられないことが分かったが
コードが密結合過ぎて要件大変更に耐えられそうになかった
だから3回目は俺もかなり加わって極力個々を小さく、素に作った
要件変更には強い
だが小さなバラバラに動く歯車を管理するのに限界がきそう >>152
根本的問題って何?3回目スタートのトリガーは何?
>1行目「1回目、2回目は(略)根本的問題が避けられないことが分かった」
ほうほうなるほど1回目2回目は明確な問題があったんだな
その書きぶりだと要件変更のせいで作り直しとかじゃなかったんだな
>2行目「分かったがコードが密結合過ぎて要件大変更に耐えられそうになかった」
は?問題があったから作り直したんちゃうの?
要件大変更は生じたの?それとも未来くるかどうかわからない大変更に備えての作り直し?
無駄な情報を追加してる一方で、必要な情報が不足し整合性がない
日本語でこれ 1回目>設計だけやった
一応なんとか形になったものの解消できないバグが残った
しかも将来の仕様変更に耐えられそうもなかった
バグの対応と将来の仕様変更への不安から設計からやり直すことになった
2回目>設計だけやった
1回目の失敗から設計をやり直したが、最終的な結果は1回目と同じだった
やはりバグの対応と将来の仕様変更への不安から設計からやり直すことになった
3回目>設計だけでなくコーディングにも入った
なんとかバグを解消しつつ想定される仕様変更にも一定程度対応できるようになった
しかし部品ごとの独立性を重視して非常にきめ細かく作り込んだため全体像から細部まで把握するのが至難の業になった
なお1回目から3回目まで通じて仕様変更はなかった
妄想推測と過去レスを元に書くとこんなところか?
密結合を嫌って疎結合にし機能ごとの独立性を重視した結果煩雑になったというならば
>>97や>>100末尾の諸問題は各機能のインターフェースや実装のレベルまで落とせそうなものだが >>130
自分は平行処理なんて書いてないから
そもそも、平行処理って何?並行処理のこと?
並行処理と並列処理の違いを理解してるの?
「並列処理じゃなくて逐次処理じゃないの?」と指摘されてるのに、なんでそっちはガン無視なのよ
専門用語を使えば使うほどボロを出してるから、もっと平易な日本語で書きなよ
知ったかしないで、分からないことは分からないと認めなきゃ先に進めないでしょ? htmlを新しいウィンドウで開く方法ってないでしょうか
window.open(url) はurlを引数に取りますが
window.open('<html><body>Hello!</body></html>');
みたいにhtmlを引数にして新規ウィンドウで開く方法ってないでしょうか あるけどjQueryの話題じゃないので頑張ってくれ >>159
ブランクで開いてからhtmlを設定したらいいんじゃね >>161
一応できて動きました。こんな感じですかね?
function new_window() {
var w = window.open("", "NW");
w.document.open();
w.document.write("<html><body>hello</body></html>");
w.document.close();
}
new_window(); >>129-130
皆、非同期処理のネストの深さに困ったから、
ネストが深くならないように、await が作られた >>159-162
Selenium WebDriver では、ctrl+T キーを送って、別のタブを開いて、
そのタブに移動する、というサンプルがあった 非同期処理についての質問者は、
名前欄に、最初の書き込みの番号を入れてくれ
処理の基本は、all or nothing
A | B | C
というパイプラインがあって、B で失敗した際、A だけが更新されると、
データの不整合が起こり、データの一貫性がなくなる
データベースなどでは、roll back して、Aの更新前に戻す。
中途半端な更新をしたら、絶対にダメ! >>153,154
もうただのおしゃべりになるのであまり自ら事情をバラしたくないのだが、
その問題のために要件も含めて設計を大胆に見直す必要が出たってこと
/*このあと15行ほど書いたが削除した。察して欲しい。*/
>>155
勿論十二分に理解して書いてるよ
だって書く前にググったもの しっかりとね
2chに書いてるんだからそれくらいのことは当然してる
バカにしないで
>>その他のレスの人
アドバイスや意見をどうもありがとう > その問題のために
その問題を自分で理解してないんでしょ? js固有でもないプログラミングの基礎の用語を
書く前にググらなきゃいけない時点でバカにされても仕方ない
1、2回目を限界が来たと書いていたけど
要件定義不備設計不備に由来する不具合が原因の作り直しじゃん ちょっとでもぐぐってたらセッションという言葉の独自定義は避ける >>168
その問題というのは誰が見てもハッキリ分かるもの
度合い問題でもあるが
何を何に変えてそこから何に変えて良くしたか
3段階で解決できるものと言ったら
>>170
たしかになぁ
でも何とも言えんわ
正直言えば1回目で完成ですでも良かったわけだし
仕様はこうです、合わせてくださいってこちらから言える案件だし
つうか目的くらいしか決められてないしどういう機能があるべきかそれほど自明でもないし
そのくせ追加要望は未だにしょっちゅうしてくるし
ここまで聞いて分かったと思うけど、直接目的を達成するものだけを作ってるわけじゃないし
>>171
セッションは本来の呼び名を避けて適当に言ったんだよ!
ググってなくてすまんかったな!
よかったら良い呼び名を教えてくれ
次からそれを使う 並列処理とか普通にやればいいだけなんだが
何に困ってるか説明できてないので答えようがない
まあ全てはこいつの能力不足だ
お前が教えるんじゃなくてお前が教えてもらうほうだ まずは端的かつ明確に回答を行えるようになることを目標にすべき
同僚の苦労が偲ばれる >>131の質問の内容からして自分の常識とは異なっている
実装手法なら、周辺環境や規約にもよるけど、だいたいこのように書くと言えることもある
でも設計だと一部を抜き出して語る意味がない
全体を知っている者同士の会話でもなければ良し悪しの判断基準がないから語りようがない
毎回個別に考えて調べて考えるのが原則
だから設計は単価が高くて人工が多い JavaScript関係ない話みたいだし
元質問者も多少おさまりつかないとこあるかもしれんけど
もうやめといたらどうか なんか先日からアプデ可能って出るんですがやっても必ず失敗します
何かあったんですか? if(true){
・・・
}else{
・・・
}
みたいな文を書くとエラーが出るのだが、ダメなのか? >>179
>みたいな文
というのがよくわからないので
if(true){ console.log(1) }else{ console.log(2) }
これ試してみて >>180
()内の条件が定数だと警告が出ていたようです。 自分でlintかなんか使ってわざわざ警告出るようにしておいて
相談するってさっぱり意味が分からんな あれだろ
解決してほしいんじゃなくて話を聞いてほしいだけ
車が故障したと電話する女、クソまじめに解決のため診断方法をレクチャーしようとしちゃう男、みたいな javascriptのクラスを駆使して何か作ってみたいんだけどどういう内容のものならクラスがバリバリ活躍できる?
車クラスを作ろう!とかそういう練習問題的なのは無しとして 車クラスは作れるのかな?
オレには作れん(´・ω・`) >>186
実践的なお題がないかと思いまして
動物クラスを継承して犬クラスを吠えさせる、みたいなのでは実際にはどういうシーンで役立つのかイメージがつかないのですが… 実際にはどういうシーンで役立つのか知りたいというだけなら
classを使っててclassでないと困る実例を聞けばいいと思うんだけど
なんでjavascriptのクラスを駆使して何か作ってみたいの? <button onclick="if(typeof MyFunc == 'function') MyFunc();" ・・・
と言うような記述を見たのだが、
ifは何のためにあるの?
何が目的なの? >>194
それ悪い書き方
MyFuncに関数が入っていない場合(=バグ)
バグの場合にバグを無視するというコードになってる >>194
良し悪しはともかく目的がなにかと想像すると
MyFuncは別のとこで代入されてるとか
代入されるまではundefinedなりnullなり 別にnullやundefinedが入ってても問題はないし
目的は呼べないものを呼ばないようにすることじゃなくて
呼べるものを呼ばなくすることだな
例えばNodeとかでV8に手を入れてtypeofを拡張してるとか
それで例えば呼ぶとエラーになるクラスのコンストラクタは'constructor'を返すようにしてるとか
一度しか呼ぶことを期待していない関数が呼ばれた後は'function'じゃなくすとか
十分に考えられる MyFuncなんてふざけた名前付ける奴がそこまで高尚なことを考えてるだろうか >>188
IE11用にPromiseのPolyfill作成 >>199
>>194の事例なら、onclickを付け外しする方が圧倒的にスマート onclick="MyFunc()"
が一番スマート >>206
そこはaddEventListenerじゃないのか ジェネレーター関数で
function* g(){
const n=yield 0;
yield n;
}
var f=g();
console.log(f.next());
console.log(f.next(3));
nextで直前のyield部の変数に値を渡せる、みたいな機能がありますが
これをうまく利用した例などはありますでしょうか
ぱっと見どこに値を渡したのか?という見辛さに違和感があるのと
実行直前の値を変えたい、という状況が思いつきません 普通受ける方も送る方もfor文で回しながら渡すだろ index.htmlで、JSの読み込みが三つあり
<script src="file1.js"></script>
<script src="file2.js"></script>
<script src="file3.js"></script>
では正常に動作するんだけれど、三つのファイルを単純に連結して一つにして、
<script src="fileAll.js"></script>
とするとエラーが出まくるんだが、一般に、このやり方はエラー出るの?
単純に連結しているから、三つに分離している場合と同じだと思うのだが。 でない。理由は思いつくが、興味ないので他の人に任せる 前後のファイルがつながって、1文扱いにならないように、
ファイルの冒頭に、; を入れておけば? Q ○○したらエラーが出ます
A エラー内容確認してがんばって直せ でもエスパー能力高いやつって経験豊富だから大体どういう理由でエラーが出てるか予想できるよね >>221
チンコ晒せといってるじゃないんだから。
Githubとかあんなところもその恥ずかしいという気持ちを乗り越えてからすべてが始まるんだぞ >>221
その理屈だと、エスパーも恥ずかしくてコードを晒せない ,.:::.⌒⌒:::::ヽ
(::::::::::::::::::::::::::::)
(::::::::::::::::::::::::::::::::::)
(:;;;::::::::::::::::::::::::::::::::::::)
(:;;;;;:::::::::::::::::::::::::::::::::::::)
(;:::::::::::::::::人:::::::::::::::::ノ
(::::::: (´・ω・`):::::ノ jqueryのmapとjavascriptのmapって全然違いますよね
jqueryの方はreturnで配列返したら配列じゃなく展開されて値が代入されてました
なので配列で返したいときは
$().map(_=>[[]])
みたいに入れ子にしないといけない、でよいでしょうか? >>228
なんか根本的に間違ってるぞ。
jQueryのmapは二種類ある。
$.map と $().map だ。
前者は、(jQueryが開発された当時、存在しなかった)
JavaScriptのmap相当の機能を提供するものとして作られた。
後者はjQueryオブジェクト(=要素の配列をラップしたもの)に対して
mapを実行するもの・・・が基本ではあるんだが、jQueryオブジェクトというのは
いうのはDOMだけではなく任意のオブジェクトをラップすることが可能なので
いろんなものに使えたりはする。
で、JavaScriptのmapとして使いたいなら、$.mapの方を使う。これは配列が
mapメソッドの引数になっているという違いはあるがJavaScriptのmapと同じように使え、
真の配列だけではなくlengthプロパティがある配列っぽい(Array-like な)ものを
扱えるという便利さもある。
> みたいに入れ子にしないといけない、でよいでしょうか?
入れ子にしないといけないとかいうのは意味がわからん。
後者を変な使い方をしてるだけだろう。
あんたが欲しいものは前者だ。それ使っておけば悩むことなど無いはずだ。 >>229
実際に試してみるとわかる
var arr=[1,2,3];
console.log( $.map(arr,_=>[1,2,3]) ); //[1, 2, 3, 1, 2, 3, 1, 2, 3]
console.log( arr.map(_=>[1,2,3]) ); //[Array(3), Array(3), Array(3)]
console.log( $.map(arr,_=>[[1,2,3]]) ); //[Array(3), Array(3), Array(3)]
ということではないかと >>230
マジかw それはしらなかった。
jQueryのmapってRubyでいうflat_mapだったんだ。
ってことはmapといいながら1対1での変換じゃなくて
要素を増やしたり減らしたりもできるってことか。
なんでjQueryのmapはdeprecatedにならないのかと
思っていたらそういうことだったんだな $.map, $().map
jQuery には、2種類のメソッドがある
$.メソッド名は、汎用的なユーティリティ関数で、
$().メソッド名は、this を持つ、インスタンスメソッド thisを持つとかまた頭悪いオレオレ用語開発したなw
付き合ってあげるここの人たち優しい var tName = [];
var tNumber = [];
var i = 0;
var o = document.getElementsByTagName("a")[25];
for( i=6;i <=24;i++ ){
tName.push(document.getElementsByTagName("a")[i]);
tNumber.push(document.getElementsByTagName("a")[i-1]);
if(tName[i].textContent.includes("(1001)") == true){
tName[i].style.display = "none";
tNumber[i-1].style.display = "none";
}
}
if( o.textContent.includes('(1001)') == true ){
o.style.display = "none";
}
これ実行するとTypeError: tName[i] is undefinedって出るんですが原因わかる方いますか?
実行順序の関係だろうか. 空のtNameにpushしてるから
ループ最初のi==6の時はtName[0]しかないぞ >>239
エラー出た時にブラウザでオブジェクトの中身覗いたら原因丸わかりじゃないですか?
いつもどういうデバッグしてるんですか いつも割と気合と努力で(console.log)でゴリ押ししてたからなぁ汗
ブラウザのコンソールはエラーと警告が出るだけの場所だと思い込んでてまさかコード打ち込んでデバッグ出来るとは青天の霹靂だ
>>241
tNameは最初の一個しかないのが意味が分かりません
ほぼ同じソースコードだけど別のページだと動くのに.
ゴリ押ししたら動くのにforとarray使ったら動かなくなるのなんでなん ループの中の if(tName[i].……の直前で
i と tName をconsole.log()にかけるコード1行入れりゃ理解できるんでね for使わずにtNameだけ書くと >>239
var tName = [];
var i=0;
//i=0からi=5は、何もしていない
console.log(tName); // []
i=6
tName.push('要素a');
console.log(tName); // ['要素a']
console.log(tName[i]);// undefined == tName[6]
i=7
tName.push('要素a');
console.log(tName); // ['要素a','要素a']
console.log(tName[i]); // undefined == tName[7]
//以下繰り返し >>240-241,243,245-246
とりあえずこれで事なきを得ました。ありがとうございました。
var tName = [];
var tNumber = [];
var i = 0;
var o = document.getElementsByTagName("a")[25];
for (i = 6; i <= 24; i++) {
tName[i] = document.getElementsByTagName("a")[i];
tNumber[i-1] = document.getElementsByTagName("a")[i - 1]
if (tName[i].textContent.includes("(1001)") == true) {
tName[i].style.display = "none";
tNumber[i - 1].style.display = "none";
}
}
if (o.textContent.includes('(1001)') == true) {
o.style.display = "none";
} 質問です
JSというかYouTubeの問題かもしれませんが
iframeAPIを使ってYouTube動画を貼って、準備出来たら再生、とするのに
再生(playVideo())の前に消音(mute())した場合
http://jsfiddle.net/xvc70zn9/1/
消音(mute())しなかった場合
http://jsfiddle.net/q9x2Lfma/1/
Chromeで後者が再生されないのは、おま環でしょうか? そりゃiframe内の動画がユーザーアクション無しで音声流そうとすればブロックされて当然でしょ
いまデスクトップでもどんどん厳しくなてるんだから
WebAudioAPIとかもポリシー変更になるでしょ >>249
つーことは
俺環だけでなく、そちらでも再現してる?のかな? chrome://flags/#autoplay-policy
* Default
* No user gesture is required.
* User gesture is required for cross-origin iframes. <--
* Document user activation is required. >>253
それは知ってました
何れにせよこちらからのアクションは
postMessageで送っているようなので
不可解なのはなんでMuteすればOKなのかということです
なので、おま環なのかなーと window.addEventListener("load", function(e){
var list = document.getElementsByTagName('a');
ってやってるんだけど、aタグ一杯あるのにlistに空の配列が返される
しかも最近突然起こるようになったんだけど、何が原因かわかりますか おま環、もしくは勘違いじゃね?
getElementsByTagNameが返すのは配列ではなくコレクションだから
配列が返ってるならおかしい >>254
なんで不可解なのかが不可解
ミュートだったら再生させることによる悪影響の可能性が小さいだろうってことは分かる?
モバイルではもっと前からミュートで見えてるビデオだけ自動再生可の仕様だったでしょ
そして最近デスクトップにも似た仕様が入ったでしょ
デベロッパーなら最低限このページのことくらいは把握しておかなきゃ駄目よ
https://www.chromestatus.com/features >>257
あ、配列じゃないのかこれ。NodeListというのが返ってきてlengthが0になっています
考えられるとしたらDOMがまだできていない等だけどloadイベント発火時にそんなことってあるのかな setTimeOutで待ってみても同じだから、DOM構築が間に合ってないってわけではないっぽい F12でコンソール開いてdocument.getElementsByTagName("a")って打ってみて >>264
やってみた。それだと正常に取得されました javascriptもclassを実装したの?
煩雑なprototypeは改めて欲しい。 プロトタイプはクラスと比較してもしなくてもこれ以上無いくらい簡単な仕組みで
複雑なのはnew演算子だって何回言ったら分かるんだろうね >>278
実装が簡単なのと使い方が簡単なのをごっちゃにしてるぞ
例えば、gotoはコレ以上無いくらいに簡単な仕組みだ、
そのgoto一つで分岐処理、ループ処理、例外処理、
処理の流れを変えることはなんでもできる
だけど、使うのは難しい
原子的な機能であればあるほど、実装は簡単で
いろんな応用ができる。だけどそのせいで間違った
使いかたもできるから、使いこなすのは難しんだよ 小学生の時にBASICやってたなあ
そんでGOTOやGOSUBのなにがいかんのかイマイチわからん 問題が出るのはたとえばこういう場合
・後でコードを見たときに
・意図や目的のコメント文がぜんぜんなくて
・大きく飛んだり戻ったりで全容を掴むのが至難の業で
・書いた本人も気づいてないgoto由来のバグが潜んでる
よって、次のことが言える
自分がメンテするのでなければ何も問題がない お腹に刺さると死ぬから包丁は使うべきじゃない
的な gotoって確か行数かマーカー依存だったよな
行数の場合、ソース変更したら処理が変わるし、マーカーだと処理を追いにくいからあまり推奨されてない
大規模開発だと(他人にソースコードを読ませる関係上)問題になるが個人での開発ならそれほど問題にならない goto乱用よりも
仕様ひっくり返すユーザ、設計をひっくり返す上流SE、みたいな 要件を正しく伝えない蔵担当者
勝手に要件を追加する蔵担当者の上司
最終段階で「これ本当に必要なの〜?」とぶちかます蔵の社長、とか 質問です 自分は障害持ちで将来的に在宅で
仕事したいと思っとります 在宅でのweb系の仕事を考えるなら、javascriptとphpどちらを先に勉強すべきでしょうか?すぐに仕事に繋がりやすいのはどちらでしょうか?
大金稼ぎたいとかじゃなく、少し稼げれば良いです 宜しくお願いします
長文失礼しました まずwebのことなんて一旦忘れて
c書けるようになってサーバ操作に慣れろ >>291
考え方が逆
何ができれば良いか、ではなく何が出来なくても許されるか、だね
んで在宅≒フリーランスだとあまりないかもなあ、出来なくてもいいこと
デザインくらいかなあ 最近この手のクラワのステマじみた何かをよく見かけるな >>291
WebAssemblyもあるから何とも言えんな
C++とjavascript学んでおけばいいんじゃね ウェブサイトにアニメーションを実装するとなると
Canvas使うよりよりSVGやCSSアニメーションのほうが優勢ですか
例えばページ背景に複数の円が色を変えながら動き続けるとかです >>295
c +は難しそうですね phpがオススメとも聞きましたが、逆の意見も耳にします >>296
WEB+DB vol.106 に、次世代のアニメ規格、Web Animations API の記事が載っている
これのPolyfill として、web-animations-js が公開されている 言うほど枯れてるだろうか?
そんなに使われまくってる? 原則CSSのanimation/keyframesと一緒でしょ
枯れてると言って良いと思う > 原則CSSのanimation/keyframesと一緒でしょ
> 枯れてると言って良いと思う
だめだろ。できることが一緒でも、
それを実現している技術は最近だろ?
これはCSSではない新しい技術なのだから枯れてない
長い期間実際に使われてないなら枯れてるとは言えない 実際に多くの人に使われてるかどうかは関係ない
同時期の技術で言うとWebRTCのように使うべき人が使ってきて
議論が出尽くして仕様が固まって可能性も粗方掴めた段階で枯れてると言える
もう先人が試しきってるんだからね 次世代とかウン十年前のゲーム機の宣伝文句じゃないんだから >>304
まだドラフトかよw
枯れてるとか嘘じゃん >>309
あなたは、ドラフト(草案)がもうこれから
変わらない仕様だと断定したいんですかね?w
https://www.nttpc.co.jp/yougo/%E6%9E%AF%E3%82%8C%E3%81%9F.html
> しかし単に古いだけでなく「すでにトラブルが出尽くしていて、
>そのトラブルも解決され尽くしている」といった意味が強い。
ブラウザで実装してこの仕様でなにかトラブルがないですかー?って
調べてるのが今の段階で、トラブルはまだ出尽くしていない
枯れるわけがないだろ。常識で考えろや これらの書き込みで1600円の雑誌が何冊余計に売れるのかね 枯れてない=トラブルが多く仕様が不安定
とすると
枯れてない=使い物にならない可能性が高い、細かいトラブル対応はネット漁るしかない=本見る意味なし
枯れてる=トラブルが出尽くし解決され尽くすほど普及してる=mdnで十分、本見る意味なし >>310
意味分からん
ブラウザはまだAPIの一部しか全然実装してないし個々何年もする気もないだろ
ずっと見てきたわけもでないのにしったげに言うな
むしろ使う人が居なくて仕様の中核以外の部分は廃止されてもおかしくないような状態だから
もう枯れ切ってるんだよ
崩れる前に使い始めようっていうのに近い >>314
意味がわからんのは、お前が「"仕様"が枯れた」なんて
意味不明なことを言ってるからだよ
いいか? 俺らは使う側。APIを使う。使うにはブラウザに実装されていなきゃいけない。
いくら仕様がずーっと前から変わらなかったとしても、それがブラウザに実装されてない以上
使えないし、Polyfillがあろうがブラウザに実装されようが、それなりの期間使われてないと
バグがあるかもしれない。だからいくら仕様が安定してようが「"実装"は枯れてない」んだよ
それとも何か?「枯れてるけど使えません。」とか言うつもりか? 枯れたっつーのは、なんつうか、こう
世界中のいろんな現場で使い倒されてる感がないとね Web技術は枯れてからようやく使われるようになる
色んなメディアやブログが取り上げ始めたらその合図 >>315
俺らは使う側?は?何言ってんだお前。
Webって言うのは皆で作っていくもんだろ
その大原則を忘れるとかアホかお前
ほんとアホなこと言ってる暇あったらMLに参加するなり、実装にパッチ投げたりしろよドアホ
皆が苦労して決まりきってから腰を上げるお前みたいなのに仕様が云々語る権利は一切無い Webの世界(要するにウェブサイト)は皆で作るが
仕様は皆で作らない >>315
> だからいくら仕様が安定してようが「"実装"は枯れてない」んだよ
いつの間にか、「実装が枯れてない」にすり替わってる っていうか実装が枯れてないというのがどうも
枯れてるものを移植したら枯れてない新世代ぎじゅつに様変わりするのか?んなわけないだろ 不毛でも感覚をぶつけ合って少しでもすり合わせておくことは大事
皆がバラバラな方向いてたらWebは崩壊する 下のコードでaddEventListenerが実行されないのが良く分かりません。
window.onload = function () {
window.addEventListener('load', function () {
・・・ // 実行されなかった
});
};
なぜですか?
なお
window.onload = function () {
ではなく、
jQuery(function ($) {
でも実行されませんでした。そう言う仕様ですか? >>330
ロードイベントが起こった後にロードイベントを監視しても、もう起こった後だから起こらない。 >>330
そりゃ二重にロードイベントに紐付けしたら起動するわけが無い
どっちかだけにしろ Life is a series of choices.(人生とは選択の連続である)- William Shakespeare(ウィリアム・シェイクスピア) >>330
おかしいな? jQueryの場合は動くはずだけど?
jQueryのloadはPromise的な処理になっていて
あとからつけても発動するように考慮されてある
jQueryの古いバージョンは違ったかな?って思って1.9.1にしたけど動く
それよりも古いバージョンはしらないけど
https://jsfiddle.net/6q4whbty/ あ、逆か。
外側をjQueryにして、中をDOM APIにするわけね。
そりゃDOM APIじゃむりだ。中もjQueryにしなきゃ
ってか、外側でjQuery使っていてjQueryでやれることを
DOM APIを使ってやる必要ないでしょw 必要かどうかは私が決めることです
分からないのなら解答しなくていいので黙っててください >jQueryのloadはPromise的な処理になっていて
>あとからつけても発動する
どういう経緯でこうなってるんですか
pure-js側はそんなことないですよね
デバッグの妨げになるようにも思えるんですけど どういう経緯って言われても、何度も発生するイベントと
resolve(またはreject)状態になってから変わらないものは
そもそも性質が異なるからですよ。
Promiseもいまやpure-jsですが、昔はそんなものがなかったからイベントで代用していましたが、
他のイベントと違い発生したタイミングが重要なのではなくロードは発生したタイミングが知りたいというより、
「現在ロードされているか?されていなければされるまで待つ」という処理を行うのが普通なので
現在の状態を判断するという処理が必要になります。
結構複雑ですよ?まずjQueryのloadはブラウザのloadイベントではなく
それよりも早い段階で発生する、DOM構築が完了した直後の
DOMContentLoadedを捉えるものだというのは知っていますか?
DOMContentLoadedはHTML5で標準化されましたが、それまでは非標準で
https://qiita.com/mamosan/items/ff336b5cc0a1a95e03a7
Firefox 2 (2006年)、Safari 3.1(2008年)、Chrome 4(2010年)、IE 9(2011年)で
予約サポートされたものです。jQueryは2006年なので普及しておらず当時は
使えない人が大半だったってのがわかりますね?
jQueryのloadはこのDOMContentLoadedをシミュレートする形で実装されました。
詳細は省きますがドキュメントのとあるプロパティをsetTimeoutで監視して読み取れれば
イベント発生扱いとしています。この部分のコードだけでも面倒なのですが、今は
DOMContentLoadedが使えるし、シミュレートが完璧に動作すると信じて
DOMContentLoadedの話にすすみましょう。
DOMContentLoadedが発生するのはDOM構築が完了した直後です。ここで問題になるのは
パフォーマンスアップのために使われる非同期で実行されるJavaScriptの存在です。
同期的に実行されるJavaScriptはDOM構築完了前に実行されますが、非同期で実行される場合
DOM構築完了後に実行されます。つまりDOMContentLoadedが発生した後に
DOMContentLoadedを監視することになるわけです。つまりイベントはすでに発生しているので
捉えることはできません。>>330と似たような状況になりますね。 ではどうするのかというと、イベントを監視する前にすでにDOMContentLoadedが発生したかを
document.readyStateを使ってチェックするわけです。
ですが単純には行かず、document.readyStateを使ってチェックしてまだloading中であれば、
addEventListenerでDOMContentLoadedを監視すると書いてしまうと、チェックした段階では
loadingだったが、addEventListenerするまでに間にDOMContentLoadedが発生してしまって
イベントが捉えられない可能性があります。
なので逆に実装し、addEventListenerでDOMContentLoadedを捉えるようにしてから、
document.readyStateを監視して、すでにreadyStatusがinteractiveにだったら
ずっと前にDOMContentLoadedが発生していたと判断するわけですが、
実はaddEventListenerを設定した直後にDOMContentLoadedが発生した可能性があるため
この場合は2回イベントが発生する可能性があります。それを避けるために状態管理で
1回しか発動しないようにするわけです。
これらの動きはDOM読み込みとJavaScriptの実行タイミングによるものなので
毎回発生するものではなく、まちまちで見つけづらいバグとなってしまいます。
ローカルでは問題ないのにサーバーにアップした発生する。
でも2回目以降はキャッシュが効いて速いので発生しないとかですね。
このように完璧に対応するのは複雑なのです。DOMの非同期読み込みをやめれば
解決するのですがパフォーマンスアップのためにブラウザに搭載された機能を
使うなというのは、ライブラリとしてありえませんね。
他のイベントでは必要ないのにloadに関してこれらが必要になるのは
DOM構築が完了したあとに何度も発生するイベントと、そもそもDOM構築完了を監視する
DOMContentLoadでは性質が異なるからなのです。
そして実際のユースケースを考えたら「ロード済みかロード完了時にイベント発生」して
欲しいため、APIもそのようになっているのが望ましいわけです。
開発者が上で書いたようなな複雑な処理を書くことなく、単純なAPIで判断できるため
それが原因で起きるマイナーなバグから逃れることができます。 >パフォーマンスアップのために使われる非同期で実行されるJavaScriptの存在です。
>同期的に実行されるJavaScriptはDOM構築完了前に実行されますが、非同期で実行される場合
>DOM構築完了後に実行されます。つまりDOMContentLoadedが発生した後に
>DOMContentLoadedを監視することになるわけです。つまりイベントはすでに発生しているので
>捉えることはできません。
これどゆこと
ブラウザにおけるjavascriptの実行ってのは
今も昔も非同期な関数(呼び出し)があるだけで、原則は全部同期実行なんじゃないのけ
setTimeoutやXHRのcallbackの中でwindow.addEventListener('load', ... )なんてしないし 「なんでonloadではなくDOMContentLoadedなのか」は?
つか化石IE対応のための負の遺産的挙動じゃないん >>344
scriptタグのasync属性のことだよ。
HTMLの読み込みとJavaScriptの実行が非同期で行われる。
つまりaddEventListenerでDOMContentLoadedを監視する前に
HTMLの読み込みが完了してしまうことがある
参考 https://iwb.jp/domcontentloaded-javascript-async-forbidden/ >>345
IEは9の時代からDOMContentLoadedに対応してる。
対応してないブラウザのためというのなら、別にIEだけじゃなくて
その他のブラウザも非標準のDOMContentLoadedには対応していなかった
DOMContentLoadedが標準化されたのはHTML5になってからだ。 それはわざと。レスする気なくするでしょ?それが狙い
不正にjQueryを貶めようとする奴らに反論する気をなさせる asyncは「DOM構築完了後に実行」される、ではなく
「DOM構築完了後に終了する場合がある」というべきでは
つかasyncしてもwindow.onload使えばいい話じゃないのか この件は良く知らんのだけど
・>>337いわく1.9.1の時点からそういう挙動
・scriptのasyncはHTML5から
・jq 1.9.1リリース 2013年02月04日
・HTML5勧告 2014年10月28日
順番おかしくね >>351
jQのpromise的動作とjsタグのasync的動作はまったく別物 >>352
>>346
JQueryの良く分からん挙動がscriptのasyncと関係ないということになると
>>342-343の大長編レスの前提が崩れるんじゃないか? >>351
> ・>>337いわく1.9.1の時点からそういう挙動
どこにも1.9.1の時点からなんて書いてない。
少なくとも1.9.1ではそういう挙動だったってだけ。
おそらく最初からそうだろう >>352
何を持って別物と言ってるのかは知らないが、
PromiseオブジェクトにはPromise.resolve()とPromise.reject()という
メソッドがあって、それぞれ解決済み、リジェクト済みのオブジェクトを返す。
このオブジェクトにあとからthenメソッドでコールバック関数を
くっつけてもちゃんとコールバックが呼ばれるんだよ。 > jQのpromise的動作とjsタグのasync的動作はまったく別物
jsタグってなに?HTMLタグっていいたいの?
HTMLタグのasyncはJavaScriptの実行を遅らせることで
見た目上のパフォーマンスを上げる技術で
その弊害として、DOMContentLoadedが先に呼ばれてしまうから
JavaScriptの発動が起きないってものなんだけど
jQueryはそのことも考慮されてるから、普通に書くだけで
非同期でJavaScriptが読み込まれても大丈夫って話をしてるんだよ
Promise的動作っていうのは、コールバックを後から追加しても
発動するって話。あんた全く別物の話をしてるよ >asyncはJavaScriptの実行を遅らせることで
遅らせてるのか?
htmlの解析処理と当該jsファイルのダウンロード・実行処理とを
切り離して並行処理させることで、htmlのパース・文章や画像の配置等が妨げられないようにしているだけでは?
DOMContentLoadedより後に処理が開始されるのではなく
DOMContentLoadedの前に終わるとは限らないというだけの話では? > DOMContentLoadedより後に処理が開始されるのではなく
> DOMContentLoadedの前に終わるとは限らないというだけの話では?
今はそういう細かい話はどうでも良くて、
需要なのはscriptタグのasyncを使われてると、DOMContentLoadedが
先に発生してしまうことがあるってことですよ
他にもRequireJSのような非同期でJavaScriptモジュールを読み込む仕組みを
使ったときにも発生しましたね。 たとえ細かい話でも虚偽が含まれてる人の話は信用できないからなあ はは、信用出来ないっていうだけで、間違ってるとは言えない
あわれよのうw まあ間違ってるわけじゃないからね。信用出来ないってだけ >>354>>357>>358
ごめん訂正するね
言葉足らずだった
「別物」ではなく「実装箇所が別物」
動作としては似たようなものだ
一番最初の気持ちとしてただ>>351の言ってることが的外れだったので意図としてはそれを訂正したかった window.addEventListener('load', ... )ではどうしてもダメなケースを聞きたい
>>330のような無能サンプルコードは除外するものとする >>367
ページ内にある画像全てが読み込まれないと
JavaScriptが動かないのでダメ >>368
操作性悪くなって遅くても動くからダメじゃないんですって主張は禁止なw
その理屈だと電気がなくても生きていけるって回答になる。 asyncで読ませたい
どうしても早いタイミングDOMContentLoadedで動かしたい
asyncするとDOMContentLoadedに間に合わないリスクが怖い・・・
jQueryなら専用のコード書かなくてもすぐに実現!! ←今ココ
ざっくり書くとこんな感じかね?
DOM APIでもできないわけではないし
jQueryならといっても最初からそれを狙った実装ではないようだが
現実として便利に転用できますよ、という具合 >>370
どっちにしてもwindow.onloadだとロードイベントに一個しか関数を紐付けできないから不便極まるんだよなぁ
一個だけしか使わないってんなら関係ないけどさぁ… >>374
たまにはaddEventListenerのことも思い出してあげてください そんなことよりお前らremoveEventListenerとか使ったことある?
使う機会がまったくないよなアレ >>377
そもそも今この瞬間までそいつの存在すら知らなかったぞ >>377
使ったことはないが
disableにできない類のもののイベントリスナを切りたいとか
起動する関数を切り替えたいとか
使える機会はいろいろ思いつくぞ
呼び出される関数側でチェックして即returnとかの別手段でだいたい十分だけど >>379
> 呼び出される関数側でチェックして即returnとかの別手段でだいたい十分だけど
そういうのはクラス名で制御すべきだよ。
例えばこんな感じにしてると、spanのクラスが
それぞれmode1 or mode2 の場合のみ、該当のものだけ発動してくれる
$('span.mode1').click(function() { alert('click1'); })
$('span.mode2').click(function() { alert('click2'); }) >>377
普通に使うけどなあ
来れなかったら、addしたイベントをどうやって剥がしたら良いのかわからん addしたイベントを剥がす機会がないということでは? 要素が増減するならばデリゲート使って親要素でイベントを捉えれば良いし
その方が効率なわけで、わざわざイベントハンドラを外すことはないね >>383
なるほどー
>>384
増減しない時は? >>386
つけっぱなしで良いこともあるし外さにゃならんこともあるな
この辺は経験というか、やったことあるかどうかの差だからしゃーないわな だからその外さなきゃならない場合ってのが無いんだっていう話をしてるんだが
経験があるというのなら、その経験を語れよ webページ作るのに外さないといけないユースケースは確かにめったに無さそうだ。
実はコンソールで色々いじくって実験する用なんじゃないのか。console.logみたいに 使った経験は無いが、想像するに一つのボタンに複数の機能を持たせるときには使えそう >>390
>>380を見てね
ロジックで処理を分けるのは古いやり方だよ。今は状態ごとの処理を定義する。
こうすることがバグも減らせるんだよ。ちゃんと外せたか?二重に登録してないか?
なんて考える必要がない。
こういうものこそ経験っていうんだけどな >>391
ますますremoveEventListenerの使い道ないじゃないか…(憤慨) >>388
色々あるけどなあ
フレームワークっぽいもの作ってたときとかよく使ったよ 一個のサイト作る場合ではなく
複数のサイトで汎用的に使うコンポーネントなんかを作るケースだと
CSSまで自由に出来なくてJSでやらにゃならんこともあって
そんな時には必要になるなあ
みんなも自分のサイトに組み込んでるフレームワークやライブラリのコードをのぞいてみると
案外使われてるのに遭遇すると思うよ いちいち重複イベントチェックなんて面倒だ
まとめてごっそり総入れ替えだ リフレクションAPIやプロキシーAPIと同じでフレームワークとか作る人用か。使うだけの人には洋ナシ体型 phpよりjavascriptを勉強すべき、という理由を教えてください 私は頭が悪いので分かりやすく頼みます PHPを作ってるところは一つ
JavaScriptはMS、Google、Apple、Mozillaと大企業が力を注いている javascriptも、もはやc++やその他言語を呼び出すだけのものになりつつある >>402
なるほど、ありがとうございます
本当に死ぬ気で毎日勉強した場合、
理解できるようになるまでどれくらい掛かりますか C++はもはやJavaScriptから呼び出すライブラリに成り下がったんだな 呼び出されることすらできなかった状態から成り上がったんやぞ。 (javascriptの実行速度が遅すぎて使えないからこういう方法が生まれたんだけど…)ボソッ でファミコンエミュレータwasmにしてみたらjsより遅かったんでしょワロスwwwww >>410
ブラウザ /JS版 /Wasm版
Chrome 63/4.36ms/5.68ms
Firefox 58/5.76ms/3.98ms
Safari 11/9.98ms/4.21ms
これ?要はchromeの実装がクソ雑魚だったってだけでしょ
firefoxとsafariはjs版を大きく超えてる >>411
え?たったそんだけしか違わないの?msって
人間が知覚できるレベルじゃないじゃん なんでchromeで遅くなってるの?
chrome、前はjsの最適化で最速とか言ってたけど
sandboxとかセキュリティ絡み? >>411
ご覧くださいwww「javascriptの実行速度が 遅 す ぎ て 使 え な い」とまでイキッておいてコレwwwww cとphpやpyの差みたいに10倍かそれ以上速くなるもんだとばっかり思ってた
カスだな コンパイルの手間かけてまでこの程度かよw
時間は有効に使えよ?みんなお前に付き合うほどヒマじゃねーんだw これでセキュリティに穴が見つかろうものならまるで利用価値なしのゴミ屑扱いになってしまう エロゲー廃人速報改
http://erogehaijin.com/
・生活保護の不正受給カミングアウトして自慢
・DMMからステマ脅迫工作で雇われる
・アフィで稼ぎまくり
・DLsiteはじめ各流通やメーカーへの脅迫
・ステマ工作で金貰ってるのは言うに及ばず
・風俗通い・焼肉ざんまい
エロゲー廃人速報改
http://erogehaijin.com/
∧_∧
ピュー ( ^^ ) <これからもエロゲー廃人速報改(ナマポ不正受給)を応援して下さいね(^^)v
=〔~∪ ̄ ̄〕
= ◎――◎ 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>405
どういうところに行きたいかによるから何とも…試しにこういうのでもやってみれば?
https://prog-8.com/languages/es6 wasm使うならもはやjs発である必要性ないと思うんだが
js使いたいだけっていう
違うコンパイル言語開発しろって >>402-405
プログラマーが、クソ言語のPHP を使う理由がない
Ruby on Rails などのフレームワークを使うけど、
画面は、Vue.js など、JavaScript(JS) になるので必須
初心者は、Ruby, JS を数年やればよい。
それ以外の言語は難しいから、数年後に始める wasm, wasmってまあ良く聞くけど
・wasmの性能って「元の言語/コードの効率性」と「wasm形式にしてくれるコンパイラの(最適化)性能」と
「ブラウザの方のwasm動作環境の性能」の全部に左右されんだよね?
・「wasmはロード時間短縮にはなるけど動作速度は変わらない」って主張が今でもいくらか見られるけど
jsで動かしてたものをc-wasmに変えれば動作速度は劇的に改善される可能性もまあ普通にあるよね?
・jsと違って低次元なメモリ管理できちゃうけど、
wasmが個々のwasmに割り当てられたメモリ領域以外を読み書きできちゃって
セキュリティ的に大問題になる、ってことは生じ得ないの?
activexで脆弱性突いてウィルス散布、みたいな現象はノーサンキューなんだけど そもそもwasmっていうのは既存のサイト速くするものではないからな
既存のサイトは、サーバー側でバッチ処理をさせるという設計
クライアントでやることが少ないから、いくらwasmでクライアントが
速くなったとしても効果は殆ど無い。
ぶっちゃけるとwsamの主な用途はゲームだよ
ゲームは反応速度が重要なのでバッチ処理でさせると成り立たない
あとはせいぜいグラフィックソフトぐらいだろう ユーザに気付かれないようにクライアントに高処理効率でマイニングさせるとかな >>425
WASMはJSエンジンのバックエンドを流用できるよう設計されていて
現状ではGCもなくほぼasm.jsと同じだからasm.jsのバックエンドが使われてるよ
正確には最近はasm.jsの方がWASMにコンパイルされてWASMのバックエンドで動くんだけど
だから実行速度に関してはJSの限界というかasm.jsと同等になる
ただこれからSIMDが入ったりして、最適化も進めば
原理上ターゲットを絞りきれないネイティブコードより早くなることもあり得る
ただJSで動かしていたものをWASMにすれば早くなるかと言うとそういうものではない
asm.jsでも同じだが、JS-WASM間の関数のやり取りにはオーバーヘッドがあって、
インライン化などの相互最適化も効かないので
基本的に沢山呼び出される小さな関数をWASMにすると性能は悪化する
だから大きな処理を丸っとWASMにするという使い方が一番良い
それと別に低次元なメモリ管理はできない
WASMにとってのメモリとはただのArrayBufferだから
勿論サイドチャネル攻撃はいくらかできるがそれはもうWASMに限った話ではないので仕方がない ネイティブより速くとか無理ゲーだろ
C/C++で書いたアプリより速く計算しますってことだぞ jsが超早くなった!! cよりも早く!!
→ c側のコードが糞過ぎただけでした
chromeのjs処理が**より数段早くなった!!
→ chromeが決め打ち特化でチューンした部分だけでの話でした
この手の誤った性能比較話を連想した ブラウザが仮想マシンの代わりになるのはいいけど
そのブラウザが乱立してる状況じゃ安定性は得られんよね
結局Windows OSみたいな独裁体制にしないと >>430
全然無理じゃない
そこらのネイティブコードっていうのは多くの環境に対応するため最新のCPU機能を使いきれずコンパイルされてるから
ちょっとしっかりしたのだとスイッチ使ったりインストール時にコンパイルするけど
それでも実行の直前にコンパイルするのに原理的に勝りはしない
WASMならそれこそ10年前に書いたコードでも最新の機能を使って最新のコンパイラでコンパイルされる
まあ現実未だ可能性の話でしか無いが、中間コンパイルというものにはそういうメリットが昔からある
コンパイルするということは書いたコンテキストが失われるということだから
それに将来的にJITも働くようになればもっと最適化の可能性が広がる
無理ゲーだが原理的な可能性はあるということ
特に個人的にはメニーコアの時代がやってきてるのにOSが支援が弱い
パラレリズムとそのバランサをブラウザにやってもらいたい
>>431
決め打ちチューンは正当な最適化手段
可能性の高い方に賭けるというのはCPUでさえもやってること 前身のasm.jsなんて大分前からあるのに
なんで変な誤解されるんだろ 全C使いと全Java使いの中央値の力量を持った者同士にアプリを作らせたら
Java使いの方がパフォーマンスも安定性も使い勝手も良いもの作ることは間違いない
でもAndroid開発でもそうだけど今どきCやC++を使うということは
「あえて」使ってるということだから、プログラマのレベルも高いし
それで比較的劣るものができるはずがない >>442
証明したければ自分が相当数の被験者集めて実験したら? >>443
>>442ではないが、なぜ442が441の論を証明しなければならんのだ? 俺はあくまで(経験上)間違いがないと言っただけで
証明が欲しいなら勝手に自分でやれってことだ >>447は無職の荒らしであって実はJavaもCも扱ったことがない
俺の経験上間違いない 赤の他人の正しさを「証明」する人はいないが、「確認」ならするかもしれない MathJaxを使っています
$\begin{array}{cc}
a & b \\
c & d
\end{array}$
はちゃんと機能していますが、
$\begin{array}{cc}
a & b \\
\multicolumn{2}{c}{d}
\end{array}$
が機能しません。
なぜですか?
MathJaxでは\multicolumnは実装されていないんですか?
使っているMathJaxは
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML">
</script>
です。 >>449
俺は別に俺の言ってることが正しいから思えら黙って信じろとは言ってないんだが
>>450
もしかして「間違いない」って言葉尻に反応してるのか? >>451
multicolumnの検索結果— MathJax 2.7 documentation -
https://docs.mathjax.org/en/latest/search.html?q=multicolumn&check_keywords=yes&area=default >>452
命題が真である事を確認するのが「証明」 MathJaxでarray環境の入れ子って何重まで可能ですか? 自己解決したら解決方法まで書きましょう
それが他の人の助けになるかも知れません <INPUT type="textbox" name="test">などのフォームのnameから
フォームがテキストボックスかセレクトボックスかチェックボックスかラジオボタンかを判別するにはどうすればいいんですか? .checkedや.valueでundefinedでない値さがせば? >>460
var elm = document.querySelector('[name="test"]');
console.log(elm.type==="text"); var elm = $('[name="test"]')[0];
console.log(elm.type==="text"); 在宅プログラマーってエクセルできないと無理?エクセルから逃げてきたんだ >>465
単に>>463に合わせただけ。あえて一つだけ処理しようとするとこうなるという例
もちろん>>463もそうだけど、こういう書き方は良くない。
name属性がtestのものがない場合や複数ある場合に対応できないからね
一つだけ処理する場合でも、動的なページで要素がない場合でもエラーにならない
$('[name="test"]').attr('text')
またこうすれば、0個から複数全てに対応できる
$('[name="test"]').each(function() {
console.log(this.type==="text");
})
でもそうすると>>463よりも長くなってしまう。
それはどんな場合でもjQueryの方が短くかけるという俺の主張に反するから
DOM APIで実現しているレベルにまで下げることで短いということを示しただけ
ちなみにjQueryでjQueryオブジェクトを外すのは普通
そもそも上のeachの中のthisはDOM要素なんだから >>465
そういうこというと、こういう面倒くさい宗教論が始まるから控えてくれ jQueryの話題が出ることが許せないんだ。
僕のスレのルールは僕が決めるんだ jQueryは便利だけどprototype.jsとコンフリクトするのがなぁ… nameだと複数あるものだしそもそも要素の特定をどうするのかって問題が有るでしょ
もしidが'test'なら
console.log(test.type==="text");
でOk >>473
prototype.jsはもう使われてないし、
使われていたって同居できるので問題ない
>>474
条件付きでOKといわれてもな。
その条件を満たせないときはNGだろ 条件付きでOKと言いたいわけではない
今提示されてる条件の範囲では解答が出せないと言ってるんだよ 条件っつってnameで引っ掛けてelem.typeを見ましょうで終わりじゃん 俺はそう簡単な話とは思えないけどな
質問者が求めていそうなこと、実際にあり得る状態の組み合わせはかなり合って
そもそもnameを見ることが不適切な場合もあるってことだ そんなこと言い出したらjavascriptを使うのが適切じゃない場面も多々あるぞ 極論を言ってるのではなく極めて常識的な範囲での話のつもりはなんだが
まあ多分これ以上話しても分かり会えないだろうからここで止めにしよう >>480
お前が悪いのは、答えが出ない問題と言ってるくせに
答えが出ない問題だと言わずに
答えを出しているところなんだよ 最初からjavascriptなんて使わなけりゃよかったんだよ >>469
>またこうすれば、0個から複数全てに対応できる
>でもそうすると>>463よりも長くなってしまう。
>それはどんな場合でもjQueryの方が短くかけるという俺の主張に反するから
>>463は単数処理なのになぜ複数処理と比較したの
比較するなら>>463ベースの複数処理と
jQueryでの複数処理じゃないの >>481
詭弁だな
もしこういう場合ならこうと答えを出すのは
答えが出せないと思ってることと矛盾しないし悪いことである訳がない
それにマシンじゃないんだからさ
人の主張に込められた思いというのはたった1つで
かならず0か1かハッキリできるものかのように話を進めるのは止めてくれない?
今回はただ君の頭が硬すぎて変な思い込みしちゃったってだけの事件
それ以上でも以下でもない GitHubほど大きいところがjQueryなんて大味なライブラリ使っちゃ駄目だろ
もっと軽量なものだけにして後は自分たちで最適化したものを開発するだけのメリットが有る >>485
>? 比較するなら>>463ベースの複数処理と
>? jQueryでの複数処理じゃないの
ぷぷぷ >>463のどこが複数処理なのか
DOM APIも理解してないやつが、DOM APIすごいとか
言ってるんだよな。傑作だwww >>487
> GitHubほど大きいところがjQueryなんて大味なライブラリ使っちゃ駄目だろ
だから大味なライブラリじゃないってことでは? GitHubほどの大きい所がjQueryを使ってるんだから
信頼性は高いだろう
どこの馬の骨ともわからんやつが、
大手が使っちゃダメなんだって叫んでも信用できない jQueryって文字があると使ってる事になるってマ? まずは>>482の記事読めよ。
そんなだからjQueryバカはバカにされるんだよ。
そんなだからGitHubに捨てられちゃうんだよ。 Vueってやつが都会じゃナウでヤングなハイカラらしいってばっちゃが言ってた そういや、jQueryはこれからも使われ続けるって言っていたやつが
↓のスレたてたっけ
2017年 JavaScript★71.9%ものサイトがjQueryを利用 [無断転載禁止]©2ch.net
https://medaka.5ch.net/test/read.cgi/prog/1485008061/
今どうなったかな? あと2ヶ月すればスレ立てて2年立つけど
https://w3techs.com/technologies/history_overview/javascript_library/all
jQuery
72.9%
72.9%
73.0%
73.1%
73.2%
73.2%
73.4%
73.3%
73.2%
73.3%
73.3%
73.4%
73.3%
73.3%
やっと73.2%〜73.4%で安定したみたい。 GitHubがjQueryの使用をやめたのは分かったがなぜjQueryがバカにされるのか分からない 馬鹿にしている方もわかってないんだから
誰にもわからないだろうさw 2015年6月1日
jQueryは有害なのか
https://postd.cc/jquery-considered-harmful/
これが3年前か。ディスってたやつって今どんな気持ちなんだろう? むこうでもいるいらねの喧嘩になってんじゃん
ここと一緒だな githubなんてオタクの相手だけしてりゃいいんだからjqueryも簡単に捨てられるわな
githubはjqueryのことバカにはしてないけどな jQueryディスるのにGitHubを持ち出してきた奴がバカだってことでよろしいでしょうか? githubのようなシステム屋なら
技術者がたくさんいるからjQueryなくてもやれるんですよ!
社長。githubに勝てると思いますか?
うちでは無理です。 JavaScript使ってますけどjQueryは使ってませんっていうのは
全世界で2.8%しかないのな 会社で一人でもjquery使ってたら会社丸ごとjqueryユーザ理論 どうやって一人がjQuery使ってるって調べるの?
調べる方法がない=そういう統計も出せるはずがない
と思うけど? >>488
?
例えば>>463ベースなら、querySelectorAllでforなりmapなり書かれたものと
>>469の$('[name="test"]').each云々を比較するならわかるが
複数処理の場合、単数処理である>463とは別の見地なんだから
>でもそうすると>>463よりも長くなってしまう。
みたいにコードの長さを気にしている意味がわからんというか違和感だらけなんだが。 そもそも>>464を>>463に合わせてかつ全部jQueryで書くと
var elm = $('[name="test"]:eq(0)');
console.log(elm.attr('type')==="text");
なわけだろ(てか>>469のコード間違ってね?5行目あたり'text'じゃなくtypeじゃないの)
>>463が82文字で
上のコードが75文字だから
別に>短くかけるという俺の主張に反するから
には反してないよなぁ
一体何を気にして>>464を投稿したんだろうか 一つの処理だから:eq(0)すらいらなかったわ >>513 >>513
> 例えば>>463ベースなら、querySelectorAllでforなりmapなり書かれたものと
あのさぁ、>>463にかいてあるquerySelectorを
しれっとquerySelectorAllに変えないでくれないかなぁ
気づかないとでも思ってんの?
ほんと、いつもお前のやり口は卑怯 >>514
jQueryオブジェクトから[0]で0番目のDOM要素が
取れるっていうのもjQueryの機能なんだわ。
jQueryではDOM要素も併用する
簡単に併用できるってことも特徴のひとつなわけ >>513
jQueryで単数で処理するなら
var elm = $('[name="test"]')[0];
これになるわけよ。これ。単数 var elm = document.querySelector('[name="test"]');
console.log(elm.type==="text");
var type = $('[name="test"]').attr('type');
console.log(type==="text");
まあどうしてもっていうのなら、こう書いてもいいけどさ >>514
> 一体何を気にして>>464を投稿したんだろうか
>>464と全く同じ結果(要素が見つからないときにエラーになる)
をもたらす同等のコードのjQuery版
まあ普通はエラーになるのは良くないが、
それを許容すれば、さらに短くなるということ >>518
>jQueryの機能なんだわ。
メンバ演算子がjQueryの機能・・・???? >>517
>気づかないとでも
?? 隠してないが?
>いつもお前のやり口
????
>>469
(1)>>463に合わせ単数
(2)jQueryで、かつ短く書きたい
(3)単数版$('[name="test"]').attr('type')、または
(4)複数対応版(略
(5)単数版>>463と比べ、コードを短くしたい
3→5はいいとして
4→5は別物コードなんだからコードの長さが違うのは当たり前じゃないの
>でもそうすると
でも、ってなんなの 同じものの比較
単数版DOM API(要素がない場合にエラーになる版)
var elm = document.querySelector('[name="test"]');
console.log(elm.type==="text");
単数版jQuery(要素がない場合にエラーになる版)
var elm = $('[name="test"]')[0];
console.log(elm.type==="text"); 単数版DOM API(要素がない場合にtypeがnullになる版)
var elm = document.querySelector('[name="test"]');
var type = elm ? elm.type : null;
console.log(type==="text");
単数版jQuery(要素がない場合にtypeがnullになる版)
var type = $('[name="test"]').attr('type');
console.log(type==="text"); >でもそうすると>>463よりも長くなってしまう。
あきらかにコードの長さに言及してるんだよなぁ・・
そして別物コード同士の比較が動機になっているという 流石に>>525見れば、同じものがどういうものか
理解したようだな 少なくともおれは別物コードの比較で長さを気にしてることに違和感を感じたことしか言ってないわ
そしてまだ回答は得られていない 別物のコード比較ってなんのこと?
そんなことしてないけど
>>525-526みて満足したなら帰れよ 最初から>>469の
>それはどんな場合でもjQueryの方が短くかけるという俺の主張に反するから
>またこうすれば、0個から複数全てに対応できる
>でも
の違和感について>>524しかきいてない はぁ?理解力無いのか。同じことを実現するなら、
どんな場合でもjQueryの方が短くかけるんだよ >>532
君だよ理解してないのは。
こちらは、短くかけないとは一言も言ってないぞ
typeとtextを間違う程度のレベルだからしょうが無いだろうが 短くかけると言ったのは俺だってーの
お前の話なんか知らんわ 短く”かけない”
な
typeとtext間違えるは、聞き間違えるは
どうしようもないなほんと だから俺が短くかけると言って、
お前は何も言ってないんだろ?
何も言ってないなら、そこで終わりだろ いや、強いて言えばおれは
>>463の単数 と jquery単数版
も
>>463の複数版 と jquery複数版
も短くかけると思ってる
おまえはなぜか
jquery複数版 と >>463の単数処理(あえて版とは言わない)
でコードの長さについて言及している>>469 あれみて、jQueryの複数版とDOM APIの問題がある版(あえて単数版とは言わないw)
で長さ比較してると思ってるのかw
jQueryだと普通に書いたら、DOM APIのような問題あるコードは簡単に排除できるんだよ。
それじゃ比較にならないから、最初にDOM APIと問題があるコードにしたんだろ
同じもので比較するために いや>>469のどこをどうみても
>でもそうすると
というレスの前に、
>一つだけ処理する場合でも と >またこうすれば 複数全て云々
が書かれている
それらに対して逆説として、>でもそうすると
が書かれており、その直後に>それは
と書かれていることから>>469が
単数処理である>>463のコードについて>長くなってしまう
というコードの長さについて触れているのは明確
決定的なのは、仮に、
複数版である>またこうすれば、 略 ="text"); })
の行を消去した場合、>一つだけ処理する場合でも云々
のコードは既に>>463より短いため、
>よりも長くなってしまう
の意味は通じなくなる
これらのことから、
>でもそうすると>>463よりも長くなってしまう。
とは>複数全てに対応できる云々の複数版コードの長さについて
言及していたものと思われる 俺はjQueryを使えばいかなるDOM操作も
同じことをDOM APIを使うよりも簡潔に書けるって
言ってるだけなのに、どうも関係ない所に反応するんだよなぁ
反論しないなら意味不明なこと言わなくていいのに 質問の主旨は>>460
判別する手段を与えてあげればいいだけ
短くできるとかいう主張はまさに
まったくもって関係ないところ そしてその答えがこれなわけ
464 名前:Name_Not_Found[sage] 投稿日:2018/10/13(土) 23:58:51.51 ID:???
var elm = $('[name="test"]')[0];
console.log(elm.type==="text");
これに対して関係ない質問をするなってこと まとめると>>464が何の進展もない駄レスしただけの話 おれならわざわざjquery使って同じような回答するくらいなら
console.log( $('[name="test"]').map((i,_)=>_.type) );
判別手前だが、こういうのでいいじゃんと思うわ
そもそも>>460のレスから察するにコードすらいらないと思うわ
おそらくelement.typeで取得できるかどうかを知りたかったレベルだろうし >>464は>>460にレスしてるわけで何の問題もない
問題はその>>464に意味のない質問をしたやつ >>548
お前なに自分でコード書いて、自分のコードが不要だっていってんの?
> おそらくelement.typeで取得できるかどうかを知りたかったレベルだろうし
それが>>464だろ? typeが取得できるかどうか だれにレスしてるかもわからん馬鹿 >>464
質問者に安価つけてる>>463 ここで解決
typeで取得できるのを示唆する目的なら>>463で終わってる話 なんだ。単に誰にレスしてるのかわからんかっただけかw そう 解決してるのにわざわざ同じようなレスしちゃった馬鹿がいるんだよなぁ jQueryを使った例ってだけですが?
自分の気に食わないレスだから叩いてるんだね。
これからも頑張らなきゃ(笑) このスレ的にはjQueryの存在が害悪だな
必要のない諍いを生み出す やっぱりいち早くjQuery使って回答してすでに答えが出てるから
そんな冗長な例出すなって流れにしないとダメだな
質問が来てるのには気づいていたんだが
ちょっと放置したのがまずかった そう最初からjquery使ってれば>>464の馬鹿が>>463真似して馬鹿なコードも書くことがなかったのにな わかった。今度からjQueryのコードが出るまで待つことにするよ え、もしかして土曜からずっとやってんの
お前ら働けよ… jQueryだと短く書けるモン!とか言って
$('[name="test"]')[0]
みたいなコード出してくるのホンマ草www
$が何千行の関数なんだよとww
それゴマカシていいんだったらjQuery あろうがなかろうが俺ならもっと短く書けるぞ。
a()
ほらよバーカw a()が何も書かないで期待通り動いてくれればいいねw $は何千行にも渡るコードなのにノーカンw
aは何も書いてはいけないww
jQueryだと短く書けるモン!君のオレオレルールにはかなわねぇwwwww >>568
当たり前じゃね?
jQueryは汎用のコードですでに動くものがある。
それにたいしてa()は中身を書かないと使えないんだから。
問題を出す前にすでにコードが有るなら使えると言えるけど、
問題聞いてから作らないと使えないんじゃね 有る前でも後でも質問者にライブラリのインストールを強いるなら同じこと
jQuery使おうぜっていうのはBabel使おうぜとかRust.js使おうぜって言ってるのと同じことってことが何故わからない
自分の好きなもの勧めるのは悪いことじゃないけれど
それが普通とか勘違いするのは駄目 いや、そうじゃなくて
ライブラリのインストールをするだけで終わるのと
自分でa()の中身を書かないのと行けないのじゃ
ぜんぜん違うでしょと言う話だ インストールするだけ(約100kB ASCII文字にして10万文字) 最終的な主張はそれか。
ま、いいだろ。ずいぶんしおらしくなった。 a()の中身を書けばa()だけで呼び出せる!
って言っていたことについてはなかったコトにするつもり? >>575
a()と書くのがスマートだからそっちにしろと言ってるわけじゃなく
下手をするとそれと同程度な行為に捉えられ得るという悪い見本として言ってるんだが
>>571
jQuery乱用解答へのの批判として
jQueryの読み込みscriptタグ貼ったら文字数の差が無くなるような例が多い中
全然「全然」違うってことはないよね
jQuery使ったら全然違うように書き手がだけが勘違いしてる事のほうが多いよね
もう一つ短い解答への批判として
別にa()の中身がライブラリ使ってないとは言ってないんだから
そうやって質問者にできるだけコードを読み書きする負担を与えず問題を解決するコードを提示するのって
質問者が自ら学ぶという目的のこのスレに於いて良くない行為だと思うんだよね
回答者はjQueryとか自分が好きなアピールしたい技術があって、
自分の思いつき解法を公開したくなったとしても
ぐっと我慢して質問者が自分で考えて解決できるようなヒント程度の提示にして
あとは質問者とよく話し合って導くことが大事だと思うんだよね
スマートだと思う解答をポーンと投げるだけ、そして後は批判合戦は違う
最後に、これはjQueryを使わない解答にケチが付いた流れに対して言ってる一般的なことで
その他の具体的な質問・回答は関係ないからね 原理主義者は何を言っても改宗しないので時間の無駄だよ jQuery原理主義者は悪魔だと思う
親切な顔をして実際はポリフィルも自分で組めない
jQueryの範囲でしか何もできない無能を作り出して
自分より優秀な人材が育たないようにしてる悪魔 jQueryが原理主義になるわけがないだろう
だいたいこれDOM操作ライブラリやで? jQueryの素晴らしさの一つは、セレクタを自分で拡張できるところだと思う
DOM APIではできないことができる。 原理主義ってのは人の考え方のことよ
スレに張り付いて3連続レスもできる気持ち悪さのことよ 原理主義の原理の意味もわかってないのか
原理主義と言いながら、ただの主義の話をしている とにかくjQueryがいいってんなら原理主義だろ
違うならたまにはjQuery以外の話してみろよ ごめん、原理主義は意味が違うらしいな
絶対主義だな jQueryがいいと言ってるが、jQueryですべてできるなんて思ってない。
jQueryはDOM操作ライブラリなんだから、例えば日付の計算にjQueryは使えない
つまり、jQueryを使ってる人はjQuery以外も使ってるということ 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。 >>581
もちろん俺の希望だよ
俺が俺の意見以外言えるはずがないじゃないか
何当たり前なこと言ってるの?
>>581だって希望であってほしいという君の希望だろう? 「ストローおじさん」って知ってる?
昔、映画館とかに置いてあったタン壺(みんながカ〜ッペ!とタンを吐く壺)に
ストロー突っ込んで全部飲み干すらしいよ。ゴックンゴックン!
ストローが透明だから飲んでるのが丸見え!
たまにハナクソが詰まるらしいけど、思いっきり吸って食べるらしい。スッポン!
ちなみにストローは絶対に洗わない方針だそうです。
「どんぶりおじさん」もいるようです。
タン壺を熱いご飯にぶっかけてジュルジュル流しこむように食べるそうです。
ごはんの上にハナクソとか鼻毛が丸見え!
汁はご飯の隙間を通って下に溜まるけど、全部飲み干すそうです。ゴクゴク! >>589
> もちろん俺の希望だよ
> 俺が俺の意見以外言えるはずがないじゃないか
意見と希望は違う
意見を言ったんじゃなくて希望を言ったんだね。
そう書いているもんね
> >>581だって希望であってほしいという君の希望だろう?
それは希望ではなくて指摘。その指摘に対して、
あんたはそうだと答えた。 指摘も希望も意見も大した違いはないでしょ
君が希望と言うんなら希望で良いよ
お、こいつ、自分の発言を希望と認めたな!!!
で、だからどうなるのって感じ > 指摘も希望も意見も大した違いはないでしょ
それもお前の希望だなw
↑これは指摘。ぜんぜん違う jsの前に日本語勉強しなおした方がいいんじゃねえの jQuery君は希望的観測という言葉を知ってるのかな 希望、指摘、意見に続いて、
今度は新たに希望的観測が増えました。
用語を増やして何がしたいんだろう? >>593
だから俺のが希望でお前のが指摘でいいけど
それで何がどうなるのかって話だよ ん? jQueryユーザーを根拠なく貶めるのが目的だったんじゃないのか?
jQueryユーザーとはこういうものですーという書き込みが単なる希望だと自白した。
つまり、jQueryユーザーとはこういうものであってほしいんです。という書き込みだった。
それで何がどうなるかって?
jQueryユーザーを貶めることに失敗したってことだろう jQuery君の目的はjQueryのメリットを唱えて支持者を増やすのが目的でしょ >>598
jQueryユーザーを貶める?
なにトチ狂った意地の悪いこと言い出してるんだ?
>>579に書いたように、俺は俺の思ったことを素直にそのまま書いただけ
それ以上でも以下でもない
それにjQueryユーザーがとは言ってないし、勝手な被害妄想して変なケチ付けんな 君たちどっか他のところ行ってくれませんかね…わざとなんだろうけど 喧嘩してるように見せかけて
両者とも何か共通の目的のためにやっているのだとしたら… jQuery厨は相変わらずうざいな。いよいよ余裕なくなってきたかw > 俺は俺の思ったことを
事実ではなくて、希望を書いたらしいなw だから「思う」って書いてるでしょ?
しつこいね君は
そもそも悪魔が事実だったら大事じゃん
最近勝手に煽られたと思い込む煽り耐性マイナスのやつ多いね
短期で余裕がないっつうか そっちじゃねーよw
> 親切な顔をして実際はポリフィルも自分で組めない
> jQueryの範囲でしか何もできない無能を作り出して
> 自分より優秀な人材が育たないようにしてる
↑これが事実ではなく、お前の希望だっていってんの お前らスレ違い
ここは品評スレじゃなくて、質問用スレ
回答者の価値観を問うところではない
いい加減に成仏しろよ 無理です
jQuery君は数年前からこのスレを見張っており生き甲斐なのです .cssのファイル内の値を動的にできないでしょうか
HTML側はjsもphpも使用不可なのですが、
cssファイルは別サーバーに置ける為、使用可能です 具体的には、
タイマーで、ある特定の期間だけcssファイルで指定しているheightの値が変わるように仕組みを作りたいんです。
バッチファイル+タスクスケジューラでアップロードする方が現実的でしょうか? >>611
サーバ側でクロンでも書けばいいじゃない >>610
jsも別サーバーに置けないの?
っいうかなんだってそんなことに? >>612
それが一般的な方法ぽいですね・・
>>613
jsはcssと同じ外部サーバーに置けます。
ECモールだとこんなのばっかりですよ >>614
> それが一般的な方法ぽいですね・・
いやいや、一般的ではないよ。
特定の期間以外はCSSファイル見てもわからないようにしたいっていうのなら話は違うが
cssファイルを動的に生成するのは一般的にはアンチパターンだよ
(ついでにいうとJavaScriptファイルも動的に生成しないほうが良い
必要ならばJSONデータを動的に生成してしようする)
>>611
> タイマーで、ある特定の期間だけcssファイルで指定しているheightの値が変わるように仕組みを作りたいんです。
「ある期間」っていうのが午前、午後やタイムセール、キャンペーン期間中みたいに
特定の言葉で表せるのであれば、以下のようなCSSを書く
div { height: 100px }
.sale div { height: 200px }
HTMLの<html>や<body>なんかのclassで現在の期間を表現する
例えば <body class=""> or <body class="sale"> みたいな感じ
ここまではCSSの範疇だからJavaScriptしらない人でも画面デザインだけ担当できる。
でJavaScriptで特定の期間を判断して<html>や<body>のclassを書き換える
用途は違うがModernizr (https://modernizr.com/) でも用いられているテクニック
見ての通りJavaScriptもCSSも静的で作れる
これが一般的な方法 >>606
だから希望でも何でも良いよ
俺は俺の思ってることを素直に書いてるだけだから
君がどう捉えたかという話はどうでもいい
好きにして 俺は事実を素直に書いてるだけだから
>>579が間違いだから、間違いって書いただけ >>615
なるほど。
>でJavaScriptで特定の期間を判断して<html>や<body>のclassを書き換える
しかし、セキュリティ的な問題か何かしりませんが
html側のサーバーにはjsを効かせる事はできません。
cssのみ可能なのと、そのcssの外部サーバーにはjsを置く事はできます。 >>618
その外部jsをhtml側から読むことはできない設定(?)なんだよね? >>617
うーん、最初からそれだけでいいじゃん
君が突っ込んだ色々な不思議ポイントは結局全部君の思い込みだったわけだしね
恥ずかしい人 >>618
> しかし、セキュリティ的な問題か何かしりませんが
> html側のサーバーにはjsを効かせる事はできません。
>>614で
> jsはcssと同じ外部サーバーに置けます。
ってかいたよな?
jsが使えないのに、わざわざ置けますって言ったのか?
そりゃ置くだけなら置けるだろうけど、動かないんじゃ
置いたって意味ないじゃん >>620
あんたのレスが「思い込み」と指摘されたからって
相手にも同じ言葉を無理やり使おうとしなくていいよw
日本語がおかしくなってる 意見も希望も主観には変わらないわけで、その定義に拘って議論するのは馬鹿馬鹿しい >>619
はいそうです
>>621
なるほど、phpファイルのheaderでcssファイルとして認識させるようにすればいいんですね
>>622
はいそうです。直接jsファイルは読み込めません。すみません。 >>625
もしくは.htaccessとかで-.cssが呼ばれた時-.phpを呼ぶようにcssを置くサーバーで偽装する >>621
こんだけ限定された条件だと
これに一票かなあ 初心者です。
if (!args.length) { 処理 } の条件を日本語訳してもらえませんか?
argsは変数なんですが、lengthは変数じゃないです。
変数argsの長さじゃなかったら? でしょうか。。おねがいします >>628
否定 javascript
か
falsy javascript
あたりで検索してみるとか lengthは長さを数値で返す
数値をそのまま条件にすると
0は否、0以外は正。
それを!で逆転してるので
長さが0であれば、の意。
※argsが存在して配列や文字列などlengthメソッドが働く前提 ありがとうございます!よくわかりました。これで先に進めそうです。またお願いします 適当に書くときはいいけど
慣れちゃうとちょっと怖いよね
args.lengthがundefinedでもnullでもfalseでも通っちゃうし >>633
それが排列であることを確定させているなら、問題はないかと NodeRedって流行ってるの?
知識ない自分の力量不足だけど使いにくい… >>636
ハイパーカードを思い出す
これでできる範囲のことであれば楽できるね
ってやーつだと思ってる >>638
簡単なUI作ったりするのは便利なんだけどDBとのやりとりとかExcelに出力したりさせようとしたら訳わからなくなって詰まった
こういうのをNodeRedでやろうとするのが間違ってるのかなぁと思ったり >>631
lengthはプロパティでもメソッドでもなくプロパティアクセス時にArrayの内部プロキシによって特別に扱われる名前
アクセサメソッドにも近い Pythonを学習中です。
Webの事は全くの素人です。
スクレイピングや可視化する際、CSS XPath JavaScriptなどの事が分からなくて行き詰まってしまいました。
PythonとJavaScriptではじめるデータビジュアライゼーションという本で詰まりました。
知人にJavaScript第5版という古い本をもらいましたが、言語仕様が延々と書いてあるような感じで、自分には早過ぎました。
CSS、XPath、JavaScriptこの辺りを体系的に学べるおすすめの本あったら教えて欲しいです。 >>640
今でも読まれるたびに数えてんですかね? うろ覚えだが呼ばれるたびに数えてたことはなかっただろう
更新のたびに内部プロパティを更新してそれを読み出すような仕組みじゃなかった? >>641
HTML, CSS, JavaScript は、初心者用の本を読む。
CSS セレクターは、jQuery で学ぶ
または、CSS セレクター・XPath は、入門用サイトを見る
CSSセレクターは、jQueryの本に書いてあるけど、
XPathは、どの本にも書いていないから、入門用ウェブサイトを見る
XPathは重要度が低いから、無視してもよい。
CSSセレクターを使う方が、読みやすい プログラミングは体系的には学べない
分からなければ分かるようにならない
でもそこで諦めたらそこまで
「言語仕様が延々と書いてあるような感じ」と思ったのなら
分かったのが0ということではないはず
最悪書いてある日本語は読めるのだから、1万分の1は分かるだろう
なら5万回分読めばいい
そしたら1-(1-0.0001)**50000で0.9932637373893968で99%理解できる
分からなくてもほんの少しは分かるまで血を吐きながら無理やり頑張る
その繰り返しの修行で覚えるのがプログラミング 俺もXPathは後回しでいい…ってかやらなくてもいいと思う。
昔はCSSセレクタより表現力高いからとか言われてたがよくも悪くもXML全般に使われる汎用仕様だからな。
HTML/CSS仕様に寄り添い、技術要素疑似セレクタも使えて素のJavascriptやjQueryなどでも手厚くサポートされているCSSセレクタ覚えたらWeb系技術以外扱わないならXPathなんて正直いつ使うんだっていう。
Javaとかやるなら別だけど…
あれか、Pythonと一緒にやろうとしたからPythonライブラリの都合に引っ張られちゃったんだな! >>647
書いてて恥ずかしくならない?
読んでて赤面したわw どうもありがとうございます
結果的にPythonスレとマルチポストになってしまっていたらごめんなさい。
>>646
PythonスレのRubyの方ですかね?
その節はありがとうございます。
初心者用というのはHTML5の初心者という事ですよね?
よく分かる〇〇とかいちばんやさしい〇〇だとか過去に読んだことあるんですが、その手の本ってパソコンそのものの初心者が対象なのか、
〇〇のコードを使ったらハンバーガーメニューが出せますとか、このコードを使ったらこういうレイアウトに出来ます。今流行りのスマホPC両対応のレスポシブなんちゃらのカッコいいホームページを作ろう、みたいな。
そういう本って理屈は置いておいて、カッコよさげなホームページが作れた。よかったね、っていう感じの本だから、
それぞれのコードの中身や用語の解説じゃないから結局提示されたcssのコピペだけで終わり訳もわからず応用が利かず結局何も身に付かなかったです。
オライリーからPythonの本が大量に出てるけどそんな感じの本があればいいんですが。
>>647
やっぱ甘えてますね、自分。
辛いけど、出来るようになりたいから読むしかないのかぁ。 >>648
Webサイト作りそのものには全く感心は無いんですが、Pythonを学ぶうちに作ったデータの可視化をWebでやりたくなりました。
Pythonを学んだら今までは怖かったJavaScriptも基本的な文法はPythonで書いた場合を考えながらやればJavaScriptでもSwiftでもObjective-Cも何となく理解出来るようになりました。
JavaScriptもWeb用のナニカじゃなくて、これもPythonと同じプログラム言語だと分かったのでおもしろくなってきたました。
XMLを弄るにもXPathが分かれば簡単に弄れそうなんですが、XPathそのものが難しい。
Chromeの開発者ツールの使い方も分からないままだし。
>>649
けど、正論だと思いました。
オライリーからHTML5という本が出てますけれど、7年以上前の本だからやめておいた方がいいでしょうか?
>>641 で読んでる本の最初のページにこんなイラストが載ってました。
https://i.imgur.com/H3vQCNy.jpg
まさに自分もこんな認識です。 >>651
セレクタを覚えるなら、jQueryよりCSSを覚えた方が良い
jQuery拡張記法を覚えても何にもならん
https://triple-underscore.github.io/selectors4-ja.html
XPathは今でもCSSセレクタ以上の事が出来るが、日本語の資料は多くないので、初心者向きではないだろうな >>645
Array(10).length = 1; // これはsetterでは? getter, setterという場合、
Array(10).getLength();
Array(10).setLength(5);
などのようにメソッドの形を取る。
Array(10).length = 1;
は上のsetLengthとやることは同じだが、(実装はどうあれ)プロパティ形式を取っているのでsetterとは呼ばない。
なお説明に使っただけでArrayにgetLength、setLengthとあったメソッドは無い。 TypedArrayのlengthはgetter,setterだが
Arrayのlengthは内部プロキシが特別に扱っている名前というだけ >>656
Atrayのlengthはset/getが使えなかったときからある。だから>>655 漏れが、XPath を使うのは、CSS セレクターでできない場合だけ。
例えば、5ch の書き込み内のa タグを抜き出すなら、
このCSSセレクターでできるけど、
div.thread > div.post > div.message > span > a
a を含む、post_node だけを抜き出す場合、
div.message の子孫で、aタグを含むものがある場合、
そのaタグの祖先のdiv.post を抜き出す。
(自分の処理では、div.postを主体に処理している場合)
CSSセレクターでは、div.message div.post a
descendant は子孫、ancestor は祖先。
post_nodes = doc.xpath "//div[@class='thread']/div[@class='post']/div[@class='message']/descendant::a/ancestor::div[@class='post']"
子孫に何々要素がある場合の、その祖先を求めるとか、
条件が複雑で、CSSセレクターでは表せない場合だけ、XPathを使う
jQueryのCSSセレクター一覧表を見て、それでできなければ、XPathを使う :has擬似クラスが仕様に入ったからXPathの出番はますます無くなる jQueryは:hasに独自で対応しているから、JavaScriptでは
もうXPathの出番はなくなってるね。 XPathってJavaScript以外で使えたっけ?
jQueryで:hasが使えるならもういらないような >>662
なに言ってんだ各言語にライブラリ出てるよXPathくらい… >>657
その理屈はおかしい
lengthはProxyがない時代からある 漏れは、Ruby のNokogiri で、XPath, CSS セレクターを使っている Proxy APIの話ではなくプロパティが設定されるときに働く
[[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
分かりやすく内部プロキシと言い換えただけなのにね >>666-658
同じ言葉をそっくり>>657に返したいね
> Atrayのlengthはset/getが使えなかったときからある。だから>>655
setがなくても、setterとして機能があればsetterだろう
lengthプロパティ代入時に処理が働くのだから、setter以外にそれを実現する方法はない
ついでにいうと、>>654もおかしい
プロパティだからsetterじゃない、とかどの言語の話だ? >>668
>>653からどうしてその話が出てくるんだ?
おまえのいってるのは、
Array(1)[3] = 1;
だろう Proxyでのハンドリングもsetterと言うのならArray#lengthもsetterと呼んでいいと思うけど
普通JSでsetterって言ったらプロパティディスクリプタがアクセサタイプでsetにメソッドが入ってる状態を言うと思うけどな >>671
いや、数値文字列と、lengthの2種類ともを特別に扱ってるんだよ MDNはprototype経由せずDateやらArray やらから直接生やされたメソッドを静的なメソッドと表現したりクラスベースの人に配慮した柔軟な記述見かけるよね。 >>674,675
その疑問は全てここまでに書かれてるよ
もう一度読み直してみて >>677
> [[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
> 分かりやすく内部プロキシと言い換えただけなのにね
これがProxyの条件か?
ただの内部 プロパティを書き換えるだけでProxy扱い
しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな > しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな
訂正する
Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
しかし、他所のプロパティ [[DefineOwnProperty]] が書き換わるだけで、lengthプロパティはProxyの動きをしていない こういう事かな
const a = [];
a[0] = 1; // 668「a[0] はProxyなプロパティです」→OK
a.length = 0; // 668「a[0]を書き換えるa.lengthもProxyなプロパティです」→ん?
この場合、a.lengthを書き換えるa.fooを定義したら、a.fooもProxyになる
Proxyが感染していく >>679
大きな勘違いしてるね、Arrayのインスタンスオブジェクトはlengthと言う通常のプロパティを持っているが
それと同時に数値文字列と"length"という文字列のプロパティ設定に関して特別な振る舞いをするんだよ
つまりProxyのようなのはArrayのインスタンスの事であって、
そのプロキシは"length"プロパティアクセスがあると、間接的にlengthプロパティを設定して配列の要素を調整すると言う動作をするんだよ
ただし、setterとは違うという話 ようそこまで内部動作把握してるな
こういう人はそんなの当然って言うんだけど大半の人はそんなの無理 アニメスレに沸く小説板から来た設定厨を思い出しました。 >>682
勘違いなどしていない
setterのトラップで内部プロパティが書き換わるだけ
setter以外のトラップが必要なら、それを示してくれ >>681
やっとわかった
ラッパーって言いたいのかw >>686
誰もわかってくれないからって自己レスするな >>668は確かにwrapperって感じだが、wrapperとsetterは両立出来るんだよなあ ぶっちゃけ、>>653がsetterで実装できなくて、Proxyでなければ実装できない機能って何なの? >>685
勘違いというか、全く分かっていなかったんだね
実際Arrayオブジェクトのlengthはsetterではないということが話の肝
Arrayのlengthは普通のオブジェクト固有のプロパティだ
Object.getOwnPropertyDescriptor( Array(1), 'length' )
// {value: 1, writable: true, enumerable: false, configurable: false}
参考までにTypedArrayのlengthは共通親クラスから継承したgetterだ
Object.getOwnPropertyDescriptor( Uint8Array.__proto__.prototype, 'length' )
// {get: ƒ, set: undefined, enumerable: false, configurable: true}
ならArrayのlengthへ値を代入したときの振る舞いなどはどう説明するのかといえば、
Arrayオブジェクトのプロパティ設定のトラップでlengthを特別扱いしてるということだ
そしてそれはもちろんsetterとは違う
言い換えればArrayオブジェクトはそのただ1点を除いて普通のオブジェクトと何にも変わらない
[ 'a', 'b', 'c' ]は{ '0':'a', '1': 'b', '2': 'c', 'length': 3 } と全く違いはない
ただたった一つ、[[DefineOwnProperty]]内部メソッドの振る舞いが違う、
プロパティアクセス時に'length'と数字プロパティへの設定を特別に監視するということだけが
ArrayをArrayたらしめてる理屈 >>679のこの行がそもそもだいぶトンチンカン
>>Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
[[DefineOwnProperty]]は内部「関数」なのだから、書き換わったりしない、呼ばれる対象
そしてlength要素に設定時に適宜配列のプロパティが消されるから呼ばれるのではなくて、
length要素設定時にこれが呼ばれたときに間接的にプロパティを消してる、因果が逆
因みにプロパティが消されるときに呼ばれるのは[[Delete]]
[[DefineOwnProperty]] はこの場合関わらない そもそも、length に設定するのが、おかしい。
意味不明のソースコード
普通は参照しかしない new Int8Array([1,2,3]).__lookupGetter__('length')
//=> f length() { [native code] }
[1,2,3].__lookupGetter__('length')
//=> undefined
ほんまやTypedArrayのlengthにはGetter設定されてるけどArrayは無い だからtypeof new Arrayは'object'なんだよな
そこしか違いがないから 大雑把にはわかっていたつもりだったけど
詳しい説明ありがたいわ jQueryの.nextUntil() をJavaScriptで書くのは難しいでしょうか? >>700
難しいかどうかはその人のスキルによるとしか。。。 困難かという意味ではそうでもないかも
parentNodeのChildNodesを、その要素以降順に見ていくだけだから
ていうか、jQueryだってJSで書かれているわけだしね 質問を変えて、jQueryの.nextUntil()をDOM API以外のライブラリを使わずに
10行以内(セミコロン不使用、横80文字まで、普段やらない書き方を使うのなし)で
作れるでしょうか?だったらどう? まず親要素のquerySelectorAllで
セレクタにマッチする小要素を全部取り出しておく
目的の要素のnextSiblingが、上のマッチした要素群に含まれれば当たり
なければ次のnextSiblingを見る
なんとか80字でいけるか? 全部取り出しておいてfilterしてもいいし、
ただ単に次の要素を見ていくだけのイテレータでもいい
5行くらいの関数で書けるんじゃない? function nextUntil(el, selector){
const result = [];
while(el = el.nextElementSibling){
if(selector && el.matches(selector)){
break;
}
result.push(el);
}
return result;
}
こんな感じか。matchesはIEで動かんからポリフィルを追加して
https://developer.mozilla.org/ja/docs/Web/API/Element/matches はー
matchesなんてあったんだな
勉強になる function * nextUntil ( el, sel ) {
while ( el = el.nextElementSibling && ! el.matches( sel) )yield el
} >>707
上手く行きました。
凄いですね、こんなのを書けるなんて。
>>710
私にはレベルが高すぎて付いて行けません。
結果の取り出し方を教えて下さい。 >>710は単なる技術マウントだから無視してよい。 技術マウントだからと言って無視するか、
技術を勉強するか
どちらを取るかね? >>711
>>710は代入演算子と論理積演算子の優先順位を間違えているから結果がバグっている。
修正してオプションのfilter足してjqueryのnextUntilの
http://js.studio-kingdom.com/jquery/traversing/next_until
のデモと同じことする使い方を
https://codepen.io/anon/pen/VVwdQB
に上げた。
しかし結果を配列でまとめて取り出す使い方しかしないなら
https://codepen.io/anon/pen/YRzvWa
みたいになりわざわざジェネレータ使う意味ないしこんなことするなら>>707のほうがいいな。 >>715
=>
...
yield
など知らない文法ですが、テストしたら動きました。
大変参考になりました。このコードが理解出来るように勉強します。
ところで707 nextUntilを応用してnextAllを作ってみたのですが、これで良いでしょうか?
function nextAll(el, selector) {
const result = [];
while (el = el.nextElementSibling) {
result.push(el);
}
return result;
}
一つ質問ですが、const指定しているresult変数に値を代入しても良いのですか?
定数なら変更してはいけないような印象を受けるのですが。 >>719
良く分からないのですが、
C言語などならconst指定があると値を代入出来ませんよね。
JavaScriptのconstはそうでは無いのですか? >>720
result = 1;
で正しくエラーになる >>721
ではJavaScriptにはCやC++のconstに相当するものはありますか?
つまり一切変更出来ない定数。 CやC+に一切変更ができないconstなんかありません chromeだけど、dataスキームで新しいタグ開いてhtmlを表示させたいんだけど
data:text/html;云々をwindow.openするとabout:blankになってしまうたすけて
(data:text/html;云々を直接urlボックスにいれて移動、は表示される) >>722
一切変更出来ないとは?
変更不可対象を明確にしろ constは名前に対して働くもので値に対して働くものではない >>722
そもそもがcのconst勘違いしてないか。
プリミディブ値ならjsのconstでも同じように使えるし、
cではjsのconst OBJ = {a: 1, b: {c: 2}};みたいにオブジェクト直接入れるみたいなことはそもそも出来ない。
ポインタ使うにしたってOBJ.aやOBJ.b.cなどメンバーを書き換えられてしまうことは同じ。
まあやりたいことは分かる…気がする…
以下にdeepFreezeの実装例出てるから参考にしてみたら?
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
こういうことでしょ?違う?
https://codepen.io/anon/pen/EQxJKB >>725
いろんなサイトでconsole開いて実行したので、jsfiddleのコードに書いて実行してしまうと若干挙動が違う気がするので
具体的には
window.open('data:text/html;charset=utf-8,'+encodeURIComponent('<!DOCTYPE html><html lang="en"><body>hoge</body></html>'));
を適当なサイトでコンソール開いて実行
一応jsfiddleでもやってみたけどポップアップ禁止みたいなのが出てきた
https://jsfiddle.net/pLdojb9w/
ポップアップ許可するとabout:blank ちなみに用途としては
とあるサイトの画像urlだけをスクレイピングして
htmlで新しいタブに<img src=>みたいに単純表示したいだけ
今までconsoleで<img src="">を出力してコピペ→テキストエディタでhtmlで新規保存
ブラウザで開いてウェブ丸ごと保存ってやってたのでめんどくさくなった
(別のスクリプトやアプリで画像urlだけ抽出してダウンロードしたらいいのではと思うし
都合が良いところはそれでやってるけど) あと、document.writeで上書き版もしたけど
ajaxでページロードしてる感じのとこだと続きの画像表示したいときに不便だった dataURI直で新規タブ開いて中身反映されないのはセキュリティ理由によるもの
blob→objectURL化が必要
const blob = new Blob([ '<!DOCTYPE html><html lang="en"><body>hoge</body></html>' ], { type: 'text/html' });
const url = URL.createObjectURL(blob);
window.open(url); >>733
で、できたー!
画像も問題なく表示され
ありがとうございました >>728
解説ありがとうございました。
JSのオブジェクトの挙動が理解出来ました。
値は変更出来ないけれど、メンバを変更する事は
出来るんですね。 漏れは、Ruby で、selenium webdriver, Nokogiri を使って、
5ch の書き込み内から、画像リンクだけを取り出して、
Nokogiri で、img タグを構築して、そのsrc 属性に設定して表示している
ブラウザに、5ch のスレを表示して、結果はそれとは異なる、新しいタブに表示している
driver.execute_script "window.open()" # 新しいタブを開く
driver.switch_to.window ( driver.window_handles.last ) # 新しいタブへ移動する
ERB みたいな、HTML 内にRuby プログラムを書ける、
埋め込みテンプレートを使えば、もっと簡単にできるのだろうけど jsならコンソールやブックマークレットでできることをそんな大がかりにしてバカみたい。
で、何をやってるかと思えばjs呼び出してるだけwww
そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww >>738
> そりゃそうだよなruうんこbyなんてブラウザで動かないもんなwwwww
いつの時代の話してるんだよwww
Ruby2.0はChromeブラウザでネイティブに動くようになりそう
http://hoshi.air-nifty.com/diary/2012/05/ruby20chrome-d6.html echo.jsより容量小さい画像遅延読み込みのスクリプトってあんの? >>735
変数名と紐付いている値を更新することはできないというだけ
その値自体にはなんの制約もない RubyみたいなポンコツエンジンをNative Clientで走らせるとか愚の骨頂の考えだった
WasmにコンパイルしてJSエンジン上で走らせる方がよっぽどパフォーマンス出る可能性がある jQueryだと
$(window).on('resize', data, func);
のようにdataを与える事が出来ますよね。
それを
window.addEventListener('resize', data, func);
とは出来ませんが、どうやれば同じようにdataをfuncにパス出来ますか? >>745
レスありがとうございました。
>クロージャで
なるほど。
では、jQueryの場合、スコープが異なるfuncになぜデータを渡せるんですか? えっ、なにが疑問なのかよく分かんない…
function chinko(data) {
return 'I love ' + data;
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data));
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko" >>748
> えっ、なにが疑問なのかよく分かんない…
なんでクロージャーがでてきたのか考えてみたら?
回答する側がアホの事例 >>744みたいな疑問が浮かぶ人はjQueryのソースを読んでみるべきだと思う
勉強になるぞ >>751
お前が、>>748のコードにクロージャーを取り入れて
書き直したら教えげあげようw こう?
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func) {
console.log(func());
}
let data = 'unko';
manko(chinko(data)); //=> "I love unko" もういいから教えてよ。
コードで示してくれりゃ分かるのにめんどくさい。
質問に回答するより煙に巻いて指示するのが好きなの? 質問スレに何しに来てんだよ……
こう?
function chinko(data) {
return function() {
return 'I love ' + data;
}
}
function manko(func, data) {
if (!data) data = func.name;
console.log(func(data)());
}
let data = 'unko';
manko(chinko); //=> "I love chinko"
manko(chinko, data); //=> "I love unko" var clos = function closure( data ) {
return function( ) {
return 'I love ' + data;
}
}
function caller( func ) {
console.log( func() );
}
var data = 'cat';
caller( clos( data ) ); //=> "I love cat" >>759
>>753となにが違うの?「違う」って言われたんだけど>>754>>755 >>744より
> では、jQueryの場合、スコープが異なるfuncになぜデータを渡せるんですか?
>
> jQueryだと
> $(window).on('resize', data, func);
> のようにdataを与える事が出来ますよね。
↑ この場合、jQueryのfuncは以下のように定義しますよね?
function func(event, data) {
console.log('I love' + data);
}
でも、>>758を見ると、以下のような書き方でjQueryの場合と全然違います。
何故でしょうか?jQueryはどんなマジックを使っているのでしょうか?疑問です。
function chinko(data) {
return function() {
console.log('I love ' + data);
}
}
--------------------------
>>748
わかったか? お前は何が疑問なのかよくわからないって言ったが、
これが疑問なんだよ。 >>756
ここは自ら学ぶスレだから
モロ回答はしない
そういうのは知恵袋なり他にたくさんある
ここは2chだからな >>744
.on() が内部でコールバック関数を渡す前にクロージャでラップしてるから
ちなみに、>>761はjQueryの動きになってない上、コールバック関数を渡す実装もしていない無視して良い
http://api.jquery.com/on/
最も、addEventListenerなら、handleEvent付きのオブジェクトを指定する方がスマートだと思うが function hoge(){ /*この中に重複作業をまとめたいときがある*/ }
例えば
function hoge(x,y){
function sum10(x) { return x+10; }
return [sum10(x),sum10(y)];
}
このsum10は汎用なのでhogeの外にsum10を書いても良いような気がしますが
仮に、hogeだけでしか使わないような関数でも
外に出しておいた方が良いのでしょうか?
今まで、単に見た目の問題なのかな?と思い、適当にやっていたのですが 訂正
>hogeだけでしか
>hogeの中だけでしか >>765
一回しか使うかどうかで、関数にするかどうかを決めるんじゃない。
また同じ処理だからって言うだけで、関数にするのでもない
長いコードがあったとき、読むのが大変になるから、
その中の一部に適切な名前をつけて関数にすることで、名前だけから
やってることがわかるから中を読まなくていい。
読まなくていいから長いコードを読むのが楽になった!
という目的のために、関数にするんだよ
1回しか使わなくても、長いコードを読むのが楽になるなら
関数にするべきだし、関数にしたからと言って、長いコードを読む時に
関数の中まで見ないとやってることがわからないなら、
それは関数にするやり方間違ってる
読むべきコードを減らすのが関数にする目的
だから独自で作るよりも既存のライブラリを使ったほうが良いという話にもつながる
独自で作ると少なくとも一回は中を読まないといけない。
既存のライブラリは、たいてい中を読まないで使ってるだろう? 関数ってよりサブルーチンとかプロシージャっぽい説明だね。 >>768
関数とサブルーチン・プロシージャーの違いは?
どこが後者の話になってるのか? 何か引数を受けて、何かしらの処理をし、何かを返すのがfunction(関数)
プログラムの中で一定の処理をひとまとまりにしてモジュール化したものを
メイン処理と対比して呼ぶのがsub routine(サブルーチン)
プログラムの中で、サブルーチンを作るために作られた
何も返さない関数がprocedure(プロシージャ)
であってるかな
横からですが んにゃ、合ってない
それらの用語は各言語仕様やコミュニティ毎に定義されている 本質的にはあってんじゃない?
いろんな方言的解釈があるのはその通りだが > 読むべきコードを減らすのが関数にする目的
???
['80', '9', '700', 40, 1, 5, 200]
.sort((a, b) => a - b); >>774
それもsortの処理を読まなくてすんでますね。
例え1回しか使わなくても、そうすべきなんですよ >>775
そうすべき?
じゃあそうではない、減らす前の関数を使ってないダメなコードとやらを見せてください。 >>776
じゃあsort関数の中身をここにコピペして sort関数ではなくsort関数の引数に渡す関数の話をしています。
>>770によると、
> 読むべきコードを減らすのが関数にする目的
なのでしたね。
どういうことか説明してください。 >>778
sort関数に渡す引数?
(a, b) => a - b のこと?
なにを突っかかってきてるのか知らんが、
const byAsc = (a, b) => a - b;
const byDesc = (a, b) => b - a;
みたいなの並び替えアルゴリズムとして関数化しておけば、
aからbを引いて・・・ってどういうこと?って
もう読まなくてすみますね。
['80', '9', '700', 40, 1, 5, 200].sort(byAsc);
計算部分を読まなくてすむから楽になった! (a, b) => a - bは既に関数。それは関数に名前をつけているだけ。
関数化www だから関数に名前つけるって言ってるじゃん
バカなのかな? > その中の一部に適切な名前をつけて関数にすることで、名前だけから 訳:「読むべきコードを減らすのが関数にする目的」というのは嘘でしたすみません!「読むべきコードを減らすのが関数に名前をつける目的」でした!あと関数化とかいうオレオレ用語で混乱させてしまってすみません!
こうかな いや違うな。名前をつけて関数化したんだから
読むべきコードが減ってる。
重要なのは読むべきコードを減らすこと。 いやはや、また>>783はいつものキチガイなんだろうねw >>774から>>779にするのがとこが「名前をつけて関数化」なの?
元々関数。名前をつけているだけ。 それは関数じゃなくてアロー関数
重要なのは読まなくて良いコードを増やすことなんだが、
そっちへのレスがないってことは、逃げてんだね >>786
お前は他人に謝らせてSNSにアップして炎上する
コンビニ客のマネはやめたほうが良いよw
恥ずかしい >>787
>>774の通り元々
> 読むべきコードを減らすのが関数にする目的
についての話。
これについては降参逃亡ということですねw
> それは関数じゃなくてアロー関数
関係ありませんwww
['80', '9', '700', 40, 1, 5, 200]
.sort(function (a, b) {return a - b;});
話はぐらかそうとしてドツボwwww >>779
byAscよりもアロー関数ベタ書きのほうが分かりやすい人多いと思うよ
もし.sort(降順)とかにすればわかりやすいけど、それでも降順関数の中身確認したくなると思うけどな .replace().replace().replace()....replace地獄になります
クールな書き方をおしえてください 単なる数値ではないソートの場合に名前がめっちゃ長くなりそう >>792
第二引数を関数にして中でゴニョゴニョするとか >>792
[
['私', '拙者'],
['シッコ', 'ウンコ'],
['マンコ', 'チンコ'],
['好き', '嫌い'],
].reduce((acc, [oldWord, newWord]) => acc.replace(oldWord, newWord), '私は、シッコとマンコが好きです。');
//=> "拙者は、ウンコとチンコが嫌いです。" それでもいいけどreplacer関数作って渡す方が筋がいいかもな。 >>791
まあ、そこは本質的なところではないんでどうでもいいんだわw
バカに付き合ってあげただけ
重要なのは、読むべきコードを減らすのが関数にする目的
だ〜れも、なんでもかんでも関数にしろとか言ってない
関数にする基準の話をしてるところに
重箱おじさんが連れたので、つついてあげただけw バカ「バカに付き合ってあげただけ」
重箱つつかれたのはお前ww 読むコード減らすべきおじさん「読むコード減らす」
まで読んだ 面白いように反応してくれるなw
で、いちばん重要な「読まなくて良いコードを増やすこと」には
ほら、反論できないでしょ?w
そういうとこやで >>787
>>774の通り元々
> 読むべきコードを減らすのが関数にする目的
についての話。
これについては降参逃亡ということですねw
> それは関数じゃなくてアロー関数
関係ありませんwww
['80', '9', '700', 40, 1, 5, 200]
.sort(function (a, b) {return a - b;});
話はぐらかそうとしてドツボwwww >>801
ハッハッハ、反論無しで降参逃亡ということだったかwww
だから読まなくて良いコードを増やすことについては何も言わなかったんだな >>802
頭が悪いんだからしょうがないよw
読まなくて良いようにすることに重要性がわかってないんだから ワロタ
読まなくていいようなこと、そもそも書くなよw
んでそんなもの増やすなw
スクリプト言語なんだから こんなゲームにマジになっちゃってどーするの式逃亡か?w >>794-795
ありがとうございます
同じ文字の複数置換がしたかったのでnew RegExpで795しました
あと他にreplaceの第二引数でreplacerも試みたのですが
やり方が悪かったのか今度はif地獄になってしまったので、
根本的に変えて
((str,
reg = new RegExp('[abcd/!/"]','g'),
sub = {
'a':'あ',
'b':'B',
'c':'C',
'd':'D',
'!':'?',
'"':'\''
}) => str.replace(reg,old=>sub[old])
)('abbcdd!"');
// あBBCDD?'
としましたが、見難かったのと
objectのプロパティ名に!とか"とか使わないほうがいい気がしたのでこちらは諦めました >>809
見にくいか?
'abbcdd!"'.replace(/[abcd/!/"]/g, old => ({
'a': 'あ',
'b': 'B',
'c': 'C',
'd': 'D',
'!': '?',
'"': '\'',
}[old]));
// あBBCDD?' >>811
訂正
'abbcdd!"'.replace(/[abcd!\"]/g, old => ({
'a': 'あ',
'b': 'B',
'c': 'C',
'd': 'D',
'!': '?',
'"': '\''
}[old]));
// あBBCDD?' >>812
ごめん再訂正
'abbcdd!"'.replace(/[abcd!"]/g, old => ({
'a': 'あ',
'b': 'B',
'c': 'C',
'd': 'D',
'!': '?',
'"': '\''
}[old]));
// あBBCDD?' 毎度思うけど、頭が硬いと思う
'abbcdd!"'.replace(/[abcd!"]/g, old => ({
'a': 'あ', 'b': 'B', 'c': 'C', 'd': 'D', '!': '?', '"': '\''
}[old]));
// あBBCDD?'
改行しろって言われたから、改行してます
理由?知りません。って言いそうだわw
この程度ならこれでいいけどな
const data = { 'a': 'あ', 'b': 'B', 'c': 'C', 'd': 'D', '!': '?', '"': '\'' };
'abbcdd!"'.replace(/[abcd!"]/g, from => data[from]); オブジェクトの部分は勝手にコード整形で改行展開されちゃうわ。
全部手動でコードのレイアウト()やってんならそれでいいけどw >>815
なんて整形ツール?
今どきデフォルトで見にくく整形するツールがあるとはね
有名所のスタイルチェックツールのデフォルト or 推奨設定では
問題ない書き方なのに 整形ツールはPrettier
これはVSCodeのプラグイン経由で使ってるわ。デフォルトで使ってるはずだけどこれは展開されるな。
ESLintも使っててチームのスタイルガイドが当たるがこっちも展開されてる。
rule設定で
https://eslint.org/docs/rules/object-curly-newline
の"ObjectExpression"が"always"になってんじゃねえかな。
今確認できんが。 【環境】 Win7-Pro、主にGoogleChrome(たまにFirefox)
【期待する結果】 文字列型オブジェクトのキー値の参照
例えば obj = {x:100, y:200, 'font-size':16} とあったときに、x は obj.x で 100 と
参照できるのですが 'font-size' のようなキーはどうすれば参照できますか?
そのまま obj.'font-size' とすると
Uncaught SyntaxError: Unexpected string というエラーになります。 var obj = { x:100, 'font-size':16 };
console.log( obj.x, obj[ 'font-size' ] ); //=> 100 16 関数内の変数は関数が終了するとメモリ開放されるようですが
クロージャ内でも同様でしょうか?
hogeは他から参照はされていません
(function(){
var hoge = 'abcde';
}()); ES仕様にはWeak*系やSABを除いてCGやメモリの定義はない
基本的にJSはメモリを回収しなくても仕様違反とはならないし、
そのタイミングや挙動に関しては完全にブラウザ・実行系依存だから
このスレで聞くのは間違ってる > そのタイミングや挙動に関しては完全にブラウザ・実行系依存だから
> このスレで聞くのは間違ってる
はて? このスレはES仕様限定でブラウザ・実行系の話は禁止でしたっけ?
ならDOM APIの話も禁止ですな。 ESにもW3C/WHATWGにも無いなら
ブラウザの名前くらい示してくれないと答えようが無い __proto__みたいに仕様のほうが追認することもある(あった)から…… MathJaxの質問です。
MathJaxのサードパーティーによる追加機能である XyJax を追加したいですが、追加方法が分かりません。
ヘッダには、
script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { extensions: ["AMSmath.js", "AMSsymbols.js", "http://sonoisa.github.io/xyjax_ext/xypic.js"] },
tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]] }
});
/script>
script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML">
/script>
と書いたのですが、上手く行きません
どうしたらいいですか? 注意
< script と書き込もうとすると5chから書き込めないといわれたので、
わざと左三角括弧< を削除しました >>831
だから、書いてある通りにやって出来ないから聞いてんだろ
一々低次元なところからスタートするな低脳
ってかお前みたいなレスしてる奴が正解を出せるわけがないんだからアホは黙っとけ >>832
いや
それを書いた人に言ったらなんて返ってきたのかと
まさか聞いてないなんて思わんし(・∀・) >>825
ではどこで聞けばいいでしょうか?
メジャーなブラウザ、一般的(曖昧ですが)な場合だけでいいです
と言いたいところですが解決しましたのでもういいです >>838
そうなんですか
幾つかのサイトからコピペですが、忠告ありがとう IIFEの例じゃないの?letの普及で役割を終えた。 >>824
メジャーなエンジン実装で言うと
関数が終了したら解法ではなく
定期的に全ての要素を見て回って
ルートから辿れなければ解法の方が近い
実際は別言語間との循環参照だったり
非常にややこしいが
基本的に同期的には開放しない 基本的に同期的には開放しないっていうのは
開放しないってことですか? えっ?今?w 今それ解放する?www って時に解放する。 >>843
>>837で解決した質問を継続するなと
解決後にどや顔回答を期待して解決したふりかね? ここは質問するのも自由だし回答するのも自由
他人に口出す必要はない >>844
つまり解放するんですよね?
なんで、非同期で解放すると言えなかったんでしょうか? >>847
分かんない。俺>>842じゃないし。
質問が関数が終了するとメモリ開放されるかどうかを問うているからじゃないの。 >>847
ブラウザの任意のタイミングだからね
あんまりこういうタイミングで開放されるだろうとか期待するもんじゃないよ >>846
解決したなら、回答する必要がないからね
本当は解決してないのがバレバレ 本当は解決してないのなら引き続き回答が付く流れになって何が問題なんだ?
何が言いたいんだこいつ、自分自身が何を言ってるのか認識しながら書いてるのか? >>845
質問した824ですが843は別人です
よって回答は不要です
ただ別の人が興味持って続けたりするのはお好きにどうぞ
実際この問題けっこう面白いです MathJaxについて質問です
サードパーティーによる拡張機能を追加する時は、どういう記法がいいんですか? >>852
別人だろうが同一人物だろうが関係ないよ
そんなこと考えて返信したりはしないから
コテハンも付けもしないくせにそんなこと言っちゃって変なの >>858
ならなぜコテハンを付けない???
>>852が別人アピールをしたところで何がどうなる?
むしろそうでない人>>845が不快になって荒れる原因にしかならんだろ
俺には成りすましよりもずっと荒らしに見えるよ 質問です
class Company {
constructor(){
this.factory = new Factory();
this.shop = new Shop();
}
}
class Factory {
constructor(){}
}
class Shop {
constructor(){}
}
こうしたときに
factoryとshopがお互いを参照するためには
それぞれのインスタンスを作るときに
Companyのthisを渡すので良いのでしょうか? factory・shop が、お互いを参照するためには、
それよりも1階層上のCompany に、メソッドを定義すればよい
Companyからは、両方へアクセスできるから >>862は引数で渡せば共有可能なことは分かってる
で、要件考察を放棄して「どうすれば良いですか」と最良のコードを聞いてるわけ
典型的なコピペプログラマ >>862
Companyのthisを渡すのが良いね >>863,865,866
あざます
微妙な聞き方ですみませんでした
ベストプラクティスが知りたかったです
コピペプログラマ以前の、まだペーペーでして
class使わずに書いてた時はCompanyの中でこんな感じで
var company = {
constructor : function(){
this.factoty = this.createFactory();
},
createFactory : function(){
var A = this;
var factory = {
constructor : function(){
// ここではAでcompanyが参照できる
}
};
factory.constructor();
return factory;
}
};
コンストラクタ作らずに、直に{}でオプジェクトとして生成してたので
参照に困ることがなかったのですが
これ自体正しいのかわからんし、classで書くにはこうも出来んので
どうするのが良いのか聞いてみた次第でした
ありがとうございました ベストプラクティスと言っても魔法の解があるわけじゃないし
JSはいろんな書き方ができる言語だから
結局はその要件・コンテキストでどれだけ自然かってことになる
でもそれってプログラミング関係なくて
実際の「企業」「工業」「店」の関係に置き換えて想像してみたら
もし変なことをしていたりムダがあってもすぐ分かるよ <script src="js1.js"></script>
<script src="js2.js"></script>
js2からjs1に書いてある関数を実行するにはどうしたらいいでしょうか?
書き込めないので2バイト文字にしてます それだけだと普通に呼べばいいのではと思うが
特殊な事情があるならそれを書いて欲しい まじすか、リファエラー出てて、スコープは問題ないし
見直してみます >>871,873
今時の奴はマルチポスト先で解決したら、「全てのマルチポスト先で解決方法を書く」程度の礼儀も知らんのか
全員がお前と同じスレを同じタイミングで見ているわけではないんだぞ
解決済みの質問に回答が来てもお前は困らないだろうが、無駄に骨を折らせるだろうが
しかも、スコープの問題ではないといってるし
$(function () {
var a = 1;
});
$(function () {
a; // ReferenceError: a is not defined
});
「それが普通とあれば解決です」といっている辺りからして、コピペコードのネタを探しているだけで理解する気はなさそうだな 質問者本人は「使いたい関数定義義は $(function の外にだすのが普通、と分かったので他はどうでもいいです」な考えだろうから、相手するだけ無駄って感じ
それはそれとして、moduleも解決策の一つだと思うけど、なぜ向こうではカスタムイベント一択の人が必死になってるんだろ jQueryを使えばIEサポートできるよ派が必死になってるのね
カスタムイベント、IEでも使えるんだけどねえ しかし、グローバル変数を敬遠してカスタムイベントを使うのはどうなんだろうな
カスタムイベントにも衝突のリスクがあるという点では問題が内在している事になるのだが
グローバル変数は一つのオブジェクト内にプロパティ定義すれば、汚染変数を一つに集約できるが、カスタムイベントは複数あれば複数定義してやらねばならない
必ずしも、カスタムイベントに優位性はないと思うんだがな カスタムイベントの人、衝突のリスクを真面目に考えてはいないと思うな
衝突を回避しようとすると、module一択になると思う
IEに対応するなら、一つのファイルに連結させるぐらいしか思いつかない カスタムイベントもグローバル変数もページ単位でスコープを持っているので、リスクは同等なんだよな
カスタムイベントに「関数をグローバルに定義する必要も importも使う必要もない」といえる程のメリットはない
衝突のリスクがないmoduleとは比較にならない JS全般に言えることだけど衝突してもすぐ分かるので問題にならない
そんな来年になったら衝突しだしたみたいなことはまず起き得ないのだから > JS全般に言えることだけど衝突してもすぐ分かるので問題にならない
const宣言しておけば、確かにわかるな
だが、カスタムイベントは検知できない 衝突の問題って自分がa.jsとb.jsを両方管理していればそうそう起きないけど、管理外のc.jsを別の人が加えた時点で発生するんだよね
全てのjsファイルを一人が管理しているなら発生しづらいけど、運用の都合上、編集権限がないjsファイルがあるかもしれない
あるいは、自分が今までに関わっていないサイトの機能拡張を依頼されて、そのサイトのグローバル変数に関するドキュメントがないかもしれない
そういう時に衝突しない仕組み(module)だったり、衝突しても自動的にエラーになる(constでグローバルスコープに宣言)のは大きい そんな大真面目にバグの可能性をできるだけ検知しようとしなくてもいいじゃん
どうせjQuery使う程度のサイトなんだからさ
そんなちょっとテストしてみてわからないバグなんてクリティカルじゃないよ
あとで気づいたり指摘されたときになおすので十分で
製作時はそんなこと考えずに適当に思いつくままパパっと作ったのでいいじゃない
どうせjQuery使う程度のサイトなんだからさ >>885
君は>>883って事でいいのかな?
> そんなちょっとテストしてみてわからないバグなんてクリティカルじゃないよ
「すぐに発見できないバグ=クリティカルなバグじゃない」は通らないよ
むしろ、すぐに発見できない重大なバグの方が恐ろしいので、早期発見に努めたいと俺は思うね
> どうせjQuery使う程度のサイトなんだからさ
あなたが「品質保証しません」なスタイルなら、いいと思うよ(顧客の信用は失うけど)
https://mevius.5ch.net/test/read.cgi/hp/1510321470/643- は何かしらのポリシーをもって、カスタムイベントを推奨していたみたいだからおかしいとは思ったけどね 俺は883じゃないよ
そんなバグを潰したければTSも使うしjQueryは使わないよ
jQueryは何となく作ってそれなりに良いようにやってくれるライブラリなのに
それをちょっとでもマシにしようと考える時点で間違ってるんだよ >>886を訂正
× 君は>>883って事でいいのかな?
〇 君は>>882って事でいいのかな? >>887
君の中ではこういうこと?
低品質コード: jQueryを使ったコード (jQueryで高品質なコードを作ろうとすることが間違っている)
中品質コード: TSとjQueryを使ったコード
高品質コード: TSを使ったコード
ぶっちゃけ、いずれも同様にJSなので品質が変わるのはおかしい気がするけど、TSに君の頭が最適化されているって事かな
jQueryの内部コード読んでると、共感できない実装が多いので、気持ちは分からんでもないけど 正直、1年前に書いた自分のコードを書き換えようと思っても、細部まで覚えていられる自信はない
直近なら完璧に管理できると思うけど、時間が経てば忘れるので、「自動的にエラーが検知される機構」か「エラーにならない機構」であって欲しいなあ >>875
>>873で一旦落ち着いてるのに何向きになってるんだ >>891
>>873は「スコープは問題ない」と書いているのがおかしい気はする 以下に、複数ファイルに分割して、読み込む方法が書いてある
JavaScriptの設計について考える - 機能ごとに分類する
http://tech.leihauoli.com/post/2014/11/10/program-design-1.html
でも、ファイル数が増えると、読み込みが遅くなるから、
webpack などで連結して、1つのファイルにまとめるのが普通 >>880
> カスタムイベントの人、衝突のリスクを真面目に考えてはいないと思うな
名前空間使えばいいだけだろ つまり、jQueryのカスタムイベントを使う方法は、
名前空間があるから、衝突のリスクも少なく
推奨できる方法というわけか >>889
> jQueryの内部コード読んでると、共感できない実装が多いので、気持ちは分からんでもないけど
共感できない実装を、あなたの実装に変えると
どういうメリットが有るの? なぜこの場合にカスタムイベントが適切かと言うと
>>871の書き込みだけ見てるとわからんのよ
https://mevius.5ch.net/test/read.cgi/hp/1510321470/635-636
こっちをみないと理解できないだろう
そっちを見るとわかるのが、ex_js_2.js から呼び出しているのが
ex_js_1.js が担当しているDOM要素の初期化処理なんだよ
単一責任原則からするとモジュール(ファイル)が分かれているのだから
担当すべきものは別々でなければならない。
ex_js_1.js が担当している処理の内部実装に依存するのは良くない
本来なら ex_js_1.js で完結させるべきことだろう
だがどうしてもex_js_2.jsから呼ばなければいけないというのならば、
モジュール間の結合度を下げるためにイベントを使うのが適切
module使うのもモジュール間の結合度が高まってるのでなんの解決にもなっていない
カスタムイベントと聞いてDOMのカスタムイベントと同様のことしかできないと
思い込んでいる無知がいそうだが、jQueryのカスタムイベントは
名前空間が使えるからかぶるリスクも少ない
そこまで考慮した上でのレスなんだよ
呼べればいいだろレベルの浅い考えの答えとはわけが違う >>890
> 正直、1年前に書いた自分のコードを書き換えようと思っても、細部まで覚えていられる自信はない
誰でもそう。記憶力に頼って仕事なんてできないし、
そんなものに頼ってはだめ。
だからといってドキュメントをたくさん残せば良いのかと言うと
それも違う。読むものが増えると、その分忘れた記憶を取り戻す時間がかかる
じゃあどうするのかと言うと、結局は読むべきものを減らすということに尽きる
ドキュメントもそうだしコードもそう
プロジェクト依存の知識は、そのプロジェクトから外れると必要なくなる。
つまり忘れる。だからプロジェクトに依存しない知識を使いつつ
より少ないドキュメントやコードで構成しなければいけない
もう分かるね? どんなにjQueryがなくてもできようが、
jQuery使ったほうがコードが減るなら、jQuery使ったほうが良いってことだよ
もちろんjQueryとTSを使ったほうがより良いだろう
TS単体よりもjQuery使ったほうがプロジェクト固有の知識は必要なくなる それってjQueryのAPIを忘れないよう未来永劫使い続けること前提じゃん
ライブラリにロックインされるのは嫌だわ 未来永劫、jQueryを使ったほうがコードが減るなら
そうした方が良いのでは?w フレームワークにロックインっていうのならわかるが
ライブラリにロックインってよくわからんな
フレームワークは一つの大きな枠組みだから、
外すときは中身が全てばらばらになってしまうが
ライブラリは、中身で使ってるだけだから、
一つづつ中身を置き換えていける
ロックインってほどのものじゃない >>900
> もう分かるね? どんなにjQueryがなくてもできようが、
> jQuery使ったほうがコードが減るなら、jQuery使ったほうが良いってことだよ
jQueryの内部コードを完全に把握していて、jQueryがバージョンアップする度に更新内容を詳細に知る努力を維持しているならね
根幹のjQueryを他者が完全に把握するのは不可能 > jQueryの内部コードを完全に把握していて、jQueryがバージョンアップする度に更新内容を詳細に知る努力を維持しているならね
そんなこと必要ないのでは?
誰もOSの中身やブラウザの中身なんて完全に把握してないでしょう?
もう少しさ、公平な視線で見れないの? 読むコード減らすべきおじさん
いい加減自重してほしい…
ここは質問スレなんで
自己主張はブログでも作ってそこでやってください >>906
>>1を読もうね
> ・質問への「答え」だけでなく「意見」を出しても良い。 議論用スレじゃないのに明らかにおかしいね。
荒らしが足したのかな?
次スレ立てるとき消しとくわ。 >>909
じゃあ、自重してほしいというのをやめてほしい ほとんど議論なんだから議論スレ立てて好きにやれば? phpやrubyと違ってjavascriptは簡単な言語です、
とか言ってる人もいるけど、間違ってると思いませんか >>898
例えばだが
1は他の様々なプロジェクトでも使える基本関数
それを2から呼び出すとか
phpのincludeのように 複数のページにまたがって使えるような定数の集まりや関数など
include的に使いたいとき皆どうしてるんだろう jsの場合、ファイル分けてもあまり意味がないからincludeしなくなったわ
一つのファイルにまとめている。アナリティクスすら一つのファイル >>920
そう
どうせキャッシュから読み出すので速度は問題ない javascriptウルトラ初心者がいきなりvue.jsやっても良いですか >>923
別にいいっちゃいいけどvue.jsはいつも通り、いつの間にか消えて行くパターンだろうなぁって感じ
ただそういう意味では逆に使って置くと良い。あの絶望感は楽しい >>925
vue.jsってあんまり普及してないんですかね? >>926
一時的に普及はしてるけど、いつもの流行り
多分君みたいな「なんか革新的で凄そう!」って人が使ってしまっている
俺もその昔、jquerymobileっての使ってた。今みたらgithubは二年も更新止まってるわ・・・まぁいいけど
こういうのはある程度やってないと分からない
まぁ時間を無駄にしたくなければjQuery使っておけばok SPAを今の環境でやるには便利だし普及してるとは思う
けど、SPAをもりもり作ってる人ってのがそもそも少ないだろうし
より最適化したものが作られたりUA側の環境が変われば
また変わっていくでしょう >>929
あぁそういう風に受け取ったのか、お前は本当に素人だなwww
phpから出力してheadに直接出力してるんだよ >>927
jquerymobile廃れたじゃんふざけやがって >>930
なんでjsスレでphpありきの話してんだよ
ここでなら普通phpなしが前提だろ >>931
まぁ、わざと大袈裟に言った。
アホな事やって周りにまで迷惑掛けてしまったからな
>>932
俺に言われても。
>>933
で、その挙げ句が>>929という発想だろ
ボトルシップでもやってんのか、ありえない
お前みたいなアホがシステムと連携せずにフロントをぐちゃぐちゃにするんだよ
もっと全体を見てくれ PHPでとか言ってるの俺じゃねぇからな
>>916
> 1は他の様々なプロジェクトでも使える基本関数
だからコード見る限りそういう使い方じゃないから
カスタムイベントと言ったんだよ >>936
jQueryはDOM操作用ライブラリ
俺を騙るのはやめろ >>914
Ruby が圧倒的に可読性が高く、各バージョンの互換性も高い。
言語に、include, require もある
>>917
>>893
のリンクにあるような、共通ライブラリにして、先に読み込む。
かつ、2回読み込まない
>>923
初心者は、jQuery から。
Vue.js は無理 electronでアプリ作ったらソース丸見えなの? >>940
Rubyはマジで勉強しなくて良かったと思ってる
こんなに急速に終わるとは思わなかった rubyなんで終わったん?
なんか便利そうだな〜って思ってる内にフェードアウトしていた 元々Railsのおかげで流行っただけだし、ある種当然の流れともいえる ライブラリの出来の差でpythonに二周差くらいつけられた。
有名な先端のC/C++で書かれたライブラリ(ネイティブ)なんかも大抵Pythonから呼び出すインターフェースを公式で提供されてる。
Rubyだってできるもん!と馬の骨がRubyラッパーを作っても誰もメンテしない始末w
あとディープラーニングなんかはMacでGPUサポートが弱い関係でWindows(やLinux)が主戦場になってるがRubyのコミュニティはWindows蔑視の伝統がありそのツケがまわってきてしまった形w自業自得www
もうRailsのDSLとしてしか息してない。 >>937
元々それも含まれてます
むしろそれがメインです Rails一発屋「Pythonは機械学習一発屋!!」 >>950
何回も叫ばなくてもわかってるよw
Pythonは機械学習一発屋!!! 7月生まれだからルビーって名前つけられたのがムカつくわ
パール参考にしてんだからオパールとかでいいのに >>953
それみたらc++以下は全部オワコンだな >>957
画像の右のグラフも合わせて見ないと。
rustは生まれたてで急速に成長、
rubyは死にかけの消えかけと分かる。 rustなんてマニアック言語、ぜったいはやらないわ rustに失速の可能性はあるよもちろん。
rubyに復活の可能性はないけどwww JavaScript強すぎだな
これはもう言語自体に何か人をくすぐる要素があるんだろ
俺にはわからんけど レンタルサーバーでちょろちょろっとサーバーサイドの処理書くから
PHPは消えてほしくないな…… >>963
そういうことではなくてブラウザで動く唯一の言語という特権ではないかな。
今後はwasmがあるからjsの落日が〜とかいうやつもいるけどそんなことには絶対ならない。
だから言語勝負の時は殿堂入りで除外される。
でpython vs rubyだがコミュニティがクズ過ぎてrubyの自滅だったね。
ドキュメント軽視、Windows蔑視、
で逆にドキュメント重視、Windowsにも手厚いコミュニティサポートのPythonがアカデミック領域の真面目な人たちの気を引いて学術ライブラリが充実、
真面目だからメンテもしっかりされてそれがまた人を惹き付けてのポジティブサイクルでgoogleやらにも気に入られて勝負あった。 GoogleのDartがMSのTypeScriptに負けるあたりも面白い ブラウザクラッシャーのjavascriptがこんな立派に成長するなんて
そのうちなくなるだろうって思ってたのに
素質が良かったのと周りに助けられて育ったんだな 真だけを処理する三項演算子の書き方はないのかと思ってググったところ、
同じようなことを考えた人は結構いるようですが、大体「{}無しのif使え」という結論のようでした。
実際のところ、
A===1?B=C:'';
で行けるようなんですが、これだと何か問題あるでしょうか? 三項である必要がないんだから三項演算子でやろうということが矛盾してる
&&でいいじゃん 何が問題かって、そんなおかしな書き方してたら読みづらくて仕方ない
素直にif使うか、ギリギリ許せて&&だ >>970
三項演算子は式で使う
if節は文(ステートメント)で使う
今回のケースは文
よってif文を使う
使い分けに明確な差がある
逆に
let B
if (A === 1) B = C else B = ""
これなら
const B = A === 1 ? C : ""
と書く
書けるかどうかではなく意味論の話 ドヤ顔のところ悪いが
>>970が偽でもBに空は入らないし
''がないとエラー >>946
おー、なるほど分かりやすい。ありがとう
そう、昔はruby・pythonそれぞれのラッパーがあったんだよね >>965
ここで上がってるJSはnodeの方が多いんではなかろか >>946
WindowsとMacが云々はあまり関係ない気がするなあ
最近はやりの他の言語もさして変わらんし
強いて言えば、Unix/Linux環境ありきの言語なので
Windowsはちと親和性が低いくらいのもんで
関係ないけど
WSLには期待してたんだがなあ… WSLはめちゃくちゃ使えるし、実際に使ってるけど? そういやlindowsってどうなったんだろう
・・・13年前に終了していた >>979
Windowsでbashが使えるって触れ込みだったから
てっきりWindowsをシェルで操れるようになるもんだと思ってたんだがなあ
あれじゃあ、単に並列にubuntuが起動して
Windowsのボリュームをマウントしてるだけじゃねえかと >>982
> てっきりWindowsをシェルで操れるようになるもんだと思ってたんだがなあ
操れるよ?
bashからWindowsのコマンドが実行できる(その逆も可能)
だからどんなことでもシェルで扱える
> あれじゃあ、単に並列にubuntuが起動して
> Windowsのボリュームをマウントしてるだけじゃねえかと
Windowsのボリュームをマウントしてるだけなら
UbuntuからWindows用のコマンド実行できないね >>982
お前にwolはブタに真珠だなぁ
そんなのcygwin、mingw、gitbashで出来てたじゃん。
wolがすごいのはシステムコール変換だぞ!バイナリ互換だぞ! ぼく「~が」
敵「それはWindows側ではなくLinux側の…」
ぼく「sudoで」
敵「だからLinux側の…」
ぼくはwslを諦めた
Windowsは無理に世間に迎合しないで
独自路線突っ走ってればいいんじゃねえのかなあ
会社の文房具としては揺るぎない地位を確立してんだし >>987
Windows側のHOMEが知りたければ、wslpathで知ることが出来るし、
Windowsの管理者権限がほしいならrunasコマンドを実行すれば?
自分ができないからって、OSのせいにするなよ
> Windowsは無理に世間に迎合しないで
> 独自路線突っ走ってればいいんじゃねえのかなあ
> 会社の文房具としては揺るぎない地位を確立してんだし
そうしてくれないとお前が困るもんねw
これからも文房具だって馬鹿にしたかったのに、
Windowsが本当になんにでも使える道具になってしまった
開発するのはWindowsが一番便利だなんて!
お前は、困るよねw どうしたの急に
よくわかんないけど
俺の愛してるWindowsバカにすんなこのやろう >>989
俺の大嫌いなWindows馬鹿野郎って
言ってる人には妥当なレスですねw >>987
>会社の文房具
すごい!個人的に流行語大賞だわw >>992
それ批判するときの使い古された言葉だよw
文房具は安いという前提があって成り立つ批判なんだが
ようするに便利な道具で実際には会社以外でもどこでも使えるわけで
値段を除けば批判する点はなく、値段も別に安くもないので
何一つ批判になってないというw WindowsではLinuxが走るけど
LinuxではWindowsが走らない
どっちがいいかは自明 vineだかwineだかなかった?
フォントサイズおかしくなったけど普通に動いたぞ wineは動くのと動かないの、動かすにしてもコツがいるのなどいろいろあるよ
そろそろさすがにスレチじゃね >プログラミング教育の本格的な導入に向けて実務家や有識者などからなるIT教育再生審議会による審議で、小学校ではRubyを、中学校ではC++を導入することが明らかになった。 >>997
どんな有識者で話し合うとこういう結論になるんだ、、 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 10時間 2分 45秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。