+ JavaScript(ECMAScript)質問用スレッド vol.122 +at TECH
+ JavaScript(ECMAScript)質問用スレッド vol.122 + - 暇つぶし2ch500:デフォルトの名無しさん
16/09/25 13:32:12.13 0J+83ZC2.net
Atomの例でわかるように、JSONが" " でくくられているからって、
JavaScriptのコードは "" で括る必要はないね。

501:デフォルトの名無しさん
16/09/25 13:33:11.00 V/4I7o9u.net
>>495
YAMLみたいな言語、がようわからんね。
Yaml ain't markup language
なんだから、言語ではないよ。

502:デフォルトの名無しさん
16/09/25 13:33:55.60 0J+83ZC2.net
>>497
だから設定ファイルの流儀をソースコードに持ち込むなって話だよ。
atomの例で分かったろw

503:デフォルトの名無しさん
16/09/25 13:53:31.79 V/4I7o9u.net
>>498
そりゃ変だよ。
パースできるものとソースの書式が同じでなんの問題も無いし、
存在意義とか目的によって、サブセットになるのは至極当然な気がするが。

504:デフォルトの名無しさん
16/09/25 13:56:15.35 6/nEO/uB.net
evalでパースすれば関数もパース出来るし、式も使える
コメントもあるし、""をキーに使わなくていいし、''を使う事も出来る

505:デフォルトの名無しさん
16/09/25 14:39:36.71 0J+83ZC2.net
>>499
話がずれてる。同じだと問題があるなんて一言も言ってない。
同じにする必要はない。設定ファイルのことなんか忘れて
JavaScriptのやり方として良い方を選べって言ってる。
その例としてAtomを出したんだが?わからなかった?
Atomは設定ファイルにJSONを使っているが、
JSONが""だからって、ソースコードは""にする必要はない。

506:デフォルトの名無しさん
16/09/25 14:41:15.30 0J+83ZC2.net
>>500
それはJSONの仕様を満たしていないから
JSONではない。

507:デフォルトの名無しさん
16/09/25 14:54:10.10 hrPU7kVw.net
>>491
JSONでは、JSのコメントが使えないの?
それならダメだわ
Ruby, Groovy みたいに、言語そのものが、
設定ファイルとしても読める、DSL風の言語が優れている

508:デフォルトの名無しさん
16/09/25 15:05:45.98 0J+83ZC2.net
>>503
お前「言語そのものが設定ファイル」の意味分かってないだろ。
言語そのものを設定ファイルとして読むっていうのならどの言語でも可能だよw
コンパイルしないと実行できない言語の場合は
コンパイラを内蔵する必要があるだろうけど。

509:デフォルトの名無しさん
16/09/25 15:36:47.03 y4/VuarS.net
>>501
「必要はない」じゃないんだよ
「ない」という答えを出すのは簡単
元の質問に、「そんなのどっちでも関係ない、そんなこと聞くな」というのは簡単
でもそれじゃつまらないから、しいて言えばの理由をひねり出してるんでしょ
その前提分かってそういうこと言ってる??
しいて言えばそういうこと気にする人もいるということを言ってるの
別に一般的に気にする必要があるとは誰も言っていない

510:デフォルトの名無しさん
16/09/25 15:38:42.41 0J+83ZC2.net
はぁ?
じゃあGoogleのコーディングスタイルに合わせて
'' を使うべきだっていうのが正確だよw

511:デフォルトの名無しさん
16/09/25 15:39:13.51 0J+83ZC2.net
あ、見にくかったな。
' ' (シングルクォート)でくくるべきだっていうのが正解だよ。

512:デフォルトの名無しさん
16/09/25 15:51:35.05 0J+83ZC2.net
どっちが良いのかは、実際にどちらが多く使われてるかで決めたほうが良いよ。
URLリンク(sideeffect.kr)
理由がある場合は必然的に多く使われるし
理由がなくとも一般的なJavaScriptの書き方として統一しておいたほうが良い。
あともちろんJavaScriptとしての話なので、
ここで他の言語のルールを参考にする必要はまったくないw

