+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/07/10(日) 22:46:13.52ID:ZmdhimD5>>2-6のテンプレを読んだ上で質問してください。次スレは>>950が>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
0153デフォルトの名無しさん
2016/07/17(日) 00:51:30.43ID:UzC9Qtsnシングルスレッドだから。
0154デフォルトの名無しさん
2016/07/17(日) 00:53:51.78ID:PyzTEoPA結局の所お前が言いたいのは、カリー化は部分適用以外に
使いみちが思いつかないってことだろ?
上の方でlodash/fpってライブラリを紹介した。
このライブラリではすべての関数がカリー化されている。
partialでは「カリー化+部分適用」をしてしまうから
カリー化だけをした関数を作ることはできない。
このライブラリを作ることはできないんだよ。
114 自分:デフォルトの名無しさん[sage] 投稿日:2016/07/16(土) 15:57:58.64 ID:Opsk5pSE [3/12]
lodashの公式トップからリンクはられているlodash/fpって面白いな。
more functional programming (もっと関数型プログラミング) だからfpか。
https://lodash.com/
https://github.com/lodash/lodash/wiki/FP-Guide
> The lodash/fp module promotes a more functional programming (FP)
> friendly style by exporting an instance of lodash with its methods
> wrapped to produce immutable auto-curried iteratee-first data-last methods.
説明は面倒なのでqiitaの記事にまかせるがカリー化することのメリットでもあるな。
http://qiita.com/kiri/items/9790c3af42235273c9dd
> lodashの各関数について、引数の順序をiterateeが最初になるように、
> あるいは処理対象データが最後になるように変更した上で予め全てcurryingしたもの。
0155デフォルトの名無しさん
2016/07/17(日) 00:54:28.92ID:zhfBdiNAマルチスレッドです
0156デフォルトの名無しさん
2016/07/17(日) 00:54:55.25ID:zhfBdiNA0157デフォルトの名無しさん
2016/07/17(日) 00:54:59.72ID:PyzTEoPA> それで lodash では飛ばせるように拡張されているが、それは無駄だと思うか?
「便利なもの」が「より便利なもの」になった。
「より便利なもの」の部分がなければ「便利なもの」になるだろう。
0158デフォルトの名無しさん
2016/07/17(日) 00:56:17.69ID:PyzTEoPA> Rubyにそういう書き方が出来るのならそれでいい。
じゃあそれでいいということで話は終わりだ。
まったく何が言いたいんだかw
Rubyにはpartialが無いって言ってるのに
なんでlodashのpartialと比べるんだか。
0159デフォルトの名無しさん
2016/07/17(日) 00:56:59.12ID:zhfBdiNA0160デフォルトの名無しさん
2016/07/17(日) 01:03:22.24ID:UzC9Qtsnいや話がおかしな事になっているぞ。
全てカリー化された世界があるのなら、それはそれでいいんだよ。
Haskellがそうだし、lodash_fpもそうならそれでいい。
> partialでは「カリー化+部分適用」をしてしまうから
これが間違い。
partialはカリー化しない。(当然fpが付いてない方のlodashな)
>>157
無いよりましって考えか?それならそれでいい。
ただ俺はRubyのcurryなら要らないし、_.partialなら欲しい、ってだけ。
_.curryは_.partialの代用にはなるけど、記述が冗長になるだけだから、
_.partialだけでいい。
>>158
:skip ってググッても出てこないが。知ってたらURLくれ。
0161デフォルトの名無しさん
2016/07/17(日) 01:35:44.19ID:o7sDjaLN> curryでもundefinedを与えればよい。
内部的にundefinedで処理をしていればそれで等価だが、arguments.lengthで分岐処理していれば等価ではなくなる
0162デフォルトの名無しさん
2016/07/17(日) 01:51:40.48ID:UzC9Qtsn何かと思えばそれも明確な間違いだな。
undefinedを指定したらundefinedという値がバインドされるだけ。
指定してないことにはならない。例えば
func.bind(undefined)
ならundefinedがバインドされ、結果的にwindowが与えられるようだ。
これは後からcall等で与えても上書き出来ないんだよ。
てか真面目な話、お前はもうちょっと書いた方がいいんだよ。
基礎は出来ているから、後は書けよ。
0163デフォルトの名無しさん
2016/07/17(日) 03:25:10.13ID:PyzTEoPA> :skip ってググッても出てこないが。知ってたらURLくれ。
なんかお前勘違いしているようだなw
https://lodash.com/docs#partial
> // Partially applied with placeholders.
> var greetFred = _.partial(greet, _, 'fred');
> greetFred('hi');
> // → 'hi fred'
partial の _ って何かわかるか?
これはただの変数だぞ。
特殊な変数を作ってそれを渡されたときだけ
特別扱いするのならなんだってできるよな?
0164デフォルトの名無しさん
2016/07/17(日) 03:26:39.06ID:PyzTEoPA> undefinedを指定したらundefinedという値がバインドされるだけ。
> 指定してないことにはならない。例えば
> func.bind(undefined)
あのさ、bindの第一引数は、thisをなんに固定するかなの
二番目以降とは扱いが違うの。それぐらい分かれよw
0165デフォルトの名無しさん
2016/07/17(日) 03:28:33.37ID:PyzTEoPA今話してるpartialとは違うものなんだわ。
> curryはlength分の引数を与えないと処理が終わらないが、partialは終わらせることが出来る、という違いがある
partialの話をしてるのに、bindを持ってきて、bindの第一引数は〜(partialにないもの)
とか言い出すのって、意味がわからんというか卑怯な行動というか、
お前ほんとに何を主張したいの?
0166デフォルトの名無しさん
2016/07/17(日) 03:39:02.29ID:PyzTEoPA> それはpartialで引数が足りなければundefinedとして処理されるってだけだろw
> curryでもundefinedを与えればよい。
さて反論ついでにこれの検証でもしてみましょうかw
function foo(a, b, c) {
return a + ':' + b + ':' + c
}
var foo1 = _.partial(foo, 1);
console.log(foo1(2)); // 1:2:undefined
var foo1 = _.curry(foo)(1);
console.log(foo1(2, undefined)); // 1:2:undefined
はい、たしかにpartialはundefinedとして処理されるだけ。
curryでもundefinedを渡すことで同じことができました。
なお、こうすることでもっと近い動きになりますね。
var foo1 = _.curry(foo, 2)(1);
console.log(foo1(2)); // 1:2:undefined
console.log(foo1(2, 3)); // 1:2:3
0167デフォルトの名無しさん
2016/07/17(日) 03:54:11.01ID:UzC9Qtsnいや既存の関数を組み合わせるから意味があるんだろ。
CSSみたいに予約語で :before とかがあるのなら意味があるが、それなら意味無い。
てかお前話について来れてないし、それ以前に関数型を理解出来てないな。
>>164
ではRubyのcurryで飛ばして指定してみろ。出来ないだろ。
(第1引き数を指定せずに第2引き数を固定する)
こちらも話について来れてない。
対象がthisか引き数かなんて関係ないんだよ。
当然bindかreplaceかcurryかも関係ない。
てかお前、結局自分の間違いは絶対に認められない馬鹿なのね。
そりゃお前荒らし扱いされるよ。
>>165を見てもお前は理解出来ていない。
>>161は正しいことを言っている。(確認はしていない)
ただそれは余りないから、俺がもうちょっとマシなケースを付け足しただけ。
いずれにしても、卑怯なのはお前だよ。
日本語が不自由なら、何度も読み返してまっすぐ回答しろよ。
そして自分の間違いを認めろ。
いちいち揚げ足をとるのは俺の趣味じゃないからしないけど、沢山間違えているよ。
そしてお前の間違い雅言院のくせに無駄吠えが多い。
実力がある奴は無駄吠えしないものだよ。お前が小物であることは間違いない。
JavaScriptにおいては、undefinedを指定するのと、何もなくて結果的にundefinedなのは、
扱いが違うんだよ。俺たちはそれを言っている。お前は多分このことを知らない。
だからundefine指定すればいいとかいう寝ぼけた回答が出てくる。
>>166を見ても、お前は根本的に分かってない。
0168デフォルトの名無しさん
2016/07/17(日) 03:59:07.76ID:PyzTEoPA> ではRubyのcurryで飛ばして指定してみろ。出来ないだろ。
だからなんでlodashの特殊機能ができるかできないかの話をしてるんだ?
それが意味不明だって話をしてるんだろ。
Ruby版lodashを作ればいいだけだろ。
まずなお前は、コードを書け。書いて証明しろ。
お前がやってるのは「分かってない」って言うだけだろ。
何が分かってないのかも言えやしないw
0169デフォルトの名無しさん
2016/07/17(日) 04:00:58.88ID:PyzTEoPA認められない〜
関係ない〜
わかってな〜い〜
間違えてるよ〜
知らない〜
何回言ってるんだかw
否定するだけで、何が正しいのかを一つも書いていない。
0170デフォルトの名無しさん
2016/07/17(日) 04:05:21.46ID:PyzTEoPAfunction foo(a) {
return Array.prototype.slice.call(arguments).join(':')
}
var foo1 = _.curry(foo, 2)(1);
console.log(foo1(2, 3, 4, 5));
0171デフォルトの名無しさん
2016/07/17(日) 05:17:29.10ID:o7sDjaLNhttps://jsfiddle.net/4fa1n49y/
故にcurryはpartialの代替にならない
0172デフォルトの名無しさん
2016/07/17(日) 05:41:33.47ID:uL5p4xyf扱いが違うんだよ。
正しくは、引数において、undefinedを指定するのと、何も指定しないのとは扱いが違う部分がある、だろう。
結果的にundefinedを参照する部分になってしまうと違いはない。
まあとは言え標準仕様もだいぶそういう記述じゃなくなってきたし、
全体的な雰囲気で言うと『JavaScriptにおいては〜』って感じじゃなくなったけどね。
0173デフォルトの名無しさん
2016/07/17(日) 06:20:05.19ID:PyzTEoPAだからなに?としか言いようがない。
curryでもundefinedと何も指定しないのの
区別はつくんだから同じ話。
0174デフォルトの名無しさん
2016/07/17(日) 06:22:53.14ID:PyzTEoPA実装できたな。
https://jsfiddle.net/4fa1n49y/1/
お前が何を言いたいのかさっぱりわからない。
0175デフォルトの名無しさん
2016/07/17(日) 06:29:22.54ID:PyzTEoPAarguments.length = 0 と > 3 の場合を忘れていたなw
https://jsfiddle.net/4fa1n49y/2/
0176デフォルトの名無しさん
2016/07/17(日) 06:30:28.09ID:PyzTEoPAhttps://jsfiddle.net/4fa1n49y/3/
0177デフォルトの名無しさん
2016/07/17(日) 07:56:59.16ID:pSsgY/TxJSでは、ブラウザ(実行環境)側のGUIスレッドと、
君が書いたJSのソースコードの、2つのスレッドがある
while(true){}のような、無限ループをすると、君が書いたJSから、
ブラウザ側へ制御を渡す、タイミングがないから、描画もされない。
これを実行環境を除いて、シングルスレッドと言う
function f(){
〜処理
setTimeout(f, 0);
}
一方、setTimeoutを使うと、イベントキューに投入だけして、関数fは、すぐにリターンする。
関数はスタックに積まれていないから、10万回以上再帰しても、スタックオーバーフローにならない
関数fがリターンしたら、ブラウザ側へ制御が移って、画面描画・入出力が行われ、
イベントキューから、次のイベントを取り出して、処理する
setTimeoutに、0msを指定しても、必ず一旦、ブラウザ側へ制御が移るので、ブラウザが処理できる。
ただし、0msを指定しても、実際には最低でも、4msかかる
0178デフォルトの名無しさん
2016/07/17(日) 08:08:36.38ID:zhfBdiNAつまりwhile(true){}をしている間は排他処理かなんかでGUIスレッドがロックされているんですね
でも2つのスレッドといっても非同期関数を呼び出したら沢山スレッドが出来るはずです
0179デフォルトの名無しさん
2016/07/17(日) 08:56:27.15ID:pSsgY/Txブラウザ(実行環境)側へ制御が移らず、
結局スレッドも作られないから、シングルスレッドと同じになる
非同期という意味は、実行環境のイベントキューへ、
イベントを投入だけして、関数fは、すぐにリターンする
そこで一旦、ブラウザ側(UIスレッド)へ制御が移って、様々な処理をこなせることが重要
0180デフォルトの名無しさん
2016/07/17(日) 10:07:12.11ID:zhfBdiNAつまり簡単に言うとjavaとは違うという事ですか?
0181デフォルトの名無しさん
2016/07/17(日) 10:45:47.12ID:pSsgY/TxAndroidでもそう。
UIスレッドと、自分の書いたソースコードの、2つのスレッドがある
ゲームループも同じ。
1秒に30フレームなら、33.3ms内に、自分のコードの処理を終わらせて、
UIスレッドに制御を移さないと、画面が再描画されず、駒落ちする
自分が書いたソースコードの部分は、シングルスレッドになるから、
どこかでUIスレッドに制御を移さないと、イベントが処理されない
0182デフォルトの名無しさん
2016/07/17(日) 10:50:30.76ID:UzC9Qtsnいやお前それ出来ていないし。
出来てないって分かってないのお前だけだし。
というか、お前が日本語分からない病を発症するのは自分が都合悪い時だけだよね。
そりゃやっぱり荒らしだよ。
馬鹿なお前の為に、俺たちは具体的に色々用意しているわけだが、
それを理解できないようならさすがにもう話は無理だ。
お前は表面的な読み方をしている。その単レスしか読めてないんだ。
なんでその話が出てくるのか理解出来ていない。
煽り抜きでガチのアスペなのかもしれないが。
俺たちはおかしな論理を展開していない。
前の話が通じなかったから別の言い方という至極当然のことを行っている。
もっと前のレスを読み直して、例えば>>171にしても何でその話が出てくるのか確認してから回答しろ。
お前は>>171しか見てないから話がずれる。
0183デフォルトの名無しさん
2016/07/17(日) 10:56:11.88ID:UzC9Qtsn俺が言いたかったのはundefined指定しても飛ばし扱いにはならないって事ね。
まあそちらの言い分はその通り。
0184デフォルトの名無しさん
2016/07/17(日) 11:11:11.44ID:UzC9Qtsn> JSでは、ブラウザ(実行環境)側のGUIスレッドと、
> 君が書いたJSのソースコードの、2つのスレッドがある
俺は詳しくないが、多分それはnodeの場合で、ブラウザのJSの場合は合わせて一つだと思う。
だから無限ループしたらブラウザごと固まる。
> ただし、0msを指定しても、実際には最低でも、4msかかる
これは環境による。というか最低4msかかる環境はかなり稀だと思う。
>>178
> 非同期関数を呼び出したら沢山スレッドが出来るはずです
これが間違い。
非同期関数は一つのスレッドによって順番に非同期に処理される。
という言い方だと余計混乱するかもしれないが、
非同期処理するスレッドが1つしかなく、それは同期処理しているスレッドと同じ物なんだよ。
だからそもそもスレッド生成しない。
全てを一つのスレッドが処理していくだけ。
0185デフォルトの名無しさん
2016/07/17(日) 11:15:00.98ID:UzC9Qtsn> UIスレッドと、自分の書いたソースコードの、2つのスレッドがある
繰り返すが、JSの場合はそれは違う。
とはいえそれ以外の部分は基本的な考え方ではあるし、
そちらの言い方の方が相手に通じるかもしれないが。
0186デフォルトの名無しさん
2016/07/17(日) 11:37:20.37ID:UzC9Qtsnこれな。
http://please-sleep.cou929.nu/onload-handler-setting-timing-and-async-request-of-image-element.html
不幸なことにこの現象が発生するのはIEだけで、他は問題ない為、
IEのバグだということになっている。
要するに、仕様上はJS側の実行状況を待って描画しないといけないわけではなく、
実際に独立して描画しているブラウザもある。
多分そちらの言っているUIスレッドってのはこれのことだろ?
それらとJSスレッドは同期しておらず、同期しろという仕様もない。
とはいえ現実的にはchromeやFFは同期しているわけだが。
まあ、質問者にはそちらの説明で十分だとは思うが。
0187デフォルトの名無しさん
2016/07/17(日) 11:49:36.13ID:PyzTEoPA> いやお前それ出来ていないし。
> 出来てないって分かってないのお前だけだし。
いやできてるでしょw
話について来れてない〜
認められない〜
関係ない〜
わかってな〜い〜
間違えてるよ〜
知らない〜
出来てない〜 ← NEW
0188デフォルトの名無しさん
2016/07/17(日) 12:23:25.28ID:PyzTEoPA>>186とかさ、いきなり全く関係ない
リンク持ってきて本当に意味不明w
0189デフォルトの名無しさん
2016/07/17(日) 12:42:49.70ID:BOb01YTDlodashのcurryは第二引数でlengthを指定可能だが、第二引数に0を指定したらもはや「部分適用」だな
https://lodash.com/docs#curry
>>171は「カリー化で部分適用は代用できない」といっているのだろうから、言葉が通じてない
rubyも引数の数を指定可能なようだから「部分適用」を実装可能だが…
http://docs.ruby-lang.org/ja/2.1.0/method/Proc/i/curry.html
この実装が一般的なのかどうかは知らんが、ID:PyzTEoPAはlodashの実装が絶対的なものと認識しているようだな
0190デフォルトの名無しさん
2016/07/17(日) 12:49:22.29ID:UzC9Qtsn>>161と>>171を読んで>>176は完全にアスペだぞ。煽り抜きで。
0191デフォルトの名無しさん
2016/07/17(日) 13:09:17.87ID:PyzTEoPA> lodashのcurryは第二引数でlengthを指定可能だが、第二引数に0を指定したらもはや「部分適用」だな
そのとおりだが?
だから curryで見事、partial(部分適用)を実装してみせただろ。
curryがpartialの代替になった。
> 171 名前:デフォルトの名無しさん[sage] 投稿日:2016/07/17(日) 05:17:29.10 ID:o7sDjaLN [4/4]
> curryでこのコードは実装できない
> https://jsfiddle.net/4fa1n49y/
> 故にcurryはpartialの代替にならない
curryの第二引数を0にしたらpartialの代替になるな。
0192デフォルトの名無しさん
2016/07/17(日) 13:10:48.13ID:PyzTEoPA> この実装が一般的なのかどうかは知らんが、ID:PyzTEoPAはlodashの実装が絶対的なものと認識しているようだな
それをいうならば、lodashのpartialを前提にして
話をすすめるのをやめろよ。
lodash以外のpartialの話は出てきていない。
0193デフォルトの名無しさん
2016/07/17(日) 13:50:05.02ID:oPCVgRrMconsole.log( (new Date('2010-6-2') - new Date('1996-10-21'))/(1000*60*60*24*365)|0);//13
console.log( (new Date('2010-10-18') - new Date('1996-10-21'))/(1000*60*60*24*365)|0);//14
でやってみたのですがどうも合っていない気がします
0歳 1996年10月21日
1歳 1997年10月21日
13歳 2010年06月02日
14歳 2010年10月18日?
14歳 2010年10月21日
初心者考えに「タイムスタンプで差分出して年間のミリ秒で割ればおk♪」と期待していたのに出来なくてショックででした(泣
そこで、ぐぐってみて修正したところ
function calculateAge (birthday, when) {
var b = new Date(birthday.getTime()).setFullYear(2000);
var w = new Date(when.getTime()).setFullYear(2000);
return when.getFullYear() - birthday.getFullYear() - (w >= b ? 0: 1);
}
console.log(calculateAge(new Date('1996-10-21'),new Date('2010-6-2')));//13
console.log(calculateAge(new Date('1996-10-21'),new Date('2010-10-18')));//13
console.log(calculateAge(new Date('1996-10-21'),new Date('2010-10-21')));//14
これで上手くいってるみたいです
が、理由がよくわかりません
setFullYearで2000年をまたぐ部分の処理をしているみたいですが
一体何のために処理をしているのでしょうか?
chrome
0194デフォルトの名無しさん
2016/07/17(日) 13:59:12.58ID:PyzTEoPA1年は365日じゃなくて366日の場合もあるんだから
それじゃだめだろ。
そのコードの意味は知らんし、一見してバグがあるだろうなと思ったので
読むつもりはないがうるう年の例外の例外の年の一つ、2000年が
俺らの人生の中で珍しく発生してるから、どうせそのための手抜きコードだろ。
0195デフォルトの名無しさん
2016/07/17(日) 14:12:23.95ID:PyzTEoPAところでJavaScriptライブラリのmoment.jsを使ってみてはどうかね?
http://momentjs.com/
http://momentjs.com/docs/#/displaying/difference/
moment("2010-10-18").diff('1996-10-21', 'years'); // 13
詳しくは検証していないが期待する結果になってないか?
俺もちゃんと調べてないが、上のリンクのちょっと下にある
「Month and year diffs」の所で特殊な処理をしてると書いてあるぞ。
0196デフォルトの名無しさん
2016/07/17(日) 14:28:20.51ID:oPCVgRrM使いたいのは山々なのですがchrome拡張内のコンソールで使おうとすると
拡張別にライブラリ導入の仕様が異なったり
他のライブラリと併用するととても野暮ったくなってしまうのです
0197デフォルトの名無しさん
2016/07/17(日) 14:41:02.77ID:PyzTEoPAよくわからんな。
結合して1ファイルにすればいいじゃないか?
0198デフォルトの名無しさん
2016/07/17(日) 14:46:55.90ID:oPCVgRrM別タグ移動、もしくは再読み込みした場合に、またライブラリを読みなおししないといけなかったり
その状態で長時間回すと止まったり、
拡張によって仕様が違うのでゴリ押しで導入してもエラーを吐く場合があるのです
0199デフォルトの名無しさん
2016/07/17(日) 15:03:05.93ID:PyzTEoPA頑張って勉強しろとしか言いようがないが・・・。
0200デフォルトの名無しさん
2016/07/17(日) 15:06:33.84ID:UzC9Qtsnそもそも - がオーバーロードされていないはず。
確かに動いてはいるが。
MDNのサンプルでも直接引いてはいないだろ。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
> setFullYearで2000年をまたぐ部分の処理をしているみたいですが
してないね。よく読め。
0201デフォルトの名無しさん
2016/07/17(日) 15:42:47.20ID:pSsgY/Txうるう年の2/29生まれなら、3/1で年齢が繰り上がる。
2/28生まれなら、2/28
12/31生まれなら、12/31
1/1生まれなら、1/1
年は年だけで、別に計算すればいい
0202デフォルトの名無しさん
2016/07/17(日) 16:00:18.92ID:PyzTEoPA詳しくないなら頑張らなくていいのに。
演算子のオーバーロードがないJavaScriptで何を言ってるんだって感じだし、
日付型をプリミティブ値に変換したらgeTimeと同じだって書いてあるし。
0203デフォルトの名無しさん
2016/07/17(日) 16:13:39.53ID:UzC9Qtsn> 日付型をプリミティブ値に変換したらgeTimeと同じだって書いてあるし。
どこに?
0204デフォルトの名無しさん
2016/07/17(日) 16:29:12.54ID:uL5p4xyfイベントループに依存してるから同期せざるを得ない。
0205デフォルトの名無しさん
2016/07/17(日) 16:43:27.90ID:UzC9Qtsn足し算はToPrimitive()で文字列になる。
さて引き算はToNumber()だから数値になると言いたいところだが、以下によると
http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
ToNumber(ToPrimitive(object))
らしい。
DateのToNumberとToPrimitiveの仕様が分かれば確定するが、どこに書いてあるのか分からん。
0206デフォルトの名無しさん
2016/07/17(日) 16:47:53.64ID:PyzTEoPAお前が持ってきたページのリンクを
一つ残らずクリックしろ
0207デフォルトの名無しさん
2016/07/17(日) 16:53:01.97ID:UzC9Qtsnいやそれは関係ない。
DOMツリーにぶら下げた時点で描画していい。
描画スレッドが別スレッドならその時点で描画が開始される。これがIE。
描画スレッドとJSスレッドが同一、或いは同期しているのなら、
JSスレッドが走行終了してから描画が開始される。これがCHとFF。(と言われている)
本来はIEの方が技術的には上のはずなのだけど、この点は完全に裏目ってる。
とはいえ、確か俺はFFでも遭遇した覚えがある。
それ以降は気を付けるようにしたから、CHでどうなのかは分からない。
0208デフォルトの名無しさん
2016/07/17(日) 16:55:50.50ID:PyzTEoPAアホすぎるものにレスするのも苦痛になってきたなw
>>186が持ってきたリンクは
画像のロードとそのイベントの話であって
画像の描画の話じゃない。
って言えば ID:UzC9Qtsnのアホさが
他の人には伝わるだろ。
本人はわからんだろうがw
0209デフォルトの名無しさん
2016/07/17(日) 16:56:21.43ID:UzC9Qtsn15.9にはないように見えるが。そこに無ければどこにある?
0210デフォルトの名無しさん
2016/07/17(日) 16:58:18.99ID:PyzTEoPAそっちじゃねーよ。
お前が持ってきたページを全部見直せ
0211デフォルトの名無しさん
2016/07/17(日) 17:01:26.78ID:PyzTEoPA0212デフォルトの名無しさん
2016/07/17(日) 17:11:33.81ID:UzC9Qtsn11.6.1.NOTE1か?
hintがどうこう言っているだけで、結果はよく分からんが。
>>211
俺は15.9に
ToPrimitive(Dateオブジェクト)
ToNumber(Dateオブジェクト)
がどうなるか書いてあるようには読めないよ。
0213デフォルトの名無しさん
2016/07/17(日) 17:18:42.95ID:PyzTEoPAそれ以前の話だからな。
そこに書いてないってことは、
それ以前に解決済みだってことだ。
それにしても ID:UzC9Qtsn のようなやつが仕様を持ち出すとか笑えるね。
仕様策定者でもない限り普通はコードを書いて何かしらの自体が起きて
(今回で言えば日付型同士の減算が可能!?)
その理由を知るために仕様を読むんだが、
まるで仕様ばっかり読んでわかった気になって、
実際に使ってないかのように見えるね。
つまり実戦経験がない。
0214デフォルトの名無しさん
2016/07/17(日) 17:25:35.91ID:UWgEbhve「1996年10月21日」生まれの人が「2010年10月18日」に誕生日を計算する場合、「2010-1996=14」では誕生日を求められない(まだ、2010年の誕生日が訪れていないからだ)
function calculateAgeのコード制作者はnew Dateを2000年に統一して差分をミリ秒単位でとることで誕生日が訪れているかを判定できると考えた
これは一見、正常動作しているように見えるが、どちらか一方が閏年だった場合に2/28の有無で24時間分のズレが生じるので完璧ではない
確実に判定するには
「年の差分」を得た後に「月の差分」「日の差分」「時間の差分(一日分で単位はミリ秒」を比較して誕生日が訪れたか確認する事だろう
0215デフォルトの名無しさん
2016/07/17(日) 17:29:05.04ID:UzC9Qtsnああ分かった。15.9.1か。
ToNumber/ToPrimitiveとかは総称として abstruct operation と呼ばれ、(9.1)
その呼称で記述されているわけか。(俺は総称があるとは知らなかった)
まあ引き算が出来るのはそれでよし。
足し算は
ToNumber(ToPrimitive(time values(=数値))) + ToNumber(ToPrimitive(time values(=数値)))
なんだから、ただの数値になるべきなのだが、実際はtoStringの連結になっている。
これは仕様違反なのか?
0216デフォルトの名無しさん
2016/07/17(日) 17:42:25.90ID:PyzTEoPA0217デフォルトの名無しさん
2016/07/17(日) 17:47:38.89ID:UWgEbhveあなたが示したリンク先に左辺がString型なら右辺もString型に変換し、連結した値を返す(return)と読めるが
http://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1
ES3なら日本語訳もある
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/11_Expressions.html#section-11.6.1
頼むから質問する相手は選んでくれ
彼は他人の無知を嘲笑ってかき回したいだけのいたずらっ子だ
質問するなとはいわないが、レスアンカをつけずに質問して彼をスルーする等の対策はとってほしい
0218デフォルトの名無しさん
2016/07/17(日) 17:48:47.85ID:PyzTEoPA> あなたが示したリンク先に左辺がString型なら右辺もString型に変換し、連結した値を返す(return)と読めるが
今回はDate型なんだから話が違う
0219デフォルトの名無しさん
2016/07/17(日) 17:51:08.17ID:PyzTEoPA出てきたのか?ってのが気になってるわけだがw
0220デフォルトの名無しさん
2016/07/17(日) 18:25:12.10ID:UzC9Qtsn確かにこれはやりすぎなので向こうに落とした。
http://echo.2ch.net/test/read.cgi/tech/1449440793/287-288
>>217
了解。とりあえず移動する。
0221デフォルトの名無しさん
2016/07/17(日) 18:32:24.27ID:PyzTEoPA0222デフォルトの名無しさん
2016/07/18(月) 05:37:57.21ID:FfTrxk2Lhttps://tc39.github.io/ecma262/#sec-addition-operator-plus-runtime-semantics-evaluation
Dateにはhintの無い(defaultな)プリミティブ化のとき
string化を優先させる特別な@@toPrimitiveが定義されてるので
toStringの方が呼ばれる。
https://tc39.github.io/ecma262/#sec-date.prototype-@@toprimitive
https://tc39.github.io/ecma262/#sec-toprimitive
https://tc39.github.io/ecma262/#sec-ordinarytoprimitive
0223デフォルトの名無しさん
2016/07/18(月) 11:30:58.84ID:bcoQ8eS/新しいバージョンが出てるのにnpm -g upで新しくなりません
いちいちアンインストールしてからインストールしなおしてます
どうやってアップデートするんですか?
0224デフォルトの名無しさん
2016/07/18(月) 12:12:24.05ID:UhcVRSnP0225デフォルトの名無しさん
2016/07/18(月) 15:33:47.35ID:2YiAFpK4document.ID.src = "pic.jpg";
これのIDの部分を配列変数みたいに使えないだろうか?
こんな感じで使いたいんだがこのままだとエラーになる
var list = [area0, area1];
document.list[0].src = "pic.jpg";
document.list[1].src = "pic.jpg";
なにかいい方法あったら教えて下さい
0226デフォルトの名無しさん
2016/07/18(月) 15:50:12.64ID:x26cHOJDもしかして、こういうこと?
var list = [
document.getElementById('area0'),
document.getElementById('area1')
];
list[0].src = "pic.jpg";
list[1].src = "pic.jpg";
0227デフォルトの名無しさん
2016/07/18(月) 16:26:38.85ID:2YiAFpK4できました
ありがとうございます。
0228デフォルトの名無しさん
2016/07/21(木) 15:12:44.45ID:hMSDEF/P何度もjavaを入れ直しているのにプラグインが入りません・・。
IEでは正常に動きます。原因が分かる方いたら教えて下さい・・。
0229デフォルトの名無しさん
2016/07/21(木) 15:52:26.95ID:H+8vmePLソフトウェア板に専用スレが立ってるからそっちで聞いてね
0230デフォルトの名無しさん
2016/07/21(木) 23:44:31.97ID:cYO+DsiXすみません
動いたので安心していたら
Uncaught TypeError: Cannot set property 'src' of undefined
キャッチされない例外TypeError:未定義のプロパティ 'SRC'を設定することはできません。
こんなエラーが出てしまいました。
いろいろ調べては見たのですが上手い解決策がありません。
なにかいい方法あったら教えて下さい。
0231デフォルトの名無しさん
2016/07/22(金) 00:12:24.76ID:2d8IYdtg.src をつけてるオブジェクトには、ちゃんと img要素のオブジェクトが入ってる?
あと、listを作るのは、ちゃんとHTML読み込みが完了してからにしてる?(window.onload を使うとか)
0232デフォルトの名無しさん
2016/07/22(金) 00:13:36.62ID:TYfQ1tRC何がやりたいのか分からないけど
list[0].setAttribute("src", "pic.jpg");
やってみたら
0233デフォルトの名無しさん
2016/07/22(金) 01:51:29.59ID:LRtdFfUywindow.onloadは使ってあるしsetAttributeもダメだったので
多分img要素読み込めていないことに問題があると思います。
時間もあれなのでまた明日挑戦します。
0234デフォルトの名無しさん
2016/07/22(金) 08:57:31.23ID:NAbIMrgH早くここまでの発言・気付き・結論の9割がおかしいことが分かるようになると良いね
0235デフォルトの名無しさん
2016/07/22(金) 10:37:40.26ID:pIiY+R73用途は、基本的には、自分のブログで趣味で使う程度です。
0236デフォルトの名無しさん
2016/07/22(金) 14:55:04.44ID:NRLrP2+LjQueryから入って詳細を学ぶ方が楽しみながら学べると思う
0237デフォルトの名無しさん
2016/07/22(金) 17:43:37.66ID:NAbIMrgH今は選択肢多いからねぇ。
0238デフォルトの名無しさん
2016/07/22(金) 18:53:53.17ID:MjNKqbzT書籍に依るかと
『JavaScript 第6版』は良い
https://www.oreilly.co.jp/books/9784873115733/
0239デフォルトの名無しさん
2016/07/22(金) 21:54:18.71ID:zhSM/RUJ0240デフォルトの名無しさん
2016/07/23(土) 00:39:55.52ID:tWjtYIW6読みやすい本ではない。
基本は十分知っている人が読む本。
0241デフォルトの名無しさん
2016/07/23(土) 03:00:38.15ID:eYAwBGPhimg = new Image();
img.onload = function(){}
img.src =
0242デフォルトの名無しさん
2016/07/23(土) 03:07:12.52ID:eYAwBGPhimg = new Image();
img.onload = function(){}
img.src = '〜.png'
onload を先に書かないと、いけないのじゃ?
.src が先だと、ブラウザの並行処理により、
画像読み込みが先に済んだ場合、永遠に、onload が呼ばれない
(ダブルクォーテーションを使うと、文が切れるから、シングルクォーテーションに変えた。
投稿確認画面が出る際、バグる。2chのバグ)
0243デフォルトの名無しさん
2016/07/23(土) 03:13:57.94ID:tWjtYIW6それをIEのバグだとか騒いでいた
間抜けがいたよなw
0244241
2016/07/23(土) 03:28:35.94ID:eYAwBGPh0245デフォルトの名無しさん
2016/07/24(日) 11:54:04.53ID:2LCCcZChシングルスレッドなので、javaのようにループで待つことが出来ません
0246デフォルトの名無しさん
2016/07/24(日) 12:25:34.03ID:IAPsL1FIcallbackで書くところを同期処理のように書きたいってこと?
0247デフォルトの名無しさん
2016/07/24(日) 12:35:04.59ID:2LCCcZChfunction イベントが発生するまで待つ(){
}
みたいな関数を作りたいです
javaだと
var フラグ=false;
function コールバック(){
フラグ=true;
}
function イベントが発生するまで待つ(){
while(!フラグ){}
フラグ=false;
}
みたいなループで対応出来ましたが、シングルスレッドのjsだと出来ません
0248デフォルトの名無しさん
2016/07/24(日) 12:36:11.25ID:GAqeVEg9addEventListenerでイベントが発生するまで待つことが出来る
0249デフォルトの名無しさん
2016/07/24(日) 12:40:11.16ID:GAqeVEg9Javaは知らないが、そんなCPUを回す実装でしかイベントを実装出来ないものなのか?
同じように作るなら setInterval, setTimeout で実装出来るが、CPUを酷使する実装になる
0250デフォルトの名無しさん
2016/07/24(日) 15:00:05.65ID:p8SJSbCV> シングルスレッドなので、javaのようにループで待つことが出来ません
もしループで待つようなコードを書いたら、
クソコードだって言って突き返すけどなw
0251デフォルトの名無しさん
2016/07/25(月) 04:32:42.69ID:0UVAPYM3カードが無いと、52回もアラートが表示されるのを、阻止したい。
1回目のエラーで、即座に、スクリプトを終了したい
JSには、exit が無いようだが、どうすればよい?
非同期処理で、onerrorは後でコールバックされる
for (52枚分) {
var img = new Image()
img.onload = function () { 処理 }
img.onerror = function() {
alert("読み込みエラー")
}
img.src = どこか
}
0252デフォルトの名無しさん
2016/07/25(月) 05:41:30.27ID:oORbOkwxJSは互いに関係有るような無いような複数ファイルが動くもんだし、
イベントドリブンだから登録されてるものがあるかぎり動く。
で、その解決策としてはフラグを準備するとか、関数を共有して
シングルトンチックに書くとか簡単な方法はちょっと考えなくともナンボでもある。
まあ最近風に書くならPromiseベースにしてPromise.allでも使えばいいんじゃないかな
■ このスレッドは過去ログ倉庫に格納されています