- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
29 :デフォルトの名無しさん[sage]:2015/12/20(日) 00:52:32.40 ID:wOVtY/I0 - >>28
> そしてArrayのメソッドは、ArrayLike(この場合lengthを持つもの)について保証していて > isArrayは配列がどうかのチェックではなく、Arrayかどうかのチェックだ これは「isArray は Array.prototype の動作を保証するかどうかを返す」と考えていいのか? これならまあ使える仕様だ。 ちなみに確認したが、DOMのCollectionについては isArray は false になる。 実際の所、このCollectionは無理矢理Array的アクセスが出来るように見せかけただけのものであり、 書き換え不能にしてあるから、例えば Array.prototype.splice.call(DOMのCollection,1,1) は(エラーを返さないが)動作しない。 だから辻褄は合っている。 まあ正直、「動作しないのならエラー返せよ」と思うが。以前はまった。 > @@toStringTagをお忘れかな? ああこれは知らなかったからだね。 これも自然な仕様だが、だとするとMDNもちょっと書き換えたほうがいい気はするが。
|
- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
30 :デフォルトの名無しさん[sage]:2015/12/20(日) 00:53:42.58 ID:wOVtY/I0 - > 経験上==を基本で使ったからといってバグになるようなことはない
> 型変換のバグは予想外に同値判定で通ってしまうことよりも、予想外に通らない事のほうが圧倒的に多いのだから まあ実際はそうなるはず、というかそれを目指して型変換規則が作られているはずなので。 実際のコードを見ると、==派と===派は半々という感じか。 一応googleのコーディング規約には === を使えと明記されていたはずだが、今見ると無い。 削除されたか、或いは俺の勘違いかだが、しかし日付を入れてないからどっちか分からない。 https://google.github.io/styleguide/javascriptguide.xml この手のドキュメントのリリース日が辿れないってマジで馬鹿なのかあいつら。 というかこの辺で色々文化が違って無駄にストレスが溜まる。 俺は見た目はどうでもいい派なので、文字数の違いとかは気にならない。 俺が組んだところは基本的に === でも動くようにしてあるので、全部書き換えてもほぼ問題ないはず。 実際は歴史的経緯で混在しまくり、今更書き換えてデグレードするのは避けたいので、放置している。 ただJavaScriptの本来の設計は == なのだと思う。 (基本 == で、真に必要がある場合は === で)
|
- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
31 :デフォルトの名無しさん[sage]:2015/12/20(日) 00:54:09.55 ID:wOVtY/I0 - とはいえ、実際の所、他言語だと「潜在バグ」を嫌うので、===推奨になるのも分かる。
というか、おそらくそちらの方がプログラミングとしては正道だ。 JavaScriptの仕様は、「チャキチャキ作ってサクッとリリース」向けであり、「バグがないプログラミング」向けではない。 とはいえ、Webにはこれが正しいのも事実。 マイナーバグに対する作り込みでリリースが遅れるくらいなら、 バグがあってもクリティカルでないのならリリースした方がWebにはいい。 相手は「今欲しい機能」を求めているのだから。 逆に「バグのないプログラム」を目指すのなら、基本===ベースで行った方がいい。 相手は「将来欲しい機能」を求めていて、そこにバグがあっても困るという人だから。 ここら辺は置かれた状況の違いで文化の差異が発生していると考えている。 > わざわざArray以外にも対応する、のではなく、わざわざ対応しないようにするのかと考える これが典型で、「100%動く保証」が必要か、「99%動けば問題ない」とするかだ。 見た目動いているからいい、を是とするか非とするかとも言える。 テストで100%網羅できることはない。 バグが無いことを目指すのなら、対応している事が確認できなければ使えない。 Array.isArrayでそれが確認できるのなら、それは使える仕様だ。
|
- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
32 :デフォルトの名無しさん[sage]:2015/12/20(日) 00:54:39.34 ID:wOVtY/I0 - @@toStringTagの件でも思ったが、まだ「ローカルプロトタイプ」は出来ないのか?
クラスシステムモドキで頑張っているようだが、元々prototypeを拡張するように設計されており、 実際の所、それの方がどう考えても使い勝手がいい。 だから、prototype.jsが流行ったというのも分かる。 問題はプロトタイプ汚染が発生することで、 逆にいえば、ローカルプロトタイプが規定できて汚染が発生しないのなら、おそらくそっちの方がいい。 とはいえ、今でも手動で __proto__ 等を使って設計できそうではある。 誰もこれをしないのはまた別の問題があるのか? jQueryにしてもバージョン混在の問題があり、もちろん回避策もあるわけだが、 そもそもjQueryをローカル読み込み出来れば問題なくなるはず。 システム的にはスコープチェーンを辿っていく方式なので、 関数単位でのローカルプロトタイプは出来るように思えるが。 @@toStringTagについては、誰かが書き換えた影響が自分にも出る可能性があるということだと思うが、 この手のプロトタイプ汚染っぽいものを言語的に排除できるようにして、 prototypeを自由に拡張するのが本来のJavaScriptの思想だと思うのだが。 元々一人で組むチョロスクリプト用だからその機能がなかったのは仕方ないとしても、 無理矢理クラスにしようとしていて手こずっているように見える。 ローカルプロトタイプの方が多分この言語的には似合うだろう。 誰もやろうとしていなさそうなのは、何か別の問題があるのかな?
|