513:デフォルトの名無しさん
16/09/25 15:59:27.55 0J+83ZC2.net
数もそんなにないし転記しようかね? (俺のスタイルと完全に一致してるw)
・最後にカンマ vs 最初にカンマ → 最後にカンマ
○ var obj = {
foo: 1,
bar: 2,
× var obj = {
foo: 1
, bar: 2
・スペース vs タブ → スペース
・関数名の後にスペースを入れる vs いれない → 入れない
○ function foo() {
× function foo () {
・引数の前後にスペースをいれる vs いれない → 入れない
○ function fn(arg1, arg2) {
○ if (true) {
× function fn( arg1, arg2 ) {
× if ( true ) {
・オブジェクト定義の:の前後にスペースを入れる → 値の前のみに入れる
○ foo: 1,
× foo:1,
× foo : 1,
・条件文のキーワードの後にスペースを入れる → 入れる
○ if (true) {
× if(true) {
・シングルクォート vs ダブルクォート → シングルクォート

514:デフォルトの名無しさん
16/09/25 16:00:55.47 rgw8PMte.net
前から疑問なんだが
JSONはなぜ大文字なの?

515:デフォルトの名無しさん
16/09/25 17:02:28.76 +OU/FywJ.net
>>510
JavaScript Object Notationの略であり、英語ではこの様に単語の頭文字を抜き出した略語を他の語と区別するために大文字で表記する慣習があるから

516:デフォルトの名無しさん
16/09/25 17:17:23.26 0J+83ZC2.net
つーかatomの例を出したんだから
そこから理解しろよw
JSONとJavaScriptは別物なんだから
JSONがダブルクォートだからって、
ソースコードまでJSONに合わせる必要ねーだろ。
文字列をくくるのはシングルクォートだし、
オブジェクトのキーであればそもそもクォートでくくらない。

517:デフォルトの名無しさん
16/09/25 17:20:48.99 iekzKwrb.net
>>503
JSONではコメントを使えないのでAtomではテキストエディタで編集する前提のファイルにはCSONを使っている
上でJSON云々で暴れている人はJSONをまるで理解してしないと思われる

518:デフォルトの名無しさん
16/09/25 18:25:59.06 afVL0VXc.net
どっかでみた感じのテンションの上がり方だな。
尻カンマではなく頭改行カンマ派だと言うことはおいといて、
なぜその言語のサブセットか自体であるべきではないと言い切っちゃうんだろう。
最悪、パーサが無くても解釈出来るようにだと思うんだが。

519:デフォルトの名無しさん
16/09/25 18:34:17.91 KU3wtz+G.net
>>513
頭悪いな
じゃpackage.jsonでも、なんでもいいぞ
atomを使ってないのは正解だ

520:デフォルトの名無しさん
16/09/25 20:12:32.35 0J+83ZC2.net
知らないかもしれないが、package.jsonっていうのはnpmの話だ。
ソースコードをみれば、何が言いたいのかわかるだろう。
URLリンク(github.com)
JSONの流儀に合わせるやつなんていない。

521:デフォルトの名無しさん
16/09/25 22:29:45.99 Pt+ww3lU.net
package.jsonをテキストエディタで書く人がいるとは…
彼は反論する度にボロが出てくるな

522:デフォルトの名無しさん
16/09/26 00:08:05.47 fnqveAbt.net
奴隷のように決められたパターンでしか使わないなら、手書きしないでも済むだろうね

523:デフォルトの名無しさん
16/09/26 00:15:10.40 juGwjv/D.net
>>518
奴隷のようにって必要なくね?w
package.jsonは決められたパターンでしか
使わなくて済むようになってる。
だから手書きする必要もない。
OK?

524:デフォルトの名無しさん
16/09/26 00:17:22.71 fnqveAbt.net
それは奴隷のキミだけ

525:デフォルトの名無しさん
16/09/26 00:23:18.72 vYe4FNCy.net
奴隷のように決められたフォーマット(JSON)でしか書かない人は誰だろうね

526:デフォルトの名無しさん
16/09/26 00:32:59.19 juGwjv/D.net
なんかまだ気づいてないみたいだけど、npmの
ソースコードはダブルクォートじゃなくて
シングルクォートを使ってるんだよ。
そしてオブジェクトのキーはダブルクォートでくくらない。
これがJavaScriptの標準的なコーディングスタイルなんだよね。
JSON? 関係ない話だね。

527:デフォルトの名無しさん
16/09/26 05:04:27.74 ta1cG+2z.net
そのコーディングスタイルでは関係ない、無視しているというだけで
気になる人も居るだろうということを否定することはできない

528:デフォルトの名無しさん
16/09/26 18:00:26.14 BmhEYJ2V.net
ang2で2つの要素をforするにはどうすればいいですか?
定義リストをforで回したいです

529:デフォルトの名無しさん
16/09/26 22:08:18.59 vSvkRnqZ.net
>>524
ang2とは?
状況は詳しく具体的に

530:デフォルトの名無しさん
16/09/26 22:38:26.95 juGwjv/D.net
ang2っていったらAngular2のことに決まってるだろ

531:デフォルトの名無しさん
16/09/26 22:44:16.17 xBbiKNTT.net
配列の要素を順番に、かつ非同期に処理するにはどうすりゃいいの?
[a,b,c].forEach((x)=>{
//?
});
コメントの部分にawait書いても当然エラー
(x)=>{の前にasync書いても並列で処理されるだけ
aを使った非同期処理が完了したらbを使った非同期処理を開始したい
なおforや再帰は使わないものとする

532:デフォルトの名無しさん
16/09/26 23:41:32.26 juGwjv/D.net
>>527
あんたが言ってる「非同期」の正確な意味は?
JavaScriptはシングルスレッドだから並列に処理することは出来ない。
昔も今もそれは同じ。
スレッドを使うにはJavaScript外の機能を使うしかない。
つまりはブラウザではDOM APIの内部で使われてるスレッドを間接的に使うか
もう少し明確にスレッドを使っていることを明言しているWebWorkersを使うということ。
Promise(await/async)を使うだけならばシングルスレッドでもできる。
どういう意味で「非同期」と言っているか、本当にやりたいことは何かを言ってくれ。

533:デフォルトの名無しさん
16/09/26 23:55:09.05 xBbiKNTT.net
>>528
たとえば以下で'a'を表示したら1秒待って'b'を表示させる(以下'c'も同様)にはどうすればいい?
forや再帰は無しで
['a','b','c'].forEach((x)=>{
new Promise(resolve=>{
setTimeout(()=>{
console.log(x);
resolve();
}, 1000);
});
});
setTimeoutはapiだからスレチ?

534:デフォルトの名無しさん
16/09/27 00:26:52.16 2eVdEzmX.net
>>527だけど上のほうに書いてあったreduceでthenを繋げる方法で解決しました

535:デフォルトの名無しさん
16/09/27 09:19:03.59 lbwP9zfe.net
自分でeachAとか作って
await ['a','b','c'].eachA( async関数 )
のように書けるようにする必要がある
折角のasync関数なのにPromiseをこねくり回す位なら
for文使ったほうが絶対に良い

536:デフォルトの名無しさん
16/09/27 09:33:31.51 Bz+GHRpv.net
>>531
だよな、基礎知識の欠落

537:デフォルトの名無しさん
16/09/27 10:20:45.69 4v6Nawqj.net
>>528
言ってることがめちゃくちゃですがな。
並列・平行、同期・非同期についてもっと調べてからものを言ってくれ。

538:デフォルトの名無しさん
16/09/27 10:49:37.22 5SWTtAlN.net
ループ中にsetTimeoutという概念が理解できないわ

539:デフォルトの名無しさん
16/09/27 11:02:56.83 +FylPIiv.net
>>534
Watch dogタイマー知っている?
あれなんか、簡単な例だと思うよ。

540:デフォルトの名無しさん
16/09/27 12:31:43.94 r4YBGm4y.net
>>535
>>530の解決を見ると例にもならないな

541:デフォルトの名無しさん
16/09/27 12:41:12.30 +FylPIiv.net
>>536
? 配列要素処理のお話の事なの??
前からお話していた、非同期処理の周期タイマー利用のお話だと思ったけど。
配列要素処理なんだから、mapやreduce使えば済むんだもんね。
タイマーなんか関係ないわ。

542:デフォルトの名無しさん
16/09/27 12:49:21.75 BPXrtVfk.net
>>534
JSはシングルスレッドだから、イベントを非同期に見せかける。
イベントキューにイベントを投入して、その処理を待たずに、関数が先にリターンする
同期処理なら、インターネットとの通信など、
そのイベントが終了するまで、関数がリターンされない。
処理終了まで待つから、そこで処理が止まる
ちなみに、setTimeoutに、0を指定しても、イベントキューからイベントを取り出すのは、
次のサイクルになるので、最低でも、4msかかる
また非同期では、try-catch は使えないので、
昔ながらの戻り値で、エラーかどうかを判断する
つまり、イベントキューにイベントを投入するだけなので、
処理がそこで止まっていないので、すぐ次の処理へ進んでいくから
そしてどこかのタイミングで、イベントのコールバック関数が呼ばれるから、
どちらが先に呼ばれるか、タイミングが予測できないから、
よくバグるし、再現性がないので、非常に困る

543:デフォルトの名無しさん
16/09/27 13:25:00.83 QIjlBim5.net
>>529
setTimeoutはまあ非同期処理のダミーだとして回答すると、Promiseをプレースホルダーとしてthenでチェーンをつないでいけばいいので以下の様になる。
var promise=Promise.resolve();
['a','b','c'].forEach((x)=>{
promise=promise.then(()=>{
new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(x);
resolve();
}, 1000);
});
});
});

544:デフォルトの名無しさん
16/09/27 20:48:56.77 pg5DZ73n.net
>>533
質問者とは意思疎通できたから
君とは話さなくていいかなって思ってるよw

545:デフォルトの名無しさん
16/09/28 08:12:30.32 zSRNZ6Ju.net
何かを理解したい、何かの知識が無い人間とだけ意思疎通できるってみっともないと気づかんのかねぇ。
そりゃ単に、語弊があったり正しいとは限らない言い方をしている事に自分が気づいてないのに加えて、飛んでくるマサカリ避けて終わりな、
とても低レベルな偽技術者ですってドヤ顔されてる気分。

546:デフォルトの名無しさん
16/09/28 12:21:35.90 3RTmt4Yz.net
すみませんdwrについての質問はここでよろしいのでしょうか

547:デフォルトの名無しさん
16/09/28 12:49:31.69 RDlboUCA.net
Access-Control-Allow-Origin: *
の設定をサーバーでしているのに、クロスドメイン制約でアクセス出来ません
chromeです
networkタブを見たら、アクセス自体が行われていないので、ヘッダの確認も出来ていないはずです

548:デフォルトの名無しさん
16/09/28 21:34:41.98 NVy1RbGE.net
>>541
> 何かを理解したい、何かの知識が無い人間とだけ意思疎通できるってみっともないと気づかんのかねぇ。
何を言ってるんだ?
今回意思疎通をしたいのは質問者であってお前じゃない。
知識がない人と意思疎通をするんじゃなくて
質問者と意思疎通をするのが目的。
そもそも俺は質問者が知識がないとはは思わないし、
お前、失礼なやつだな。失礼なだけのやつだな。

549:デフォルトの名無しさん
16/09/28 22:27:51.60 EXLHhJLL.net
>>544
「何かを理解したい」と「何かの知識が無い」は=じゃなくて、「または」だよ。
失礼と言うなら、「俺が『何かを理解したい人間は何かの知識が無い人間だ』と誤解しているに違いない」と言う発想自体が失礼だと思うけど。
お前がやってんのは、Excelの使い方が分からん人の「A列で3番目に大きい数字が欲しいんだけどどんな関数ある?」って質問に、嬉々としてIFとかRANKの使い方説明してるようなもの。
パソコンの大先生以外の何なのかわからんレベル。
何で?→それ以上の数字を更に検索したいんだよ→めんどくさいし使い捨てならA列コピって並べ替えちゃえば良いじゃん
があって然るべき。

550:デフォルトの名無しさん
16/09/29 02:37:58.14 kaW1Iqgz.net
それは間違ってるよ
ここは似非回答者が知識をひけらかす場所だからね
けして人助けするスレではない
そこんとこ勘違いしないように!

551:デフォルトの名無しさん
16/09/29 18:44:44.84 KUMvFnA4.net
>>546
babel君のオナニースレだからねえ。

552:デフォルトの名無しさん
16/10/04 11:14:52.40 R4xZGg72.net
オブジェクトをjson化した文字列がサーバーサイドにあり、
それをクライアントのJSに渡してオブジェクトに復元したいのです。
JSON文字列のままJSに渡してJSでJSON.parse()する方法と、
サーバーサイドでDeserializeしてオブジェクトを復元して、
それをJSに渡すのと
どっちが普通ですか?文字列の大きさは数メガバイトくらいです。

553:デフォルトの名無しさん
16/10/04 12:19:52.18 Vg4EUv8s.net
>>548
JSでJSON.parse()が普通
通信路は負荷が無いならなるべくテキストでな

554:デフォルトの名無しさん
16/10/04 18:21:44.79 RzipCig6.net
<input type="button" name="aaa" value="クリック" onClick="Disp_on_off('disp');">

<TABLE border="1">
<TR>
<TD>1行目:</TD><TD>aaaaaa</TD>
</TR>
<TR id="disp">
<TD>2行目:</TD><TD>nnnnnn</TD>
</TR>
</TABLE>

555:デフォルトの名無しさん
16/10/04 18:22:25.04 RzipCig6.net
function Disp_on_off(id){

var disp_zyoutai = document.getElementById(id).style.display;

if(disp_zyoutai=="none"){disp_zyoutai = "block";}
else{disp_zyoutai = "none";}

document.getElementById(id).style.display = disp_zyoutai;

}
テーブルの2行目をクリックボタンを押すたびに表示非表示にしたいんですが
クリックを2回押して2行目を表示させるとテーブルが崩れてしまいます
テーブルが崩れないようにするにはどうしたらいいんですか?

556:デフォルトの名無しさん
16/10/04 19:59:17.28 oFIFwTqQ.net
>>551
if(disp_zyoutai=="none"){disp_zyoutai = "table-row";}

557:デフォルトの名無しさん
16/10/04 21:56:34.90 px5zXLds.net
>>551
function Disp_on_off(id) {
 var style = document.getElementById(id).style;
 style.display = (style.display === "none") ? "table-row" : "none";
}

558:デフォルトの名無しさん
16/10/04 21:56:43.31 RzipCig6.net
>>552
ありがとう^^

それではcssでdisplay:none;したものをjavascriptでdisplay="block";
しようとしても表示されませんcssでnoneしたら表示は無理なんでしょうか?

559:デフォルトの名無しさん
16/10/04 22:00:08.07 px5zXLds.net
function Disp_on_off(id) {
 var style = document.getElementById(id).style;
 style.display = {none: "table-row"}[style.display] || "none";
}

560:デフォルトの名無しさん
16/10/04 22:01:54.54 px5zXLds.net
>>554
CSSを使って表示の制御をするのはいいやり方だ。
CSSを使って表示の制御をするなら、CSSを使って切り替えれば良いのだ

561:デフォルトの名無しさん
16/10/04 22:10:22.18 px5zXLds.net
<input type="button"value="クリック" onclick="toggleDisp('disp')">

<table>
<tr><td>1行目:</td><td>aaaaaa</td></tr>
<tr id="disp"><td>2行目:</td><td>nnnnnn</td></tr>
</table>

table { border-collapse: separate }
table, td { border: 1px solid #000 }
#disp { display: none }
#disp.visible { display: table-row }

function toggleDisp(id) {
 document.getElementById(id).classList.toggle("visible");
}

562:デフォルトの名無しさん
16/10/05 02:32:23.82 ei6gN13W.net
>>549
レスありがとうございました。
>JSでJSON.parse()が普通
そうですか。知らなかったです。
>通信路は負荷が無いならなるべくテキストでな
ちなみに、テキスト以外でデータを送ると問題が出る場合がありますか?

563:デフォルトの名無しさん
16/10/05 05:46:49.56 R0YCD/Ke.net
テキスト以外でデータを送るとは?
WSでバイナリ形式オブジェクトで送るの?

564:デフォルトの名無しさん
16/10/05 19:44:50.64 v4W0ZcSs.net
>>558
パケット見ながらデバッグしてるときに涙が出る程度だよ

565:デフォルトの名無しさん
16/10/05 20:03:03.59 ei6gN13W.net
>>560
そんなデバッグが出来るのかあ?

566:デフォルトの名無しさん
16/10/07 11:00:25.76 NhgFAWyY.net
>>561
Just do it!

567:デフォルトの名無しさん
16/10/09 00:31:57.19 jFWGfuyl.net
angular2

Error: (SystemJS) Can't resolve all parameters for ActivatedRoute: (?, ?, ?, ?, ?, ?, ?, ?).
と出ます。どうすればいいでしょうか?

568:デフォルトの名無しさん
16/10/10 00:56:23.62 tytyuWsD.net
FirefoxのアドオンGreaseMonkeyつかって開いたページにあるワードが含まれてたらアラートするようにしたいんですがどうすればいいんでしょうか?

569:デフォルトの名無しさん
16/10/10 01:00:02.76 tytyuWsD.net
>>564補足
とりあえずRegExp.testつかってやろうとおもったんですけどページの内容をどうやれば検索対象ストリングにいれればいいのかわかりません。

他にももっとスマートな方法あったら教えてください。

570:デフォルトの名無しさん
16/10/10 02:26:33.91 6bVjh2uR.net
>>563
「Can't resolve all parameters for ActivatedRoute」で検索!

>>564-565
Node.textContent
URLリンク(developer.mozilla.org)

var text = document.getElementsByTagName("body")[0].textContent;

<body> か、<head> の内容もいるなら、<html> 以下を取得すればいい

571:デフォルトの名無しさん
16/10/10 11:38:06.31 UL1Nitj4.net
>>566
ありがとうございます
出来ました

572:デフォルトの名無しさん
16/10/10 12:14:26.53 ToNMYAzu.net
>>567
あなたは>>563
それとも>>564

573:デフォルトの名無しさん
16/10/10 13:26:43.29 UL1Nitj4.net
>>563です

574:デフォルトの名無しさん
16/10/10 14:12:18.24 tytyuWsD.net
>>566
わてもできたよ。
リンクまではっていただきありがとうございます。
ちなみに[0]はなにですか?
リンク先にも書いてなかったし、なくても出来きたけど。

575:デフォルトの名無しさん
16/10/10 18:59:33.24 Fn778QpQ.net
>>564
なんで猿なんだよ?

576:デフォルトの名無しさん
16/10/10 21:04:02.56 tytyuWsD.net
>>571
よくわかりません。
さるつまりGreaseMonkey以外に使える方法があるということですか?

577:デフォルトの名無しさん
16/10/10 21:27:42.34 c135JfrF.net
>>570
getElementsByTagNameは疑似配列を返す
[0]がなかったら動かないはずだ

578:デフォルトの名無しさん
16/10/11 05:55:53.39 GK6S8De2.net
そうなんですか

579:デフォルトの名無しさん
16/10/11 22:11:58.12 Ld7sCMib.net
document.body でいいだろ。
というか、<html>/<body> 以外は特に querySelectorAll() をできるだけ使え。
もう getElementById(), getElementsByTagName() を使わないようにすべき。
なぜ getElementById() を使わないか?
var e = document.getElementById('E');
if (e) {console.log(e.id);}
と、わざわざ注意して if を書くよりも
[...document.querySelectorAll('#E')].forEach(e => console.log(e.id));
とか
[for (e of document.querySelectorAll('#E')) e].forEach(略);
とか
Array.from(document.querySelectorAll('#E')).forEach(略);
とか
Array.prototype.slice.call(document.querySelectorAll('#E'), 0).forEach(略);
とかの方が簡潔で高抽象で安定するだろ。
さらに、もし
Array.of(document.getElementById('#E')).filter(e => !!e).forEach(略);
なんて書いたら、filter が if と同じことになるわけで、結局、querySelectorAll() にしときゃ良かったとなるわけだ。
なぜ getElementsByTagName() を使わない�


580:ゥ? これも同様。略。 更に、getElementsByTagNameNS() も選択肢にしなきゃならないXHTMLだったらどうすんのって理由もある。



581:デフォルトの名無しさん
16/10/12 00:01:01.78 bJD9Q0hO.net
なぜってjQueryがあるのに、わざわざそんな冗長なことを
書く必要が無いからでは?
毎回Array.prototype.slice.callとかアホらしいw
var e = document.getElementById('E');

var $e = $('#E');
[...document.querySelectorAll('#E')].forEach(e => console.log(e.id));
[for (e of document.querySelectorAll('#E')) e].forEach(略);
Array.from(document.querySelectorAll('#E')).forEach(略);
Array.prototype.slice.call(document.querySelectorAll('#E'), 0).forEach(略);

$('#E').each(function() { console.log(e.id) });

582:デフォルトの名無しさん
16/10/12 00:14:50.40 bJD9Q0hO.net
訂正
$('#E').each(function() { console.log(this.id) });

583:デフォルトの名無しさん
16/10/12 02:21:42.25 7Aphq+NE.net
javascriptファイルを自分のパソコンでは実行できるけれど
他人のパソコンでは実行できないようにしたいのですが、
そんな事可能でしょうか?

584:デフォルトの名無しさん
16/10/12 05:13:14.63 jhqwQTsX.net
>>578
認証性にして自アカウントでログインしなければsctipt要素を出力しなければいい

585:デフォルトの名無しさん
16/10/12 08:42:49.25 L1c8TvqF.net
>>575
あなたがお勧めする手法はgetElementsByTagNameでも使えるのでgetElementsByTagNameを使わない理由にはならない
違いを説明するならliveに言及すべきたが、liveは設計思想次第で利便性が逆転する部分なのでどちらか優れているという話でもない
ただし、同一tagNameの要素ノード群を得るなら基本的にはgetElementsByTagNameの方が優れているだろう
URLリンク(html5experts.jp)

586:デフォルトの名無しさん
16/10/12 20:38:12.37 ao75rK/8.net
>>576
NodeListはイテラブルではないので[...hoge]は使えないし、
Array.fromを使うんなら、forEachを使う必要がない。
やり直し。

587:デフォルトの名無しさん
16/10/12 22:33:54.70 bJD9Q0hO.net
>>581
レスする相手間違えてるぞw
俺の答えは「jQuery使えば普通にeachが使えて古いブラウザでも動いて短く書ける」だ

$('#E').each(function() { console.log(e.id) });

588:デフォルトの名無しさん
16/10/15 05:07:47.47 lTqPwJwr.net
間違いなく要素配列を返す$関数を自作した方がいい。
普通の配列はforEachを使ってるのに、要素配列はeachを使わないといけないのは不便でおかしいから。

jQueryのまずいところの一つはライブラリと言いながら重厚でフレームワークのよう。
一つ使い始めたらその世界全てを受け入れるしか無い。それがまた最新の標準から見て古臭いという点。

つまり機能の補足としてeach的なのが使いたいだけならjQueryを持ってくるのはアホだし、
もっと全体を考えるなら、jQueryよりよっぽど標準と親和性の高いまともなフレームワークを使ったほうが良い。

589:デフォルトの名無しさん
16/10/15 08:49:38.99 WUtYR0l7.net
>>583
それは自己妄想だろ?w

590:デフォルトの名無しさん
16/10/15 10:59:50.26 8Bk/hmGM.net
> jQueryのまずいところの一つはライブラリと言いながら重厚でフレームワークのよう。
ん? どこが?
フレームワークというのは、フレームワークから決まった関数が呼ばれるから
その中身を書くもの。ライブラリは用意された関数を呼び出すもの。
どう見てもライブラリなんだが。DOM操作の代わりでしか無い。

591:デフォルトの名無しさん
16/10/16 20:58:57.45 LWTFfjDf.net
JavaScript入門者です。
クロージャで躓いています。

function Counter() {
var n = 0;
return function () {
return ++n;
};
}
var a = Counter();

a(); // 1
a(); // 2
a(); // 3

これでなぜ増えていくのかが分かりません。
a(); を呼ぶ度に、var n = 0; が実行されるはずなので、増えていかないと思うのですが…
なぜ var n = 0; は実行されないのですか?

592:デフォルトの名無しさん
16/10/16 21:05:46.88 jbRBUkYK.net
>>586
仕様です

593:デフォルトの名無しさん
16/10/16 21:07:45.08 cgLhTvvH.net
>>586
aの中に何が入っているか、書き出してみてごらん

594:デフォルトの名無しさん
16/10/16 21:21:34.20 LWTFfjDf.net
>>588
書き出してみるには、どうすればいいのでしょうか?

595:デフォルトの名無しさん
16/10/16 21:27:41.70 cgLhTvvH.net
>>589
手で

596:デフォルトの名無しさん
16/10/16 21:33:14.24 r3gdRhV6.net
>>586
a()は
function () {
return ++n;
};
でしょ
n = 0は実行されてない

597:デフォルトの名無しさん
16/10/16 21:34:44.24 LWTFfjDf.net
>>590
手? こういうことですか?

a() {
var n = 0;
return function () {
return ++n;
};

598:デフォルトの名無しさん
16/10/16 21:36:43.79 CBxMhCnR.net
>>586
n = 0は一番最初に起動したときに
初期設定として入力されるだけで、あとはこれは呼び出されません

599:デフォルトの名無しさん
16/10/16 21:42:13.57 LWTFfjDf.net
>>591
なぜ返り値だけになるのですか?
var n = 0; も一緒じゃないんですか?

600:デフォルトの名無しさん
16/10/16 21:42:56.22 UhSHekdN.net
>>589
console.logかFunction#toString

601:デフォルトの名無しさん
16/10/16 21:44:43.73 LWTFfjDf.net
>>593
「一番最初に起動したとき」というのは、
a(); // 1
のときでしょうか?

602:デフォルトの名無しさん
16/10/16 21:57:12.53 LWTFfjDf.net
>>595
それはどうやればいいのでしょうか?
参考書を読んでいるだけなので、デバッグの仕方もよく分かりません。

603:デフォルトの名無しさん
16/10/16 21:57:36.43 cgLhTvvH.net
function Counter() {
var n = 0;
return n;
}

var a = Counter();

この場合にaの中に何が入っているかわかるのなら、
>>586でaの中に何が入ってるかは
置き換えるだけだろ

604:デフォルトの名無しさん
16/10/16 21:58:23.73 cgLhTvvH.net
> なぜ返り値だけになるのですか?

>>598で返り値だけになるのなんて当たり前だよね?

605:デフォルトの名無しさん
16/10/16 22:04:46.53 LWTFfjDf.net
>>598
aの中には、
var n = 0;
return n;
が入ってるのではないのですか?
なぜ、n = 0; は省かれるのですか?

606:デフォルトの名無しさん
16/10/16 22:12:37.29 LWTFfjDf.net
>>600
間違えました。
aには返り値が入ります。なので、>>598の場合は、aにはnが入って、つまり返り値だけになるのは分かります。

しかし、a(); の場合は、
var n = 0;
return n;
なぜ、こうならないのかが分かりません。

607:デフォルトの名無しさん
16/10/16 22:21:40.38 22TTvDK/.net
そうするのが論理的で整合的だってことで話し合ってそういう実装にすることになっただけだよ。
JS以前からある思想を踏襲してるんじゃない?
Pythonかなんか知らんけどお

608:デフォルトの名無しさん
16/10/16 22:26:43.07 r3gdRhV6.net
>>594
>なぜ返り値だけになるのですか?
キミがCounter()をそのように作ったから

>var n = 0; も一緒じゃないんですか?
return function() {return n++;}
のどこにn=0がある?

609:デフォルトの名無しさん
16/10/16 22:32:07.26 LWTFfjDf.net
あー、分かりました。
オブジェクトのコピーと混同してました。

var a = Counter();
確かにこれで、var n = 0; は入らないですね。返り値を代入しているだけだから。
すなわち、aには返り値の無名関数が入ると。

で、当然、a();には n = 0 は入ってなくて無名関数だけだから、呼ぶ度に加算される。

610:デフォルトの名無しさん
16/10/16 22:33:40.23 LWTFfjDf.net
>>603
今になって思えば、まさしくその通りです(笑)

611:デフォルトの名無しさん
16/10/16 22:35:45.09 LWTFfjDf.net
>>598
何度もよく読み返してみて自分の誤解に気づきました。
ありがとうございます。

612:デフォルトの名無しさん
16/10/16 22:57:07.10 cgLhTvvH.net
あー、うん。そしてconsole.log(a)すれば
aの中身は表示されるよ。

613:デフォルトの名無しさん
16/10/16 23:27:01.47 LWTFfjDf.net
>>607
出ました。これが!

function () {
return ++n;
}

よーし、明日からまた頑張るぞ!

614:デフォルトの名無しさん
16/10/17 09:44:12.70 JGocT82E.net
>>586
いや、nじゃなくてaを考えろよ

615:デフォルトの名無しさん
16/10/17 10:02:05.92 5vFd9dbv.net
>>609
周回遅れってわかってる?

616:デフォルトの名無しさん
16/10/17 10:35:49.18 SVcsoL0R.net
++n;
これに何の意味、活用性があるのか?
小一時間問い詰めたい

617:デフォルトの名無しさん
16/10/17 11:35:06.10 5vFd9dbv.net
>>611
キミは周回遅れ以前、出場資格ない

618:デフォルトの名無しさん
16/10/17 11:44:08.56 EnKnOK0g.net
>>611
ベーシックしか知らない方ですか?

619:デフォルトの名無しさん
16/10/17 12:15:27.10 k5b8iytR.net
>>611
「インクリメントした値を返す意味がある」としか答えようがないな
リファレンスを読み直しておいで


620:



621:デフォルトの名無しさん
16/10/17 19:20:09.73 wBVSlf54.net
>>610
馬鹿は口を閉じてろよザッコww
何仕切ってんだこのヴァカがw

622:デフォルトの名無しさん
16/10/17 19:49:26.05 5vFd9dbv.net
仕切ってなんかいない 見下してるだけだ

623:デフォルトの名無しさん
16/10/17 20:08:48.29 wBVSlf54.net
>>616
馬鹿は口を閉じてろww

624:デフォルトの名無しさん
16/10/17 22:12:14.86 MSv6dw6i.net
>>586
現実的にこんな処理が必要になる状況ってあるの?

625:デフォルトの名無しさん
16/10/17 22:21:09.76 xorYyxjj.net
let result = "1\r\n2\r\n".match(/^/mg);
console.log(result);
1の前と、2の前と、最後の\nの前にマッチしてほしいが
1の前と、1つ目の\nの前と、2の前と、2つ目の\nの前と、2つ目の\nの後ろにマッチしてしまう
let result = "1\r\n2\r\n".match(/$/mg);
console.log(result);
1の後ろと、2の後ろと、2つ目の\nの後ろにマッチしてほしいが
1の後ろと、1つ目の\rの後ろ、2の後ろと、2つ目の\rの後ろと、2つ目の\nの後ろにマッチしてしまう
CRLFを含んだ文字列を処理するうまい方法はないものでしょうか?
仕様とあきらめて、LFのみに変換するしかないのでしょうか?

626:デフォルトの名無しさん
16/10/17 22:29:29.43 xorYyxjj.net
>>619
訂正
1の前と、2の前と、2つ目の\nの後ろにマッチしてほしいが

補足
もう少しわかりやすく書くと、以下のようになってしまうのを修正したいです
result = "1\r\n2\r\n".replace(/^/mg, "!");
^1^
^2^
^
result = "1\r\n2\r\n".replace(/$/mg, "$");
1$$
2$$
$

627:デフォルトの名無しさん
16/10/17 22:49:51.36 5vFd9dbv.net
>>617
お前、口開けてキーボード叩いてるのか?
知恵遅れの習性は謎だらけだ

628:デフォルトの名無しさん
16/10/17 23:36:27.61 Da5IbuDC.net
口閉じろっていうのは喋るな(書き込むな)って意味だろう?

629:デフォルトの名無しさん
16/10/18 01:13:52.49 sMICGAt6.net
>>619-620
>1\r\n2\r\n
>1の前と、2の前と、2つ目の\nの後ろに、マッチしてほしい

1の前・2の前は、行頭だろ。
2つ目の\nの後ろは、全文字列の最後

2つに分けて考える。
それか、全文字列の最後は無視して、正規表現とは別に処理にする

630:デフォルトの名無しさん
16/10/18 01:35:52.87 g5oHSCaR.net
> 1の前と、2の前と、最後の\nの前にマッチしてほしいが
「最後の\nの前」は「\rと\nの間」
1と2は「\nの後ろ」だったのに最後だけなぜ「\nの前」になるのだろうか?

631:デフォルトの名無しさん
16/10/18 03:24:17.45 sMICGAt6.net
>>619
>1の前と、2の前と、最後の\nの前にマッチしてほしい

>>620
で訂正している

>1の前と、2の前と、2つ目の\nの後ろにマッチしてほしい

632:デフォルトの名無しさん
16/10/18 08:02:45.99 De2Roj8e.net
>>618
ちょいちょいあるんじゃない?

>>625
/m消して、\n探しちゃいかんの?

633:デフォルトの名無しさん
16/10/18 09:15:43.00 Vsk5WAhm.net
>>626
>618
ドンな時?

634:デフォルトの名無しさん
16/10/18 09:38:02.36 cWVmYcde.net
>>627
サンプルのコードは単純だけど、たとえばリターンに記述されている
”++n”を三項演算子に書き換えて、上限値に来たらリセットする
ループカウンターにする。
あとは、解析を困難にする為の無駄なコードとして扱う。

サンプルの処理が単純だけど、少し手を加えれば、どの様にでも使える。

635:デフォルトの名無しさん
16/10/18 11:46:33.12 g5oHSCaR.net
itaratorのように外部参照不可にする時、かな

636:デフォルトの名無しさん
16/10/18 11:53:07.40 De2Roj8e.net
>>627
モジュールの中全体で一意な番号が欲しいとき。
シングルスレッドが保証されてるので、正確にはインクリメント演算子は必要無いけど。

>>628
3項演算子もifも、比較文が必要でミスヒットすると悲しいから、Moduloの方が楽だと思う。

637:628
16/10/18 12:16:45.66 cWVmYcde.net
>>630
>モジュールの中全体で一意な番号が欲しいとき。
”一意な番号”と云うと固定のenum宣言が頭に有ったけど
番号をmap管理すれば色々と使えますね。
なるほど。

>3項演算子もifも、比較文が必要でミスヒットすると悲しいから、Moduloの方が楽だと思う。
モジュールもある程度意味を持たせなければいけない考えな


638:モノで 分岐処理も例に上げました。



639:デフォルトの名無しさん
16/10/18 16:19:34.97 Vk/gbf1F.net
誰か気象庁の高解像度レーダー画像取得スクリプト作ってないですか?
低速低容量で使いたいので。

古いの(低解像度)
URLリンク(hakobe932.hatenablog.com)
URLリンク(chameleoncyber.org)

URLリンク(www.kototoka.com)
・・・
標準のやつでもいいかな

640:デフォルトの名無しさん
16/10/19 17:30:13.76 BuiU+rAj.net
>>632
自作したら?
ES関係ないのでスレ違い

641:デフォルトの名無しさん
16/10/26 19:54:01.06 wme53G2u.net
インデントの仕方がよくわからないです。

var a={b:function (){}};


ってあった場合どんなふうにインデントするのがいいんですかね。

642:デフォルトの名無しさん
16/10/26 22:19:57.91 RGR5F2yC.net
整形でググる

643:デフォルトの名無しさん
16/10/26 22:49:40.05 wme53G2u.net
医療整形のぺーじばかりでしたよ。

644:デフォルトの名無しさん
16/10/26 22:58:30.79 nn4J9Ce2.net
>>634
var a = {
     b:function (){
      alert(“おまえは💩”);
     }
    };

645:デフォルトの名無しさん
16/10/26 23:02:07.76 bmG2AFzy.net
var a = {
        b:function (){
        }
    };

646:デフォルトの名無しさん
16/10/26 23:23:52.60 Tc/AxpVE.net
>>634
> ってあった場合どんなふうにインデントするのがいいんですかね。
インデントじゃなくてスペースの入れ方だろ?

採用するコーディングスタイル基準による。
こういうのはちゃんとチェックするツールが有って、今だとeslintっていうのが有名。

eslintではスタイルを選ぶことができるが(さらに独自でカスタマイズもできる)
その中で有名なのが、eslint:recommended と airbnb だろう。

eslint:recommended は比較的緩くてその書き方でも問題ない。
airbnbの場合は、var a = { b: function () {} };
(実際は const a = { b() {} }; を推奨される)

改行入れる場合はこうだな。
var a = {
b: function () {}
,
};

あと必ず { の後で改行入れろとか言ってるやつがいるけど、
最近はそれを採用している規約は少ない気がする。

スペースの有無は決まってることが多いけど、
改行の有無は、長ければ改行を入れるという決まりでいいだろう。
もちろん { で改行した場合はインデントを一つ増やす。

647:デフォルトの名無しさん
16/10/26 23:24:20.49 Tc/AxpVE.net
訂正

改行入れる場合はこうだな。
var a = {
 b: function () {},
};

648:デフォルトの名無しさん
16/10/26 23:32:21.50 RGR5F2yC.net
>>634
別に何でもええんやで

649:デフォルトの名無しさん
16/10/26 23:50:35.79 d99+vlL4.net
>>640
もともとの>>634にはなかった末尾カンマを追加する無能

650:デフォルトの名無しさん
16/10/27 00:43:35.94 wk+FybyZ.net
ありがとう、インデントではなくスペースを入れるという考え方か。
著名なソース読んでも、機械的には入れてない気がしてたんだ。
にしても無名関数が読み慣れん。

651:デフォルトの名無しさん
16/10/27 00:50:40.68 WMnZ+0Yu.net
適当にコーディングしていても、ツールで変換すればいい

F12開発者ツールで、JSファイルを整形して開くだけでも、正しく直してくれないか?

652:デフォルトの名無しさん
16/10/28 12:59:15.72 pmKmGehb.net
小数点第一位までしかない1以下の小数を四捨五入して1か0にする方法を教えてください
0.1を0
0.5を1
Math.ceilだと1以上ないとだめでした

653:デフォルトの名無しさん
16/10/28 13:34:11.62 dnmvvXjV.net
>>645
Math.ceil()は繰り上げ、四捨五入ならMath.round()

654:デフォルトの名無しさん
16/10/28 13:47:06.25 OnyL+paE.net
>>645
そんなめんどくさい事しなくても、0.5足してfloorでいいんじゃないの?

655:デフォルトの名無しさん
16/10/29 05:43:28.19 gGx5G/bS.net
0.5足すとか、気持ちわるいよ。
少しずれたりしないの?

656:デフォルトの名無しさん
16/10/29 12:07:08.55 yHYEAqhD.net
>>648
0,5未満なら0,5を足して四捨五入して
0.5以上ならそのまま四捨五入したらいいじゃん

657:デフォルトの名無しさん
16/10/29 12:17:53.47 cEJXxPE7.net
>>648
ズレなくて、切りが良い。

658:デフォルトの名無しさん
16/10/29 14:11:06.80 ypb3Na8r.net
>>650
ずれたんだけど
alert(0.49999999999999999+0.5); // 1

659:デフォルトの名無しさん
16/10/29 14:47:07.98 z8URZLOb.net
>>651
alert(0.49999999999999999); // 0.5

問題外

660:デフォルトの名無しさん
16/10/29 15:25:53.31 cEJXxPE7.net
>>651
jsfiddle.netで実行した結果を上げる。

alert(0.49999999999999999+0.5); // 1
alert(0.49+0.5); // 0.99
alert(0.499+0.5); // 0.999
alert(0.4999+0.5); // 0.9999
alert(0.49999+0.5); // 0.9999899999999999
alert(0.499999+0.5); // 0.9999990000000001

この環境の精度では、小数点以下四桁迄なら大丈夫になる。

”小数点第一位までしかない1以下の小数を四捨五入して1か0にする方法を教えてください”
なので、「小数点以下二桁は無い」事になる。
処理手順は、0.5を足して小数部分を捨てれば良い。

661:デフォルトの名無しさん
16/10/29 18:07:27.02 O/3wAc5r.net
いや四捨五入する関数があるのに何でわざわざ計算してから切り捨てとかしなきゃいけないん?

662:デフォルトの名無しさん
16/10/29 18:16:09.69 P+i+TDJ5.net
>>647
マイナスの時に想定外の動作

663:デフォルトの名無しさん
16/10/29 18:55:02.99 Lu2qC+Nv.net
まさに>>654のいう通り
Math.floorを優先する理由はない

664:デフォルトの名無しさん
16/10/29 19:15:01.21 mMTmoVUB.net
そもそも四捨五入する理由はない
欲しがりません勝つまでは
我慢しろ

665:デフォルトの名無しさん
16/10/29 19:27:12.02 Lu2qC+Nv.net
四捨五入は質問(>>645)の要件なのでどう考えても必要

666:デフォルトの名無しさん
16/10/29 19:52:25.39 cEJXxPE7.net
>>655
コードにする以前の問題。
入力で認めていれば、エラー対応が必要だし
入力で処理に影響する情報を排除すればそのままで済む。

そもそもマイナス扱う処理で四捨五入使うかな?

667:デフォルトの名無しさん
16/10/29 19:53:28.10 68KH7Ulz.net
マイナスのときにどっちに寄せたいかじゃないの?
-0.6を四捨五入でどっちにしたいか。
roundで0にできたっけ?

668:デフォルトの名無しさん
16/10/29 19:57:05.98 eSvC8hNl.net
> 小数点第一位までしかない1以下の小数を四捨五入して1か0にする方法を教えてください
小数点第一位までしかないんだから
Math.round() で解決だろ

バカ

669:デフォルトの名無しさん
16/10/29 20:06:28.52 JHScm7pH.net
ビット & なら Math 演算も不要
( (n) * 2) & 1
n が数でなくとも 0 か 1 になるが

670:デフォルトの名無しさん
16/10/29 20:37:58.28 mNGjlCUC.net
ビット演算は32bitなのが問題
速度を稼ぐために制限付きを承知で使うならいいだろうが

671:デフォルトの名無しさん
16/10/30 01:00:03.39 O7t7tgSU.net
>>659
負の場合、例えば-20000.4は
> 小数点第一位までしかない1以下の小数
をみたすので、エラーでは無い
> 四捨五入して1か0にするには
四捨五入する桁を可変にすれば良いのかな?

672:デフォルトの名無しさん
16/10/30 05:11:47.90 hqgegRgF.net
>>663
ビット演算が速度を稼げるという根拠は?
例えば直近のV8 nightlyのアセンブラで書き直させたBuiltin_MathRoundingOperationよりも速いと言えるの?
結局無駄なf64<->i32キャストが発生


673:するし、実際は速くないよ 速く使おうと思ったらUSE_ASM_Context内や、よっぽど変数の扱いを気を付けて キャストが全体として起こらないようにしなければならない



674:デフォルトの名無しさん
16/10/30 05:55:23.89 h7Os3ze3.net
変数の扱いを気を付けてキャストが全体として起こらないようにすると
ビット演算は速度を稼げると
>>665は申しております。

675:デフォルトの名無しさん
16/10/30 10:21:13.83 UrnMpVuD.net
小数一桁の数値を丸めるだけのことで何揉めてるの?

676:デフォルトの名無しさん
16/10/30 10:28:59.39 TSDZ4OFC.net
1/10が0.1になるのがキモイです
普通0じゃないですか?
1.0/10なら0.1ですが

677:デフォルトの名無しさん
16/10/30 11:32:50.61 Z+vVaA9C.net
>>667
要求仕様に対する、解析能力の確認ですね。

678:デフォルトの名無しさん
16/10/30 12:21:33.43 dH+/za6/.net
>>668
URLリンク(ja.wikipedia.org)

679:デフォルトの名無しさん
16/10/30 12:26:08.71 TSDZ4OFC.net
>>670
javaの1/10は出来ないの?
切り捨てたり切り上げたり面倒なんだけど

680:デフォルトの名無しさん
16/10/30 12:39:39.62 dH+/za6/.net
>>671
出来ない
他言語の常識を持ち込むのがナンセンス

681:デフォルトの名無しさん
16/10/30 12:42:33.00 TSDZ4OFC.net
>>672
mjky

682:デフォルトの名無しさん
16/10/30 16:50:23.32 v2s+0v0Z.net
>>673
Math.floor(1/10); であなたの目的は達成できるが、数値演算をJavaと同じにするのは無理

683:デフォルトの名無しさん
16/10/30 17:02:25.81 TSDZ4OFC.net
>>674
負数もそれでいける?
負数だと絶対値が切り捨てで増えて、切り上げで減るとか聞いたけど

684:デフォルトの名無しさん
16/10/30 21:42:24.67 v2s+0v0Z.net
>>675
やってみれば分かることをなぜ聞くかな
試してから聞いてくれ

685:デフォルトの名無しさん
16/10/31 03:18:16.89 vSxBS38U.net
JavaScriptでPOJO的なクラスを宣言することの存在意義ってありますでしょうか?

例えば、何かしらで永続化するとして
class Person {
 constructor(name, age);
}

const p = new Person('あいうえお', 20);
// WebStorage?で永続化してもとに戻す。ここではJSONで
const json = JSON.stringfy(p);
const p1 = JSON.parse(json);

p1でコード補完なんて効くのか??
JavaScriptでPOJOクラスみたいなものを宣言する存在意義がわかりません。教えて下さい。

686:デフォルトの名無しさん
16/10/31 04:43:21.97 lofvnrlW.net
プロトタイプを持たないオブジェクトを作りたいのならクラスを使わない方がいい
JSON出し入れした場合などはプロトタイプが削除されどうせinstanceof等機能しないのだから。
お作法的にはcreatePersonという関数にする

まあクラスでもとんでもなくいけないということはない
それでわかりやすくなるというのならね

687:デフォルトの名無しさん
16/10/31 05:10:17.86 vSxBS38U.net
>JSON出し入れした場合などはプロトタイプが削除されどうせinstanceof等機能しないのだから。
ですよね。

>まあクラスでもとんでもなくいけないということはない
>それでわかりやすくなるというのならね
デシアライズした後はあんまわかりやすくならなさそうだったので質問してみした。

ありがとうございます。

688:デフォルトの名無しさん
16/10/31 06:43:17.85 xWfuY90D.net
>>677
POJOの意味をわかってないねw

URLリンク(ja.wikipedia.org) より

> POJOの概念は、明らかにPOJOという用語より前から存在する。なぜなら、
> オブジェクトクラスの自然なありさまとは、何ら特別なものではないからである。
> この用語の功績は、何らかのフレームワークを使う利点がその複雑さを補って
> あまりあるかどうかということを開発者に考えさせるという点にある。
> シンプルな設計の方が優れている場合もあるということを思い出させる明確な用語がなくては、
> 複雑なフレームワークが十分な理由のないままシステムアーキテクチャに含まれてしまいやすい。
> POJOによる設計が一般的になるにつれて、大規模フレームワークの機能の一部はPOJOでも
> 実現できることが明らかになってきており、実際に必要な機能領域に対する選択肢は増えている。
> HibernateとSpringがその例である。

意味わかる? POJOっていうのは単なるクラス。フレームワークとかのクラスを継承しない
単なるクラス。それがシンプルで良いという考え方から生まれた用語。

JavaScriptでも同じ。単なるクラスがシンプルで良い。
wikipediaに書いてあるように、特別なものじゃないんだが?

永続化? 補完? そんなものPOJOの意義とは全く関係無い。

689:デフォルトの名無しさん
16/10/31 07:43:46.18 vSxBS38U.net
ありがとうございます。確かにPOJOの意味をしっかり理解してなく
ただシンプルぐらいの感覚で使ってたんですが、
ただ聞きたかったのは「POJOの存在意義」ではなく、
永続化するシンプルなクラスの「クラス宣言」をする存在意義をJavaScriptで知りたかったんです。
実際JavaScriptにはクラスというものはなくて
class Person {
 constructor(name, age);
はただのシンタックスシュガーらしいのですが、わざわざこんな宣言するメリットあるのかなと
それがが聞きたかったのです。
つまり、直接
var p = { };で作ってもいいんじゃないのかと。

690:デフォルトの名無しさん
16/10/31 07:47:51.97 vSxBS38U.net
つか、「存在」ってのつけたのがまずかったですね。
存在ってつけたからPOJOの存在意義って風に。すみまんせん。日本語がおかしかったです。
>永続化するシンプルなクラスの「クラス宣言」をする意義
ただの意義でした。

691:デフォルトの名無しさん
16/10/31 18:41:59.71 lofvnrlW.net
「クラス」って言うのはね、ただのオブジェクト指向をより良く扱うための概念なのよ。
だから、シンタックスシュガーもクソもなくてJSに「クラス」という概念はあるし、
素朴なプロトタイプベースで何もかもこなすのは非効率だから、昔から何らかのクラスシステムが使われてきた。
ただオブジェクト指向のやり方が「クラス」に縛られていないというだけ。
そして標準class構文は1つのより良いクラスシステムを提供するもの。

クラスから継承を取ったら何が残るかと言うと、それは見た目だよ。
createPersonのような関数で済ますのが普通だが、
もし他にそういった物がまだなく、全てクラススタイルで記述されていたらどうだ?
意味はなくとも意義がある。

>>var p = { };で作ってもいいんじゃないのかと
それは全体的な状況による。
例えばclass構文ガチガチのスタイル縛りの設計に無遠慮入れ込む事はできない。

692:デフォルトの名無しさん
16/10/31 18:44:45.95 pApy3Eby.net
var p={};←タプル
class Hoge←OOPのクラス
として使ってる

693:デフォルトの名無しさん
16/10/31 21:26:05.75 xWfuY90D.net
>>682
JavaScriptに限らず言語の文法っていうのは
可読性を上げるために作られているんだよ。

そして可読性を上げる方法の一つが、コードの中から読まなければ
いけないコードの量を減らすこと。

一定のパターンに対して名前をつけてその名前を覚えてしまうことで
読まなければいけない量を減らすことができる。デザインパターンもその一つだけど文法も同じ。
シンタックスシュガーも読まなければいけなかったコードを
短い言葉で置き換えてそれを覚えてしまうことで可読性を上げることにつながってる。
(とは言えなんでも覚えてしまうのは不可能だから、覚える価値があるものだけに絞るべき。
例えばプロジェクト固有の関数は覚える価値が少ない。言語仕様はどこでも使える知識だから覚える価値がある)

また文法っていうのは、汎用的な命令だたものを専用的な命令に置き換えることが
できるように進化してきている。例えばgotoはあちこちに飛ぶことができるものだが、
これをより専用化してbreakやretrunやthrowなどができた。
これはgotoだけでは色んな意味があるから何のために使っているのかわかりにくいが
専用的なbreakであればループを途中で抜けるんだろうなってことがわかるから。

JavaScriptはclassが無くても作れていたが、だが人間は関数とクラスを区別していた人が多かった。
だからその人間の感覚に近づけることが可読性向上につながるわけ。
可読性の問題なのだから無くてもできるのは当たり前。

var p = { }; これだとただのハッシュなのかクラスなのか、色んな使い方ができるから
これだけ見てもわかりづらいだろ? 使っている箇所を読まなければ分からない。

class Personであればnewして使うんだろうなってことが明確になる。
読まなくて済むわけだよ。これが可読性という話。

694:デフォルトの名無しさん
16/10/31 21:29:41.12 xWfuY90D.net
それと可読性というのは全体のコード量にも依存する。
class Personの方がわかりやすいが、全体のコードが数十行程度なら
そこまでする必要はない。

だからコードが短いうちはvar p = {} で書いていても良い。
だけどコードが増えたときには必ずclass Personに変更しなければいけない。

これを放っておけば、犬小屋を作るやり方で一軒家を作るようなことになりかねない。
規模によって適切なやり方は違う。

695:デフォルトの名無しさん
16/10/31 22:06:57.07 R+gJxrwJ.net
>>681
var p = { };は当然に
p instanceof Personがfalseになる

696:デフォルトの名無しさん
16/10/31 22:14:03.50 vSxBS38U.net
色々ありがとうございます。いわゆるクラスベースのオブジェクト指向言語については
もうC++,Delphi,Java,C#と10年以上はずっと使ってきました。
で、今回プロトタイプベースと言われる
JavaScriptを使って本格的にプログラミングし始めたのですが、もちろん最初は
クラス宣言してどんどんクラスを量産してたんですが、今回、例えばSettingsクラスみたいな
シンプルなPOJO的で永続化するクラスを作ろうとしたときに、
デシアライズすると元のプロトタイプチェーン?みたいなものが失われるし、
実際動作させた場合、最初のクラス宣言した元のSettingsクラスのインスタンスは最初の1回だけ作成され
後は別のプロトタイプチェーンが失われた別のインスタンス?とでもいうのでしょうかが動くことになるので、
ん?とちょっと手が止まってしまって質問した次第です。

697:デフォルトの名無しさん
16/10/31 22:22:26.57 vSxBS38U.net
まぁ、永続化後に元のプロトタイプチェーンが失われてinstanceofが機能しなくなりますが、
もちろん、クラス宣言があった方が、実際それ参照すれば元々どんな構造だったのか分かりやすいとは
もちろん思ってましたが、それを踏まえてJavaScriptの経験豊富な方たちは
どうしてるのかなと思って質問したわけです。

とりあえずはプロトタイプチェーンとか気にする必要ない用実装するので
クラス宣言する方向で行こうと思います。

698:デフォルトの名無しさん
16/10/31 22:23:55.93 vSxBS38U.net
Setttingsクラスとかだとクラス宣言ないとどんな設定あるのか把握きついですしね。

699:デフォルトの名無しさん
16/10/31 22:55:13.38 hNQh9muD.net
>>688
> デシアライズすると元のプロトタイプチェーン?みたいなものが失われるし、
> 実際動作させた場合、最初のクラス宣言した元のSettingsクラスのインスタンスは最初の1回だけ作成され
> 後は別のプロトタイプチェーンが失われた別のインスタンス?とでもいうのでしょうかが動くことになるので、
考え方がクラスベースで固定されてるのでプロトタイプチェーンをしっかり学ぶべきな気がする。
デシリアライズしたらプロトタイプ上のプロパティが失われるというが、実際にはシリアライズされた時には失われているのでは?
シリアライズが正常動作しているならそれはデシリアライズ処理がおかしいだけ。
最も、プロトタイプ上のプロパティを拾ってないだけな気もするが。

700:デフォルトの名無しさん
16/10/31 23:08:27.14 xWfuY90D.net
>>688
永続化が問題なのか?クラスの話関係ないじゃん。

シリアライズっていうけどさ、やってるのはJSON文字列への変換だろ?
前提として関数等はJSON文字列に変換することはできない。

シリアライズされたデータの中に関数定義は含まれないので
関数定義とデータは別々に管理しなければならない。
ここまでは自明だよな?

あとはクラス定義(プロトタイプチェーン含む)をコードで作った上で
その中のデータのみをシリアライズ & デシリアライズする。
これがJSONオブジェクトを使った場合のやり方だろ?

701:デフォルトの名無しさん
16/10/31 23:09:18.71 xWfuY90D.net
つーかクラスと永続化の話を切り離して考えろ!

702:デフォルトの名無しさん
16/10/31 23:20:25.00 xWfuY90D.net
そもそも永続化の話ということで考えると、
お前それ本当に永続化したいと思ってんのか?って言いたくなるんだが。

何のために永続化が必要なんだ?
永続化なんてしないだろ。永続化しないもののために
わざわざ永続化のためのコードなんて書く意味ねーぞ?

Javaの話でも同じ。永続化しないものにSerializableなんて
やる必要ないぞ。何も考えずに無駄にコピペしてねーか?

703:デフォルトの名無しさん
16/10/31 23:29:48.72 vSxBS38U.net
え?
永続化する必要あるから永続化しようとしてるのに・・

704:デフォルトの名無しさん
16/10/31 23:48:32.48 VoAu6vx9.net
もう、JavaScriptやめて、Java使えよ

グダグダとくだらねぇこと語って

705:デフォルトの名無しさん
16/11/01 03:03:10.88 lWEkG1Wt.net
「Try Haxe」ヘックスで、試してみ

AltJSのHaxeでは、ソースコードを文字列化して送っても、型が消えない。
大規模開発に向く

706:デフォルトの名無しさん
16/11/01 08:40:03.75 MkSUKVBa.net
>>689
分かった分かった。
君とここの住人はクラスに対する考え方が違うから話が噛み合っているようで無かったみたいだ。

要するに、クラスベース言語では通常捨てオブジェクトを作るにもクラスを設計するしか無いので迷わないが、
JSではプレーンオブジェクトを扱いたい場合にどうしたら良いかという話でしょ?

それならわざわざクラスを設計する必要がないというのが一般的な話だ。
オブジェクトの型ごとに空のクラスを置くのは全くもってJS流ではない。

JSでは、オブジェクトはより自由で気軽なもの。
オブジェクトを作りたいというだけなら、リテラルを使う。

幾つも同じタイプのオブジェクトを生成したい場合関数にて生成するが、
そういった場合それらのオブジェクトに共通した操作を定義したい場合も多い。
ここで初めて出てくるのがクラスだ。

つまりクラスとは、オブジェクト生成に必須のものでは勿論無いし、
あくまでオブジェクト指向の上で構造化のプログラミングする中で出て来る
手法・ツールの一つという位置づけでしか無い。

よって話を戻すと、今回の場合Personクラスを作る必要はない。
というかJSを使いに取っては完全にあり得ない、考えたこともない思考なので、混乱が生じた。
作る必要はないというか、そのような事を考えるのが異常なレベル。

707:デフォルトの名無しさん
16/11/01 10:02:53.69 JdgZau7x.net
またバベル君が狂い始めてるのか。

708:デフォルトの名無しさん
16/11/01 21:13:39.04 iw2Pppzi.net
>>698
お前がJS流とかきめんなや。
クラスを使うかどうかは規模やどう使うか決まる。
言語で決まるわけじゃない。

一般的なクラスとして扱いたいならばクラスにした方がいい。
人間の感覚とコードをできる限り近づけるようにするべきだ。

>>699
呼んだ?w

709:デフォルトの名無しさん
16/11/01 21:24:11.29 MkSUKVBa.net
>>700
いや、今話されてるのは言語で決まる類の話だ。
古き良きクラスベース言語では原則実態であるオブジェクトを作るには
雛形であるクラスを設計しなければならない。
しかしプロトタイプベースでもあるJSではその限りではない。
違いがあって当然。

710:デフォルトの名無しさん
16/11/01 21:34:38.58 iw2Pppzi.net
>>701
なんで古い前提で話をしてるんだよw

新しいJavaScriptではclass構文が追加された。
当たり前だが気まぐれで追加されたわけじゃない。

これが必要とされたからだ。
であれば、どちらかと言えばclassを使うのが適切な場面では
classを使う方がいい。

プロトタイプベースから”改良"されてclass構文が追加されたんだよ。

711:デフォルトの名無しさん
16/11/01 21:46:38.71 o4WGeuVh.net
アロー関数とクラス構文使わない奴は馬鹿と思う
アローのthisそのまま使えるのはチョー便利
長いfunction書かなくていいし

712:デフォルトの名無しさん
16/11/01 22:07:12.64 x6lATtpW.net
誰に向かって言ってるの?

713:デフォルトの名無しさん
16/11/01 22:10:49.88 iw2Pppzi.net
分割代入もなにげに便利だよな。
最初はあまり使わないかなとも思ったけど
関数の引数で分割代入とか目からうろこのテクニック
Promiseと組み合わせて使うとほんと便利

714:デフォルトの名無しさん
16/11/01 22:20:38.57 MkSUKVBa.net
>>702
>>どちらかと言えばclassを使うのが適切な場面ではclassを使う方がいい
とは一体何と何を比較して物を言っているの?
もしかしてclass構文と従来の関数+prototypeを比較した話をしているの?

自分はそんな話は全くしていないんだけど。
オブジェクトリテラルは君も使うでしょ?
それが無い言語、シンプルな使い捨てオブジェクトでさえも
そのための使い捨てクラスを作って、newするのが基本な言語もある。
それとJSは違うという話をしてるんだけど。

それとプロトタイプベースから改良されてという意味も分からない。
今まではプロトタイプベースの皮を被った癖のあるクラスシステムしか用意されてなかった
プロトタイプベースはあくまで言語の縁の下でしかなく、
自由に触れられず結局中途半端なクラスシステムに縛られていた。

プロトタイプベースが真に開放され、インスタンスベースなプログラミングが出来るようになったのは
class構文が搭載されたのと同じES2015から。
つまり"改良"はプロトタイプベースからではなく、プロトタイプベースの皮をかぶった中途半端なクラスシステムから。
その壁に穴を開けて下のプロトタイプベースと、上のより良いクラスシステムを見通せるようにしたというのが"改良"だ。

715:デフォルトの名無しさん
16/11/03 22:59:33.56 cb4Y2Yz9.net
つうか、jscript.netとかswfのes4とか、十数年前からみんなclassて書いてるよ。

716:デフォルトの名無しさん
16/11/04 01:26:18.56 LmRSOsos.net
誰もclass構文の話はしていない

717:デフォルトの名無しさん
16/11/04 19:37:01.89 eNDgRS9h.net
>>708
JavaScriptのスレで話す内容ではない。

718:デフォルトの名無しさん
16/11/04 21:21:51.64 LmRSOsos.net
JSのプロトタイプベースに纏わる話は十分このスレの担当範囲だろうよ

719:デフォルトの名無しさん
16/11/07 21:32:53.88 toRb2seg.net
だれかCancelTokenについて話さない?
Promise.prototype.cancelよりもどこがどう優れてるのかとか。

720:デフォルトの名無しさん
16/11/07 22:10:09.38 883psKTk.net
せめてリンク貼れや

721:デフォルトの名無しさん
16/11/07 22:35:42.50 toRb2seg.net
ほい
URLリンク(github.com)

722:デフォルトの名無しさん
16/11/07 22:46:11.29 883psKTk.net
> The cancel tokens of this proposal are heavily inspired by Kevin Smith's design sketch,
> which are in turn inspired by the .NET task cancelation architecture.
> They are discussed further, in much more detail, in "Cancel Tokens".

inspired by the .NET task cancelation architecture か
なら良さそうだな。

723:デフォルトの名無しさん
16/11/08 07:34:19.94 Cn2WM8Zt.net
そう、これが違和感があるのって、taskのcancelationだからなんだよ。
キャンセルの仕組みを外に出した方が応用が効いて便利ってことは分かるけれど、
PromiseってあえてjQueryなどのDefferedと違って内部を外に出さないように設計したよね。

将来的には増やす案があったし、V8なんかは暫く独自機能残してたけど、立ち消えになったよね。
Promiseはあくまでいつか確定される値の抽象だからそんなの付けるべきでないって意見が強かったよね。

逆にそうだからこそ、キャンセルの仕組みを外に出したとも見れるけれど、
プロミスの状態で考えると、解決・棄却・その他は対等なので、
一つだけ操作・利用の仕組みが大きく違うのが違和感ある。

724:デフォルトの名無しさん
16/11/08 09:02:08.41 le3Xpa4U.net
> PromiseってあえてjQueryなどのDefferedと違って内部を外に出さないように設計したよね。
というか、もともとキャンセルの仕組みもついでに処理途中の通知のシステムもないでしょ?

非同期処理をネストしないで書くための方法にとどめておくべきだよ。
asyncとawaitというシンタックスシュガーが使えない環境で
これらを使わずに同じように書くための仕組み。

それ以外は「タスク処理」をするためのフレームワークであって
Promiseとは別に作るべき。

> プロミスの状態で考えると、解決・棄却・その他は対等なので、
Promiseがやるのは順次処理(次の行へ進む)とエラー(例外)だけ
そもそもタスクとして考えるのがおかしい。

つーかついこの間たまたまタスク処理的なものを作ったけど
キャンセルとか状態の通知を追加するとPromiseとは呼べないものになったよ。
内部的にはFetch APIとかPromise使ってるんだけど、それを囲うための
タスク処理とそのタスクを管理する仕組みはイベントベースにせざるを得なかった。
Promiseでは無理

725:デフォルトの名無しさん
16/11/08 09:41:38.26 le3Xpa4U.net
なんでタスク管理の仕組みがPromiseじゃ無理かって言うと独自のメソッドが必要になるから。

タスクを管理するためのメソッドは色々ある。
タスクの中止やタスクからの情報通知だけじゃなくて
タスクの一時停止や再開、タスク情報の設定
(例えばダウンローダーみたいなのであれば保存するファイル名の変更とか)

Promiseでは情報がPromiseオブジェクトしか返ってこない
例えばFetch APIはPromiseオブジェクトを返すが、これはFetchオブジェクトじゃない。
Fetchオブジェクトに対してcancelとか色々やるならわかるが、
Promiseにcancel生やすなら、Promiseが内部的にFetchオブジェクトのcancelに
処理を渡さなきゃいけない。他のメソッドも同様。

そしてPromiseにキャンセルがあると思いきや、イベント通知。
つまりFetch APIを例にすると進捗状況だね。その進捗状況のイベントハンドラは
Fetchオブジェクトを知ることができるべきだろうけど、じゃあイベントハンドラで
キャンセルしたいときは? 方やPromiseのcancel、方やFetchオブジェクトのcancelじゃわけがわからない。
イベントハンドラの中でPromiseオブジェクトを取得できるのも意味不明。

Promise内部やPromsieの引数にPromiseを生成したオブジェクトを参照できるようにする方法も考えられるけど
Promiseのチェーンは前の戻り値を引き継いでいけるという仕組みだから使い方がおかしい。

時間切れだからここまでにしておくけど、ようするにPromiseでタスク管理をしてはいけないという話

726:デフォルトの名無しさん
16/11/08 09:46:21.72 le3Xpa4U.net
で、俺の意見としてはPromiseはこのままでいいから
別でタスク管理の仕組みを作れ。
タスク登録して優先順位とか並列実行とか
めんどくさかったわw

727:デフォルトの名無しさん
16/11/08 10:58:01.33 Cn2WM8Zt.net
>>718
いや、君の意見は部分的にはもっともだよ。でも現実そうでないのがなんで?って話。

CancelTokenは、それ自体では完結してない。
あくまでPromiseに「解決」・「棄却」の2つの状態に更に「その他」を加えることが中核。
つまりPromiseが君の言うPromiseじゃなくなることまでは確定されてるのよ。

あくまでそのトリガーを、解決や棄却と同じ形でせずに、
外部からコントロール出来るようにするということでしかない。

だからもっと独立したTaskを作らなかったのが何で?って思うし、
Promiseを継承したCancellablePromiseでもなく、.cancelメソッドを生やすだけでもなく、
どうしてこういう今までのJSの流れと違う、ある意味中途半端で特殊な形にまとめたのかなって疑問。

728:デフォルトの名無しさん
16/11/08 10:58:54.93 oVtTKQIX.net
ゴミ

729:デフォルトの名無しさん
16/11/08 11:04:57.61 Cn2WM8Zt.net
だから自分が言いたいことを整理すると、
どうしてPromiseとTask管理のキャンセルの仕組みを悪魔合体させたのかということ。
そしてそれが幾らか便利なのは分かるが、
簡単に.cancalメソッドを付けたりするくらいでも多くの場合十分なのではないかということ。

730:デフォルトの名無しさん
16/11/08 19:41:39.60 L5B8nS+2.net
classを定義したのですが、そのクラスのメソッド内のコールバックの中で
別のメソッドを呼び出したいのですがどうすればいいでしょうか??
class MyClass {

 method1();

 method2() {
  xhr.onreadystatechange = function() {
   method1を呼びたい。けど、this.method1じゃだめ
  }
 }

}

731:デフォルトの名無しさん
16/11/08 19:54:23.01 nv3pE1Bb.net
>>722
var that = this; で別変数に入れておいて、xhr.onreadystatechange = function(){ that.method1(); } みたいに使う。
あるいは xhr.onreadystatechange = () => { this.method1(); } みたいにアロー関数を使う。

732:デフォルトの名無しさん
16/11/08 20:02:58.32 L5B8nS+2.net
>var that = this; で別変数に入れておいて、xhr.onreadystatechange = function(){ that.method1(); } みたいに使う。
なるほど。this自体を別の変数に入れておけばよかったんですね・・
自分はvar method1 = this.method1
とメソッド自体を別変数に入れて呼び出してたんですけど、呼び出しは成功するっぽいのですが、
method1の内部でthisをmethod1() { thisほにゃらら }と参照するとthisが未定義になって困ってました。

>あるいは xhr.onreadystatechange = () => { this.method1(); } みたいにアロー関数を使う。
アロー関数は聞いた事ありませんでした。調べてみます。

ありがとうございます。

733:デフォルトの名無しさん
16/11/08 20:36:55.73 oXq4xn77.net
ぶっちゃけstatechangeは滅多と使うものではない。
onload使え、もっと言うとfetch使え。

734:デフォルトの名無しさん
16/11/08 21:22:58.34 L5B8nS+2.net
何が標準でどの資料みればいいのかわかりませんが、
onloadは非標準とか書いてあったので、onreadystatechange使ってました。
onload調べてみます。fetchはなんぞ?

735:デフォルトの名無しさん
16/11/08 21:35:01.22 L5B8nS+2.net
FetchってXHRと全くの別物か。

736:デフォルトの名無しさん
16/11/08 22:01:06.66 odPOKtVp.net
>>722
var that = this; は古い
handleEvent を使えばスマートに書ける
URLリンク(developer.mozilla.org)

737:デフォルトの名無しさん
16/11/08 22:13:14.01 L5B8nS+2.net
XHRのエラーハンドリングをまだほとんどしてなかったのですが、
onreadystatechangeだとエラーでstatusが0の時の処理とかあるので、
onloadとonerror使えばすっきりするってことですかね。
ということでonloadとonerrorに書き換えます。

738:デフォルトの名無しさん
16/11/09 06:22:28.44 br65i1Lj.net

板復帰(OK!:Gather .dat file OK:moving DAT 521 -> 520:Get subject.txt OK:Check subject.txt 521 -> 521:Overwrite OK)0.44, 0.42, 0.41
age subject:521 dat:520 rebuild OK!

739:デフォルトの名無しさん
16/11/09 08:10:50.79 HRJGJTih.net
>>726
もし冗談でなく本当にonloadが非標準と書かれた情報が存在し、
それを見てしまったのなら今すぐに目ン玉を引っこ抜いて洗ったほうが良い。
それは5年以上前の情報だから、けして参考にしてはいけない。
死ぬぞ。

740:デフォルトの名無しさん
16/11/09 14:41:13.38 SYPVDf2E.net
>>726
XHR
URLリンク(xhr.spec.whatwg.org)
Fetch
URLリンク(fetch.spec.whatwg.org)

741:デフォルトの名無しさん
16/11/11 11:06:53.92 hqcaajAu.net
npm install yarnと
linuxのyumとかapt-getでいれるyarn
どっちを使えばいいんですか?

742:デフォルトの名無しさん
16/11/11 21:39:29.00 ENznHnYU.net
ndenv、nodenv、nodebrewあたりを使ってるならnpmしか選択肢にならない

743:デフォルトの名無しさん
16/11/13 16:04:40.73 QhlptiVm.net
Google翻訳が改善されたというニュースを皆見たと思うが、
これは我々の世界の英語が得意でない者にとって革命だ。
今までは訳すと読むだけで頭が痛くなるような奇妙な日本語が生成されていたが、
今では勉強に集中できる程度に精度が向上している。

744:デフォルトの名無しさん
16/11/13 16:08:36.94 foNYoSMf.net
やったぜ

745:デフォルトの名無しさん
16/11/13 16:32:58.01 jy2VGr1W.net
Promiseって、処理結果を外に出したり、外から値もらったりするときに
レキシカルバインドした変数を介さないといけなくてダサい
もっとカッチョ良い制御構文無いの?

746:デフォルトの名無しさん
16/11/13 16:47:42.97 foNYoSMf.net
>>737
*function

747:デフォルトの名無しさん
16/11/13 16:52:48.84 TWR6TIrT.net
>>737
それ使っても、Promiseが見えなくなるだけで、
「レキシカルバインドした変数」は同じだよな?

748:デフォルトの名無しさん
16/11/13 21:18:16.74 nngvad4K.net
>>737
try-catch

749:デフォルトの名無しさん
16/11/13 21:33:19.82 jy2VGr1W.net
thenのコールバックの戻り値がPromiseだと、新しいPromise作らないで、それを使うのか
配列に複数の値突っ込んでそれを持ち回す事にした

レキシカルバインドした変数に代入する方法では、書き込む方と読み出す方の同期を取るのが厄介

750:デフォルトの名無しさん
16/11/13 21:51:23.69 TWR6TIrT.net
> 書き込む方と読み出す方の同期を取るのが厄介
シングルスレッドなのに何を言ってるのだろうか?

751:デフォルトの名無しさん
16/11/13 23:47:53.73 jy2VGr1W.net
>>742
Promiseは非同期オブジェクトだから
それと同期してない奴が触ったときに処理が完了してるとは限らないんだな、これが

752:デフォルトの名無しさん
16/11/14 00:34:40.39 UEPxPzue.net
>>743
Promiseは非同期処理を同期的に記述できるようにするものなんだが?
同期的に記述してるのに同期をとるのが厄介ってお前理解してないんじゃね?w

753:デフォルトの名無しさん
16/11/14 00:47:56.56 8ZP1uHGR.net
>>743
それと同期してない奴というのはPromiseに組み込めないの?

754:デフォルトの名無しさん
16/11/14 00:49:40.25 y8otP/4p.net
>>744
処理待ちしてる間に別の処理を差し込めるからバインドしたthisの内容が保証されないって言いたいんじゃね

755:デフォルトの名無しさん
16/11/14 01:06:58.66 UEPxPzue.net
>>746
意味わからん。まあ一言言っておくと、保証されないわけがない。

756:デフォルトの名無しさん
16/11/14 01:22:56.04 y8otP/4p.net
>>747
オブジェクトにデータ積んで行くイベントをPromiseで繋げて完了待ちしてる合間に、
ユーザの操作で別イベントが発火したら未完了のデータに触れちゃうし書き換えられもするだろ?

757:デフォルトの名無しさん
16/11/14 01:24:49.33 Gl21TU7L.net
let g;
(new Promise())
.then()
.then(v => { g = v;}) // <==== (1)
.catch();

console.log(g); // <===== (2)

(2)を実行する時に(1)が完了している事は保証されていない

758:デフォルトの名無しさん
16/11/14 01:38:40.81 UEPxPzue.net
>>749
> (2)を実行する時に(1)が完了している事は保証されていない

???

その場合は、(2)を実行する時に(1)が完了していないことが事が保証されてる

Promiseを実行して処理を非同期にした時点で、後回しにされるんだよ。
JavaScriptはシングルスレッドなんだから後回しになった処理が先に終わることはない。
他に割り込まれること無く(2)が実行される。

759:デフォルトの名無しさん
16/11/14 01:40:04.94 UEPxPzue.net
>>748
それはPromise関係ないな。レキシカルバインドした変数も関係ないな。

二つのボタンがあったとして、先にクリックしたほうが
先に変数にデータを入れられるってだけの話だ。

760:750
16/11/14 01:43:25.22 UEPxPzue.net
あとついでに行っておくとそのコードはバグってて動かない
もう少しまともなサンプルもってこい

761:デフォルトの名無しさん
16/11/14 01:44:04.31 y8otP/4p.net
>>751
お前……さては同期の意味を理解してないな?

744 名前:デフォルトの名無しさん [sage] :2016/11/14(月) 00:34:40.39 ID:UEPxPzue
>>743
Promiseは非同期処理を同期的に記述できるようにするものなんだが?
同期的に記述してるのに同期をとるのが厄介ってお前理解してないんじゃね?w

762:デフォルトの名無しさん
16/11/14 01:46:54.76 UEPxPzue.net
>>753
理解してないと思ったなら自分の考えを書けよ。

763:デフォルトの名無しさん
16/11/14 01:52:00.66 wKdLnPZ8.net
昔サーバ会社に設定のことで問い合わせしたらさ
「example.jpというドメインは存在しません」
というトンチンカンな返答をもらったことあるんだよ

それに匹敵するくらいの無知さを>>752からは感じた

764:デフォルトの名無しさん
16/11/14 01:54:42.93 UEPxPzue.net
>>755
おまえ馬鹿だろw

今ここで間違ったコードを書く理由がないだろ。
>>749はPromiseの使い方を全く分かってない
ということでしかないんだが。

Promiseを使ったコードを書けないから
どういう動きになるのかを自分で確かめることも出来やしない

765:デフォルトの名無しさん
16/11/14 08:36:58.57 Gl21TU7L.net
>>750
> その場合は、(2)を実行する時に(1)が完了していないことが事が保証されてる

だから何?
逆と対偶って知ってる?

766:デフォルトの名無しさん
16/11/14 08:49:19.57 Gl21TU7L.net
想像力が欠如しているID:UEPxPzueには理解出来できなかったが、
複数の非同期オブジェクトを協調して動かす場合は同期が不可避って事だよ

シングルスレッド? 何それ、美味いの w

767:デフォルトの名無しさん
16/11/14 09:12:07.77 UEPxPzue.net
>>757
どこが逆と待遇なんだよw

保証されてると言ってるだろ。
必ず(2)は(1)よりも先に動くんだよ。

768:デフォルトの名無しさん
16/11/14 09:20:35.38 Gl21TU7L.net
このスレは頭の悪い人が多いな

「逆と対偶って知ってる?」今日1日猶予あげるからよく考えてごらん

769:デフォルトの名無しさん
16/11/14 09:36:25.06 UEPxPzue.net
こいつ前スレかどこかでsetTimeoutが必要だとか言って暴れてたやつだろw
蓋を開けてみれば、下請けに作らせた(嘘だろうなw)独自実装の
PromiseっぽいPromiseではないもの(つまり別物)の話で
そいつにしか関係ない話だってやつ。

770:デフォルトの名無しさん
16/11/14 14:11:42.63 SjW+Vo1Y.net
>>761
俺じゃないよ。
俺は眺めてるw

771:デフォルトの名無しさん
16/11/14 14:29:20.23 njlrvKgq.net
スマンが俺もずっと様子を見ていたが>>737の意味が未だに分からないww
最初はプロミスは基本的に1つの値を流していくため、
非同期処理中沢山の変数を共有しようと思ったら外部変数にするしか無いのが
関数型チックに書ききれなくて煩わしいのかと思ったのだが、そうではないのか?

772:デフォルトの名無しさん
16/11/14 14:30:47.94 njlrvKgq.net
>>760
頭がいいのなら、馬鹿にも分かるように説明しろ
それができないのならお前の中でのことでしかない

773:デフォルトの名無しさん
16/11/14 17:08:18.46 SjW+Vo1Y.net
正直、RxJSが気持ちよすぎてPromiseがあろうが無かろうがどうでも良くなって来てる。俺は。
仕事では使わんけど。

774:デフォルトの名無しさん
16/11/14 17:17:23.31 rHIPepSr.net
>>749
何を当たり前のことをいってるんだ?
非同期処理ならそれが当然だろう
非同期処理を同期処理化したいならawaitを使えばいい
awaitは非同期処理を理解していない初心者が有り難がるが、非同期処理のメリットが全部なくなるきたがるんだよな

775:デフォルトの名無しさん
16/11/14 17:27:11.76 kL+E10ET.net
>>749
実行キューに登録された関数が終了するまでは他の関数が起動することはないから絶対2が先に実行される

776:デフォルトの名無しさん
16/11/14 17:40:50.48 0PpRMTCP.net
>>760
知ってるけど、だから何?
頭が悪いのはお前の方だわ

777:デフォルトの名無しさん
16/11/14 17:44:02.19 kL+E10ET.net
何だ荒らしか

778:デフォルトの名無しさん
16/11/14 17:54:39.16 kL+E10ET.net
俺もjavaから入ったからjsの非同期はjavaのスレッドと思っていたけど(だから何故どこにも排他処理の事が書いてないか疑問だった)、しっかり説明読んでやっと理解出来た
だから初心者には難しいのは知ってる
でも初心者なら普通黙って聞くよね?

779:デフォルトの名無しさん
16/11/15 01:46:02.87 b2LTbejx.net
そう。JavaScriptはシングルスレッドっていうのはそういうこと
非同期処理と非同期は処理がどちらが先に実行されるかは当然わからないが、
非同期処理と同期処理は同期処理が先に実行される。

Promiseを使った時点でそれは非同期処理になる
そしてPromiseは複数の非同期処理を、終わったら次に進むという形に
するものなんだから、どちらが先に実行されるかなんて迷う余地はない。

780:デフォルトの名無しさん
16/11/15 07:10:15.19 yv04JlgE.net
XHRがしっかり扱える程度にコールバックや非同期のこと理解してたら
Promiseなんて排他制御が必要になる部類よりずっと簡単ですぐ理解できると思うけどな

781:デフォルトの名無しさん
16/11/18 17:09:50.58 3VtCl+DR.net
yarnでeslint-config-airbnbインストールできません
たすけてください
yarn global add eslint-config-airbnb
yarn global v0.17.4
warning No license field
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning Incorrect peer dependency "eslint-plugin-jsx-a11y@^2.2.3".
[4/4] Building fresh packages...
warning eslint-config-airbnb@13.0.0 has no binaries
warning No license field

782:デフォルトの名無しさん
16/11/18 17:11:58.65 Amerid1m.net
いやーん

783:デフォルトの名無しさん
16/11/26 14:28:20.17 gspGiUEm.net
JavaScriptやjQueryでObjectをコピーする文法には
馴染めないのですが、そんな事はないですか?

784:デフォルトの名無しさん
16/11/26 18:46:17.35 pi8DulB7.net
>>775
> Objectをコピーする文法
あなたのその表現が馴染めない
シャローコピー?ディープコピー?

785:デフォルトの名無しさん
16/11/27 07:31:30.06 T/GZ1EFf.net
extendとかそう言うやつか。

786:デフォルトの名無しさん
16/11/27 08:53:16.82 AMkv8rTe.net
必要性がないなら馴染む必要もないと思う

787:デフォルトの名無しさん
16/11/27 13:37:49.51 wcKeEZPe.net
>>776
単にコピーと言ったときはシャローコピーだろ
ディープならディープと書く
おまえはキスするときいつも相手に訊くのか?

788:デフォルトの名無しさん
16/11/27 14:09:11.37 AZC2UzDM.net
そりゃ、キスする前にバードキスとディープキスどっちがいいって?
マナーとして聞くでしょうに。

789:デフォルトの名無しさん
16/11/27 15:54:55.51 4ldlRD1J.net
>>775
まずJavaScriptではいかなる方法を使っても
Objectを完全にコピーすることはできない。

だからObjectのコピーではない命令を
あんたが使っているだけにすぎない。

だからあんたがコピーだと思っている文法と
違うわけだ。

790:デフォルトの名無しさん
16/11/27 17:47:28.40 mveO+vV3.net
× いかなる方法を使ってもObjectを完全にコピーすることはできない
○ いかなるObjectをも完全にコピーする方法はない

791:デフォルトの名無しさん
16/11/27 22:08:04.56 q8z3Tnre.net
>>779
ひょっとすると、参照コピーを指しているのかも切れないので、シャローコピーと決めつけるのは早計

var obj1 ={}, obj2 = obj1;
obj1.a = 1;
console.log(obj2.a); // 1

初心者がはまりやすいのはこっちだと思うね
シャローコピーではまるのは Object.assign をディープコピーだと思って使ってしまうとか?
いずれにしても、質問者の情報待ち

792:デフォルトの名無しさん
16/11/28 18:13:43.58 E4XiTzNU.net
Objectのコピーも出来ないとかお前ら初心者過ぎるだろ

793:デフォルトの名無しさん
16/11/28 18:21:10.70 KKcrSnYF.net
JSON化して戻せばコピーできる

794:デフォルトの名無しさん
16/11/28 18:28:48.71 By9NqSkN.net
面倒くさいのでjQueryでコピーしてるわ

795:デフォルトの名無しさん
16/11/30 21:42:56.12 0ROmCizq.net
同一ドメインでpostMessageする場合には、
window.open()で開いた親子関係のウインドウ間のみ可能なのでしょうか?
全く他人のウインドウ同士(同一ドメイン内)でも同様にpostMessageできますか?
試したのですが出来ませんでした。

796:デフォルトの名無しさん
16/12/01 02:35:33.78 86kKAE3r.net
Broadcast Channelで可能

797:デフォルトの名無しさん
16/12/01 08:41:27.60 elqpLc9i.net
>>787
>>775もそうだが、無理に新しい日本語を発明して質問するのは止めてくれ
「全く他人のウインドウ」とは何か具体的に説明すべき

>>775は「Objectをコピーする文法」がオレオレ用語
現存の演算子や制御構文にはObjectをシャローコピー/ディープコピーする機構はない
Object.assignはシャローコピー可能だが、「文法」とはこれいかに?
「文法」が代入演算子を指すなら>>783がしっくりくるが、オブジェクトをコピーが曖昧故に既に複数の解釈が出来てる
知ったかぶりで専門用語を並べ立てるぐらいならコードで説明した方が100倍マシ

798:デフォルトの名無しさん
16/12/01 13:42:59.96 rRTfenTZ.net
>>789
アスペは大変だね

799:デフォルトの名無しさん
16/12/01 14:51:06.99 V0GR9lTF.net
>>789
> 「全く他人のウインドウ」とは何か具体的に説明すべき
「window.open()で開いた親子関係のウインドウ」ではないウィンドウだと、普通なら理解できると思うが。

800:デフォルトの名無しさん
16/12/01 14:53:06.08 MTDix4/Z.net
親子丼と他人丼の関係なら理解できるがw

801:デフォルトの名無しさん
16/12/01 18:22:15.66 NluWgpRa.net
>>791
その要件ならiframe要素からcontentWindowを得ればいいだろう
が、「window.openだけでなく、フレームはダメでこれこれこういうものなんです」と条件を後出しする気がしてならない

802:デフォルトの名無しさん
16/12/01 18:48:17.00 V0GR9lTF.net
>>793
どこからiframe要素がでてきたんだ?
質問するのも大変だなという感想。

803:デフォルトの名無しさん
16/12/01 19:18:46.44 FPpa4B9L.net
仕様書ですら何の説明もなく用語や謎のフレーズが出てくることはよくあるな

804:デフォルトの名無しさん
16/12/01 19:27:18.92 NluWgpRa.net
>>794
>>791の要件は満たしている
「window.open以外」としか情報がないのにどう解釈するんだ?

805:デフォルトの名無しさん
16/12/01 21:17:00.50 wkCVFNfo.net
vue-routerってSPA向けであって、
ただ単にURLを変えずに画面切り替えさせるツールとして使えないの?

やっぱりそれだとCSS切り替えさせるだけがいいのか

806:デフォルトの名無しさん
16/12/01 21:19:22.43 d1oSzjmi.net
どう解釈するんだ?ってwindow.open以前に
「全く他人のウインドウ」という要件があるだろ。

iframeの中に入っているwindowなら
「全く他人のウインドウ」でもアクセスできるとでも思ってるのか?

807:デフォルトの名無しさん
16/12/01 21:20:40.53 d1oSzjmi.net
>>797
URLを変えずに画面を切り替えたいのなら
単なるAjaxで実現できる

808:デフォルトの名無しさん
16/12/01 22:10:50.23 qVQfYo/5.net
>>798
「全く他人のウインドウ」とは?
ウインドウに他人も何もないが、何がどう他人?
イメージで語ってる感があるから具体的な表現に直した方がいいと思うぞ

809:デフォルトの名無しさん
16/12/01 22:40:32.66 WdTiwpMY.net
だからね、他人丼と親子丼の関係だって

810:デフォルトの名無しさん
16/12/02 00:12:25.33 tqwX+tIq.net
>>800
無能はレスしないで。じゃまだから

811:デフォルトの名無しさん
16/12/02 01:35:18.54 yix14ac2.net
他人っていうのは要は血が繋がっていないってことでしょ。
起源が関係ない同ドメインのタブ間でメッセージングしたいってこと。

812:デフォルトの名無しさん
16/12/02 02:27:06.31 cAbrvXmy.net
定義するなら「どちらからも API を用いて直接的に参照できない Window オブジェクトどうし」くらいかな

813:デフォルトの名無しさん
16/12/02 08:30:06.20 yix14ac2.net
いや、それはかなりおかしいだろう
API関係なく「windowオブジェクトを取得できない状態」

814:デフォルトの名無しさん
16/12/02 11:43:29.21 f/evnOKU.net
windowオブジェクトの親子関係など存在しない

815:デフォルトの名無しさん
16/12/02 13:22:55.58 7VByTnYi.net
>>803
ウインドウに血縁関係を持ち出している時点でいろいろおかしいから
あと、質問者でもないのに憶測でものを語り過ぎ

816:デフォルトの名無しさん
16/12/02 13:31:01.39 7VByTnYi.net
>>806
一応、window.parent があるからその関係性を親子と呼称しているんだろうね
そこから更に「血が繋がっている」と称しているっぽいけど、定義の範囲が曖昧すぎて本人だけが知るオレオレ用語と化してる

817:デフォルトの名無しさん
16/12/02 13:57:08.34 lwDfhxMF.net
>>808
血が繋がってる云々は、元発言者の発言ではない
あと、お前以外は大体なんのこといってるかわかってる

818:デフォルトの名無しさん
16/12/02 21:30:01.22 Y0rnRsuL.net
「大体」 って、なんか曖昧な感じでちょっと良くないと思うなぁ

819:デフォルトの名無しさん
16/12/02 22:03:00.38 tqwX+tIq.net
全員何のこと言ってるかわかってるって
言っていいと思うよw

820:デフォルトの名無しさん
16/12/02 22:45:13.80 7KiF/zbr.net
>>809
だから、質問者以外が憶測でものを語り過ぎといってるんだよ

821:デフォルトの名無しさん
16/12/03 02:24:14.51 1XG4MZmv.net
誰か答えてやれよ

>>787
windowオブジェクトが取れないならpostMessageはたしかできない
そもそも同一ドメイン(厳密にはオリジン)なら目的にもよるがCookieやlocalStorage、iframeなんかも制限ゆるく使える

822:デフォルトの名無しさん
16/12/03 05:01:50.15 SlvstEBQ.net
>>813
次レス>>788で答え出てるじゃん。

823:デフォルトの名無しさん
16/12/03 08:26:46.93 DMuEuKTJ.net
質問者は雲隠れしてるし、回答する必要はないのでは
それと、ECMAScriptの質問ではないし

824:デフォルトの名無しさん
16/12/03 08:52:02.02 kCSsmmVz.net
>>787
BroadcastChannel 使えばいけるのでは?
URLリンク(html.spec.whatwg.org)

825:デフォルトの名無しさん
16/12/04 18:07:27.84 DmbMEkfK.net
vue.jsのイベントハンドラで、
keyupがCtrlとEnter同時押しの場合メソッド実行、ってどう記述すればいいんでしょう

漁っても見つかりませんでした。

826:デフォルトの名無しさん
16/12/04 20:20:50.75 +/vGZpO/.net
>>718
ここの内容を理解してれば書ける
URLリンク(jp.vuejs.org)
後はメソッド作ってそこでctrlKeyが押されたか素のjavascriptで書けばおk

827:デフォルトの名無しさん
16/12/04 20:57:20.70 ObsZQ3a0.net
>>818
お前がマヌケなことはよくわかったよw

828:デフォルトの名無しさん
16/12/05 14:41:47.17 py+X8wbm.net
関数の引数で、数値変数を参照渡ししたいんだけど どうすればいいかな

829:デフォルトの名無しさん
16/12/05 15:08:03.07 pSDwKct5.net
数値・文字列などは、オブジェクトではなく、primitive なので、
書き込み不可能な値だけが、直接、埋め込まれている

オブジェクトではないので、参照・アドレスなどは存在しない。
値しか存在しない

830:デフォルトの名無しさん
16/12/05 16:03:02.66 py+X8wbm.net
>>821
そこをなんとか
裏技とか無いかな

831:デフォルトの名無しさん
16/12/05 16:33:21.44 8BrnA5VP.net
配列変数で渡せないのかな?
ダメなら、jsonみたいに特定の区切り情報を間に挟んだ文字列にするとか。

832:デフォルトの名無しさん
16/12/05 16:42:52.62 ANvwzotj.net
数値を参照渡ししたくなる時点で設計がおかしいから見直した方が良い
どうしても必要なら>>823

833:デフォルトの名無しさん
16/12/05 17:15:20.81 Oi3oGEbA.net
>>822
数値に何を求めているかにもよるが、new Number で大体の要件を満たせる。
valueOfを動的に書き換えれば値を書き換え可能。

834:デフォルトの名無しさん
16/12/05 18:16:52.64 py+X8wbm.net
>>825
すばらしい
ありがとう
超助かりそう

835:デフォルトの名無しさん
16/12/05 19:24:44.97 eUg7PlUS.net
なんか勘違いしてるぞ。
何度も色んなスレで話されてきたことだが、JSに参照渡しはない。
オブジェクトもプリミティブも共有渡し、もとい参照の値渡しだ。

836:デフォルトの名無しさん
16/12/05 20:05:18.10 8BrnA5VP.net
Objectのnew・deleteでGCが発生しないって事かな?

作ってみたいモノが有るから、そのうち試してみるか。

837:デフォルトの名無しさん
16/12/05 21:34:32.19 PskkFbSl.net
>>827
気づいてないのかもしれないが、
「参照の値渡し」のことを参照渡しって言ってるんだよ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch