JavaScript 4©2ch.net

2014/12/05(金) 12:19:07.19ID:fmzBASgG
( ^ω^) 初学者・迷子・ロリ幼女はこちらで
  _、_
( ,_ノ` ) プロフェッショナルはECMAScript デス 4へ

【前スレ】
JavaScript 3
http://peace.2ch.net/test/read.cgi/tech/1380177260/

【関連スレ】
ECMAScript デス 4
http://peace.2ch.net/test/read.cgi/tech/1325448978/
+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
CoffeeScript
http://peace.2ch.net/test/read.cgi/tech/1320949260/
TypeScript part1
http://peace.2ch.net/test/read.cgi/tech/1349187527/
構造化ウェブプログラミング言語Dart2
http://peace.2ch.net/test/read.cgi/tech/1319388343/
Microsoft SkyDrive API
http://peace.2ch.net/test/read.cgi/tech/1385604796/
【MACRO】Google Apps Script 質問スレ【DRIVE】
http://peace.2ch.net/test/read.cgi/tech/1404007623/
【node.js】サーバサイドjavascript 2【Rhino】
http://peace.2ch.net/test/read.cgi/tech/1358937029/
2015/02/18(水) 14:03:10.51ID:SiK8hGV0
>>69
> これから書くときはほとんど気にする必要はない
IE7 はまだサポート期間が残っているので「気にする必要はない」は語弊があるのでは?
2015/02/18(水) 15:06:09.95ID:9ZeaK8N0
文盲
2015/02/18(水) 17:28:09.82ID:yNLF/Zre
>>65
> ・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合
直感的に思いついた通りに実装すればいいだろ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});

> ・配列のようなオブジェクト(NodeList等)を判定したい場合
「ような」なんだから
if (hoge.length > 0) {
// 配列の「ような」オブジェクト
}
で問題ないだろ
2015/02/18(水) 19:17:18.75ID:lIxPY8wl
>>72
それは Object 型の一部しか判定できてない
2015/02/18(水) 20:55:04.71ID:yNLF/Zre
>>73
変なコーディングをしてる訳でもなく目的は達しているんで問題無い
2015/02/18(水) 21:00:07.21ID:lIxPY8wl
>>74
特定の Object 型に制限する理由は全くない
それから Null 型が考慮されてない
配列も型判定がないからプロパティアクセス演算子でTypeErrorになる場合がある
ECMAScript でコードを書いた経験が少ないとしか思えないレベルだ
2015/02/18(水) 22:43:31.46ID:M4E75IrS
>>75
null(undefined)チェックを忘れた…
function test(hoge, foo) {
'use strict';
if (!hoge) return;
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});
test(null);
test(undefined);
test([]);
test({hoge:[]});

単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
お前の方が素人丸出しだ
2015/02/18(水) 22:53:00.36ID:M4E75IrS
>>75
こっちもだった
if (hoge && hoge.length > 0) {
console.log('配列の「ような」オブジェクト', hoge[0]);
}
↓これらで問題無し
var hoge = null;
var hoge = undefined;
var hoge = [];
var hoge = {};
var hoge = {hoge:1};
var hoge = 1;
var hoge = "a";
2015/02/18(水) 23:37:18.13ID:86t2mSil
>>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう
さすがに{length:10}を配列のようなものとは呼びたくないけど
2015/02/18(水) 23:52:45.07ID:86t2mSil
>>76
これそもそも第2引数は一度も使ってないけど、何のためにあんの?

あと、
if (!hoge) return;
追加したら
test(false,false);
の時の挙動変わってんじゃん
2015/02/18(水) 23:55:34.69ID:M4E75IrS
>>78
いや{length:10}de配列ライクと言えると思われる
var hoge = {length: 10};
for (var i = 0; i < hoge.length; ++i) {
console.log(hoge[i]);
}
で全部undefinedが出力されるけど、それは普通の配列でも有り得る事だし
var hogeArray = Array.prototype.slice.call(hoge);
で配列に変換も出来る
2015/02/19(木) 00:01:52.76ID:4zgsUurY
>>79
直した…スマソ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (hoge && typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
2015/02/19(木) 00:46:16.03ID:+Jg4S+WS
>>80
JavaScript難しいなぁ
Array.prototype.slice.call(hoge);
ってするときに
hoge = {length:4.5} => 4コ
hoge = {length:Infinity} => 0コ
hoge = {length:99999999999 } => フリーズ
hoge = {length:-0.1} => 0コ
hoge = {length:-1} => フリーズ
hoge = {length:NaN} => 0コ
hoge = {length:true} => 1コ
うーむ・・・
でかいのはまだしも、負数を渡すとフリーズするのは内部で何をしているんだろう
2015/02/19(木) 01:00:49.63ID:4zgsUurY
>>82
sliceがマイナスの値は最後から処理するからな気がする
lengthがマイナスなのは配列とは言えないから
やっぱり
if (hoge && hoge.length > 0) {
var hogeArray = Array.prototype.slice.call(hoge);
}
ってのは必要だね
2015/02/19(木) 01:35:12.55ID:iPujbk1h
>>83
必要かどうかは仕様による。

>>83のコードが必要な理由は、lengthにマイナスが入ることが
プログラムの仕様的にありえるから、必要なのだろう?

lengthにマイナスが入った時どうするか?
例外を出すか、永遠と処理するか、hogeArrayをundefinedにするか。
それは仕様で決めること。

そのコードはhoge.lengthがマイナスの場合、hogeArrayは
undefinedになるという仕様のコード。
それの仕様でいいのかどうかを考える必要がある。
2015/02/19(木) 08:45:08.63ID:ACeVxkIV
>>76
> 単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
> お前の方が素人丸出しだ
そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
http://es5.github.io/#x11.4.3
前方互換性をふまえれば、ES6 でも正しく判定出来ることが望ましい
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-typeof-operator
Null 型を誤検知するだけなら「Object 型の一部」とはいわない
あなたは ECMAScript 仕様書をまともに読んだことがないだろう?
ES 仕様に言及している意見に反論するなら仕様書ぐらい読んで欲しい

>>78
> >>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう
わかりやすくいうならば、 Array.prototype.forEach と同様の判定といえるかな
Array.prototype.forEach では ToObject, ToInt32 で型変換しているわけだが、型変換せずに TypeError を返したい状況もあるだろう
http://es5.github.io/#x15.4.4.18
2015/02/19(木) 12:11:41.51ID:k55gX30E
>>85
> そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
それで事足りてるという事は仕様的に問題ないという事だ
対応できてない事で実用的に問題があるコード例を挙げて説明してくれ

そもそもJavaScriptは
var obj0 = {hoge:true, foo:false};
var obj1 = {foo:false, bar:1, hoge:true};
function Hoge() {this.hoge = true; this.foo = false;}
var obj2 = new Hoge();
のどれを渡されても同じように機能する事が期待されている
!obj(nullとundefinedのチェック)とプロパティーの存在チェック(と最終的に'number'などの型チェック)以外に必要だとは思えない
2015/02/19(木) 13:17:52.04ID:VHEGaKii
実際、>>72が直感的にコードを書いて多数間違えたぐらいだからなあ
rypeof演算子に関しては良い仕様とは言い難い
2015/02/19(木) 15:27:06.03ID:/+bx2aTM
なにがArrayLikeかは難しいよ。どういう目的で区別するかで変わると思う。なぜなら何を配列と見立てられるかは用途によって変わるから。
例えば配列に変換したいという場合なら、ES6のArray.fromを参考にすると、
lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
これが広義のArrayLikeだろう。

またはArray.prototype.concatで、引数をSpreadすべきかどうかなら、実は配列かどうかというチェックだと問題がある。
だからES6からは@@isConcatSpreadableのチェックに変わった。
要するに「一般的なArrayLikeの判定」を定義するのは無理というか、しても役に立つものにならないと思う。
2015/02/19(木) 16:24:08.30ID:+Jg4S+WS
>>86
プロトタイプチェインはたどらないの?
2015/02/19(木) 19:11:01.43ID:FI1nksg/
>>88
> ES6のArray.fromを参考にすると、lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
Array.from は配列に変換する、つまり Object 型に変換するから変換元が Object 型であることを求めないだけな気がする
ierator を除くと Array.from は ToObject, ToLength(Int32への変換)をしている
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
変換後のオブジェクトが ArrayLike と考えられるので ArrayLike は「Object 型」「Int32のlengthプロパティを持つ」になる
Array.from の挙動は>>85で説明されている Array.prototype.forEach の挙動と一致する
Array.prototype 系メソッドを一通り読めばわかると思うけど、全てそういう挙動になってるよ
対象を isArrayLike で判定して例外を返すか、ArrayLike に変換するか、は意見が別れる(ポリシーに依る)だろうけどね
ES6 の挙動に合わせるなら変換する方になる
2015/02/19(木) 21:45:10.46ID:/+bx2aTM
ToObjectがかかっているのは、null/undefinedはじきや、Getやらもろもろの処理がObjectであることを期待しているためだからであって、処理の本質とはあまり関係ないけどね。
あとToLengthはInt32でなく2^53-1までの整数。
長さを拡張すべきという問題が出て、Arrayに関しては互換性問題で見送られたけど、型付配列は長さ2^53-1までになったから、ここに関しても絶対基準はないと思う。
別にこの範囲でなくともエラーになるわけではなくて、範囲に収まるように強制されるだけだし。
2015/02/19(木) 22:21:02.70ID:cTS5FQ8e
>>91
なるほど
ES6 の Array.prototype.forEach の length も 2^53-1 に拡張されてるんだな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.foreach
今後、更に拡張される可能性を考えると、length に関しては Number.isInteger の判定ぐらいでいいのかもしれないな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger
2015/02/23(月) 05:03:25.31ID:m2dP1v8u
別に整数かどうかの判定は要らないだろう。
「"5"」だったら「5」、「true」だったら「1」になるのがJS流だし。
整数の長さが欲しければ「len = obj.length|0」とするのがJS流。
94デフォルトの名無しさん
垢版 |
2015/02/24(火) 00:54:33.32ID:XD7S4Fuq
try catchって頻繁に呼び出す関数では最適化できなくて遅くなるから使っちゃいけないのか?

知らなかった…Chromeのプロファイラに出ていた警告を見て初めて知った
2015/02/24(火) 11:35:35.42ID:SsySdaPd
>>94
ループで、独自につくったルーチンなどを頻繁にそれつかって回すと激遅になる
ので、なるべく、どこかで検証用の別ルーチンで対処させるようにしてる。
2015/02/24(火) 12:16:53.92ID:lFZ8d0+y
関数全体を覆わなければ問題ない。
一番ベストな使い方は関数呼び出しの部分だけに使用する。
try{ func() }
そうでなくても全体で使用しなければ、tryの掛かっていない部分はfor文等一定のブロックごとに最適化が働く。
2015/02/24(火) 12:32:14.82ID:6vv1mCHr
>>94
try catchの使い方を間違えてるんでしょ。

try catchを正しく使うということは
try catchを使わないことを意味するw

何を行っているかわからないと思うが、
基本的に、windowのerrorイベントを使えばいいんだよ。
errorイベントは、誰もcatchしない時に呼ばれる所。
ここでまとめて処理すればいいし、普通はここで処理するもの。

例外的に途中でcatchしなくちゃいけない時だけcatchをする。
だからtry catchを正しく使う = try catchを使わないということになる。

逆に間違った使い方をしていると、catchしてalert()とかreturn falseとかするから、
間違った使い方 = try catchが多くなる。
2015/02/24(火) 12:48:11.36ID:wY5F80Ar
>>94
try-catch は例外を捕捉しなければエラー処理出来ない場合に使うもの
例外が発生する条件は確定しているのだから、 try-catch を使わなくても対応出来る場合が大半を占める
try-catch を使うのは new ActiveXObject() で対応する引数に応じて処理を分ける等の例外的なケースに限られる
2015/02/24(火) 16:54:22.71ID:gLNZIunY
netbeansを使ってるんだけど最初にテンプレが出ますよね?あれを編集する方法ないですか?
2015/02/25(水) 22:58:43.24ID:JtIRtORE
現行スレ

+ JavaScript の質問用スレッド vol.123 + [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/hp/1423915644/
2015/02/25(水) 23:20:48.35ID:JFD+ngFs
>>99
[ツール]-[テンプレート]
[エディタで開く]
2015/02/27(金) 18:16:56.06ID:6eP810Kn
>>101
テンプレのタグが分かりません・・・
2015/02/27(金) 19:56:27.10ID:Wvtuv0/g
>>102
それは自分で努力すればいいよね?
2015/03/13(金) 19:23:10.11ID:UBRcUR4y
jsonの日
105デフォルトの名無しさん
垢版 |
2015/04/12(日) 11:08:10.55ID:7j69OB5F
『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』
http://www.amazon.co.jp/dp/4798043761/

せっかくだからJavaScriptで関数型プログラミングを学んでみるのも面白いかもしれないな。
106デフォルトの名無しさん
垢版 |
2015/04/12(日) 17:02:14.80ID:PVRHL1t5
>>105
Qiitaアカバンされたポエマー、毛の壁先生じゃんw
2015/05/18(月) 15:33:55.56ID:lIw4CyOJ
JavaScriptが20周年。開発者のBrendan Eich氏が過去と未来についてのスライドを公開
ttp://www.publickey1.jp/blog/15/javascript20brendan_eich.html
2015/05/18(月) 17:37:17.88ID:rf0kuBu1
>>107
たった10日で書いたのか。
通りでクソなはずだ。
109デフォルトの名無しさん
垢版 |
2015/05/20(水) 01:48:48.87ID:zDiYcCDM
言語としてはかなりシンプルだったからな。
LexとYacc使っただろうし、スタックマシンな
バイトコードインタープリタはSchemeのインタープリタを
Cで書いたことがあれば難しくない。

コードを10日で書いたからクソというよりは、
書く前に言語仕様をきちんと練らなかったからクソなんだろう。
110デフォルトの名無しさん
垢版 |
2015/05/20(水) 05:27:02.66ID:iajmjkjM
10日で書いたにしては良くできてるけど、もともとVBAみたいなものなのに、
後からいろいろ理屈を考えて素晴らしいものみたいに言いくるめようと
したのがいけなかったんじゃないの。

アプリに付属させるマクロだと思えば、納得の仕様だと思うけど。
元々そういうものなんだし。
2015/05/20(水) 11:19:23.20ID:0vsGwB+G
>>109
すまないが、ゴミをシンプルって言う風潮やめてくれるか?
2015/05/20(水) 12:06:13.47ID:D22K7RGs
ClojureScript使い始めたらJSのクソさが
気にならなくなってきた。
2015/05/20(水) 12:18:11.33ID:qzEPJuIN
誰でも10日で出来る作業なら
クソだろうさw

10日でとても出来ないような作業を
10日で作ったのならば、それは優秀ってことだよ。

優秀な人が作ったのだから、とても良く出来ている。
2015/05/20(水) 14:27:44.16ID:0vsGwB+G
>>113←こういうの権威主義の馬鹿っていうんだよねぇ。日本人に実に多い。
2015/05/20(水) 15:12:28.11ID:qzEPJuIN
どれだよ権威ってw
権威じゃなくて実力だろw
2015/05/23(土) 05:06:34.47ID:aWFfanUl
jsスレでdisるのもアレだけど
権威主義以外の何物でもない

10日で作ったのは凄いかもしれんが別に洗練されてもないしシンプルでもない
初期のjsって文字列演算、暗黙変換とか無駄に長いfunctionとか、
中途半端にvbやC++の真似もしてて、バージョン違いの挙動もあって普通にクソ
初期のを優秀とか言う奴はES6使わないで欲しい

本人はサブセット言語嫌いとかlisp嫌いとか好き勝手言ってるみたいだけど
素直にパクリ元のselfのサブセットを素直に実装すりゃよかったと思うわ
2015/05/23(土) 08:57:54.91ID:3bf42BAL
だいたい名前からしてクソだよ。
全然関係無いJavaパクってるんだし。
2015/05/23(土) 10:54:12.24ID:vTpQyjFi
>>116
お前こそ権威主義じゃねーかw
オリジナルは偉いんだ?w
2015/05/24(日) 00:11:51.40ID:hZNW9MV5
>>118
日本語読めないならそう言ってくれよな
噛み砕いて話してやるからさ
2015/05/24(日) 13:15:55.75ID:bCeKXRbu
>>119
じゃあどこが権威主義なのか
噛み砕いて説明してください。

その前に前提として権威主義とは何かを書いておきますね。

http://ja.wikipedia.org/wiki/%E6%A8%A9%E5%A8%81%E4%B8%BB%E7%BE%A9
> 権威主義(けんいしゅぎ)とは、権威に服従するという個人や社会組織の姿勢、思想、体制である[1][2]。権威主義の反対は個人主義や民主主義である。
> 政治学上の用法では、権威主義体制とは非民主的な体制の総称であり、通常は独裁、
> 専制、全体主義などを含むが、権威主義体制を民主主義体制と全体主義体制の中間とする立場もある[5][6]。

http://d.hatena.ne.jp/keyword/%B8%A2%B0%D2%BC%E7%B5%C1
> 権威(人を服従、強制させる力)に価値をおき、それに対して自己卑下や盲目的服従をする態度のこと。
> また逆に人にそれを要求する態度のこと。心理学的には、権威や伝統、社会的に価値のあると
> されているものを無批判に承認し、これに服従、依存し、融通が利かないパーソナリティを指す。
121デフォルトの名無しさん
垢版 |
2015/05/24(日) 15:11:00.39ID:9Q9ph3Hr
オリジナルがえらいのではなくて
パクリ損ないでオリジナルより劣化してるのがクソ、
っていう単純な話だと思うのだが……
2015/05/24(日) 18:48:24.27ID:hZNW9MV5
>>120
10日で作業したというだけで優秀として
優秀な人、その人が作ったからスバラシイ

全然中身に言及してねえじゃんw
どこに権威主義以外の要素があるんだよw
2015/05/24(日) 22:02:35.19ID:bCeKXRbu
>>122
権威はどこにいったの?w
2015/05/25(月) 17:36:12.90ID:2/V0nnt+
>>121
まさかここまで使われるとは思ってなかったんだろうな
2015/05/25(月) 18:03:08.64ID:MD5bLCSX
>>116
ユーザが100万人ほどの言語を10日で作ってから言え
2015/05/25(月) 21:15:36.88ID:Pr0+1HdK
>>125
権威主義万歳!
2015/05/25(月) 21:28:29.13ID:Pr0+1HdK
流石に初期JSの規模で大変とか言ってるのは
インタプリタの作り方もわからない初心者だけだよな?

クソ言語でも普及したPHPと違って言語そのものの需要で使われたわけでもなし
JSが普及したのはウェブブラウザが先進的だったから

そもそも本人も公開してるのに何マンセーしてんだかw
2015/05/25(月) 21:29:17.23ID:Pr0+1HdK
公開 -> 後悔
129デフォルトの名無しさん
垢版 |
2015/05/26(火) 00:12:46.62ID:xYtlptqc
>>127
オレもそう思うんだけどねえ。
Schemeのインタープリタ書いたことがあればさまえ難しくはない。
2015/05/26(火) 15:21:59.38ID:jJpgaPYe
学部レベルのインタプリタよりエロ動画サイト作る方が難しい
2015/05/26(火) 18:58:13.73ID:CP1OCp5D
JavaScriptライブラリのスレにも書いたのですが,過疎っていたのでこちらで質問させてください
openlayers3についてです

http://openlayers.org/en/v3.5.0/examples/kml-timezones.htmlをそのままコピーして
ローカルで実行したのですが,サンプルのようにTimezonesが表示されません(地図は表示されます)
kmlファイルはhttps://github.com/openlayers/ol3にあるdataフォルダをhtmlと同じ階層に設置しました
他のkmlファイルを読み込むサンプルも同様に動かないのですが何が原因でしょうか
2015/05/27(水) 11:16:44.16ID:XkCb2CMh
馬鹿には無理
2015/05/28(木) 07:16:02.03ID:4DphScwy
>>132
だからあなたには答えられないんですね。なるほど。
2015/05/28(木) 07:59:14.48ID:616UB9cr
>>133←答えられない上にコードも書けないアホ
135デフォルトの名無しさん
垢版 |
2015/05/28(木) 13:22:35.68ID:E8n2j0BJ
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'timezones.kml',//url: 'data/kml/timezones.kml',
2015/05/28(木) 17:23:07.74ID:4ci5OfPn
>>131
普通に動く。timezones.kmlをhtmlと同階層に置いて>>135を書き換えても動く。
2015/05/28(木) 19:02:19.37ID:V96RG34r
>>135
>>136
ありがとうございます
IE,Opera,Chromeだと動かないのですが,firefoxだとサンプル通り動きました
これってコードにブラウザ依存の部分があるのでしょうか?
それともブラウザの設定の問題でしょうか?
138デフォルトの名無しさん
垢版 |
2015/05/29(金) 07:06:31.36ID:hjMnAajE
>>137
firefox以外はデフォルトではローカルファイルへのアスセスが制限されているからでは?
http://tmlife.net/programming/javascript/how-to-chrome-ajax.html
2015/05/30(土) 07:45:51.67ID:xVK15s94
ローカルテストはサーバ立ててやるものだと思うが、fileスキームで実行してるのか
2015/05/30(土) 08:33:00.97ID:Rpgfw2oh
>>138
>>139
サーバたててやったらどのブラウザでも動きました
ありがとうございました
2015/05/30(土) 10:26:22.21ID:3Gf/DalK
最近やたらめったらモジュールに切り分けてたら共通部分の重複が酷いことになってた
現在のスコープ内にimport,requireできれば便利なんだが
142デフォルトの名無しさん
垢版 |
2015/05/30(土) 12:21:21.30ID:skc6DNlZ
現時点でもやはりES3で書くべきですか?
ES5出てからもう何年も経ってるしObject.create()とか配列まわりの関数とか色々追加されてるのに使えないのが歯がゆいです。
ネット見てると結構ES5の機能使ってる人が多いですが、そういう方々はIE8とか切り捨ててるんですかね?
2015/05/30(土) 13:40:15.04ID:HkfQYaI5
>>142
サポートサイクルを見たらどうでしょう?
2016年1月まではIE8対応は切れません。
2015/05/30(土) 13:41:11.94ID:HkfQYaI5
IE8 でもpolyfillで何とかなる場面が多いとは思いますが
2015/05/30(土) 14:06:06.57ID:ebcCMrL3
>>142
lodash使ってる。なんとIE6以上から対応してる。

実装不可能なものを除いて、ES5で提供されている関数が提供されてる。
Object.create相当のメソッドもある。
https://lodash.com/docs#create

どうしてもES5だけでやりたいってわけじゃなく
ES5で提供された便利な関数を使いたいならlodashオススメ。
lodashにはES5よりも多くの機能が追加されてる。
146デフォルトの名無しさん
垢版 |
2015/05/31(日) 02:38:34.37ID:474JDHci
>>143
ありがとうございます。
ぐぐってみたら2016年1月以降は最新版のIEしかサポートされないんですね。
こういうのを境界にして考えるのですね。勉強になりました。
polyfillというのはes-shimsとかのことですよね?Object.createに対応してないので選択肢から外れました。

>>145
ありがとうございます。今回は素のJSでやりたかったのでlodashは使えません><
147デフォルトの名無しさん
垢版 |
2015/05/31(日) 02:41:25.56ID:474JDHci
でももうすぐES6が出るしキリが無いですね
ブラウザ対応状況とか考えるの諦めてlodashとかunderscoreとかそういうのに完全依存する方が正しいのかも
2015/05/31(日) 08:20:05.87ID:6IDXNIVy
>>146-147
Object.create はES3の範囲内で完全実装は出来ない為、制限付きを理解した上で polyfill を書く必要がある
lodash は forEach 等で ES5 互換でないコードが見受けられるので ES 標準を目指すのであればお勧めしない
コードを読む限りでは 仕様に忠実なライブラリではなく、独自の世界を構築するタイプのようだから
149デフォルトの名無しさん
垢版 |
2015/06/01(月) 15:26:03.49ID:dTiEpsP/
underscoreって可読性低下しない?
_から始まるってのがそもそも論外なんだけど…
知らない人間が見たら何だコリャ?ふざけてんのか?
これを考えた奴は保守性を考慮しないオナニー馬鹿なのか?って思うだろ。
2015/06/01(月) 16:19:05.72ID:fqMWxMza
>>149
ま、普通使わない。
オナニーって言えばその通り。少なくとも個人的に使うのだったら文句言う
アレはないが、プロジェクトなんかでこんなもの使ってる奴いたら、排除する。
2015/06/01(月) 16:49:15.47ID:4t8ilUI7
>>149
> 知らない人間が見たら何だコリャ?ふざけてんのか?
それを言い始めたら、$.hogeってなんだ?ってことにもなる。

>>150
> ま、普通使わない。
以外と使われてるよ?

http://www.infoq.com/jp/news/2015/04/lodash-utility-library
> JavaScriptユーティリティライブラリのlodashがバージョン3.5に達して,npmパッケージリポジトリの中で
> 最も多く参照されるライブラリになった。もはや代用品などではなく,信頼できる選択肢のひとつだ。

http://matsukaz.hatenablog.com/entry/2014/04/09/082410 に上げられてるようなよく使う機能は、
オレオレ実装されるより、既知のライブラリのメソッド使って欲しい。
152デフォルトの名無しさん
垢版 |
2015/06/01(月) 17:05:38.13ID:dTiEpsP/
javascript使いってエンジニアとして未成熟なのか文系が多いのか、
保守性を考慮しないのばっかりだよな。
多言語では保守性において禁忌とされている事を平気でやる
先人が築きあげたバグを排除するコツのようなものをを完全に無視してる
たぶん将来はjavascriptの仕様が整理されて、
jQueryとかunderscoreみたいな非直観的で腐ったキーワードを使うライブラリは完全非推奨になる。
2015/06/01(月) 17:20:57.79ID:4t8ilUI7
Javaの人かな
2015/06/01(月) 17:24:57.76ID:TGyjCQFp
hagedo
2015/06/01(月) 19:51:34.16ID:lFnhdSIE
>>152
だってJataScriptが使いにくいクソ言語じゃん。
細かいこと気にしてられないって、クソだから。
2015/06/01(月) 19:59:11.62ID:9HWSCI34
>>152
こういう関数の部分の保守性とかどうでもいいよw
単純に自分実装のライブラリに入れ替えれば済む話なんだから。

それより問題なのはフレームワークだ。
馬鹿が使うとフレームワークにガッチリ組み込まれて
別のものに変えるのがすごく大変になる。
2015/06/01(月) 20:00:16.98ID:9HWSCI34
>>151
> > ま、普通使わない。
> 以外と使われてるよ?

だよな。Node関連では一番使われているライブラリだったはず。
何処かにデータが有ったはずなんだが。

好き嫌いは個人の好みとして、一番使われているという
事実を知らないとしたら、モグリだろうw
2015/06/01(月) 20:02:41.82ID:9HWSCI34
あったあった。この記事だ。

lodash, あなたが既に使っているJavaScriptライブラリ
http://www.infoq.com/jp/news/2015/04/lodash-utility-library

JavaScriptユーティリティライブラリのlodashがバージョン3.5に達して,
npmパッケージリポジトリの中で最も多く参照されるライブラリになった。
もはや代用品などではなく,信頼できる選択肢のひとつだ。


何の根拠もない「使われてない」は無視していいよ。
だって、本人が無知だから、使われていることを「知らない」という
状態でも、自分の知ってる小さな経験だけから
使われてないって発言するだろうからさw
2015/06/01(月) 20:33:19.40ID:qMAgmJxR
そんなことよりもNode.jsのREPLでアンダースコアが使えないのはどうすればいいの?

REPL単体で使うぶんには別の名前を使っても気にならないけど、.loadで読み込むファイルでアンダースコアが
使われていた場合は、ファイルを書き換えなければならず、かなり気持ちが悪い

こんな定番のライブラリで、Node.jsのことを考慮していない名前をデフォルトにするとも思えないから、
何か解決策はあると思うんだけど…
2015/06/01(月) 20:42:18.22ID:e+Q3qVuq
>>149
perlのデフォルト演算子($_)の名残だと思ってた
2015/06/01(月) 20:49:28.66ID:9HWSCI34
>>159
グローバル変数とローカル変数の違いわかってる?

REPLで使うのはグローバル変数の_。
ローカル変数の_(lodash)が名前かぶっても
何の問題もないんだが。

名前かぶってわかりづらいというのなら、
var i だってずいぶん被ってるはずなんだが。
2015/06/01(月) 20:52:38.62ID:9HWSCI34
>>160
いやー、普通、_で思い出すのは、
C言語などで広く使われてる多言語の仕組みである
GetTextの_関数でしょw

あれだって、_で始まる関数なわけだけど、
何だこりゃの前に、普通GetText思い出すよね?

>>149は無知なんじゃないかって思うだけなんだが。
163デフォルトの名無しさん
垢版 |
2015/06/01(月) 21:51:26.69ID:dTiEpsP/
>>162
_で始まるって言い方はおかしかったな。
C言語系の_は名前が続くから識別に問題ないが、_だけというのがクソだって話
これを初めて拝んだとき、_だけを変数名にするなんて一体このバカはどんな教育を受けているんだと思ったわ。
2015/06/01(月) 22:48:12.23ID:VQX8/s75
>>163
うん。それでgettextは、_ だけの
関数名なんだが、恥の上塗りしてどうするの?
2015/06/01(月) 22:56:29.23ID:qMAgmJxR
>>161
流石にそれくらいは分かってるけど、UnderscoreやLodashは普通グローバルに読み込むものじゃないの?
まさか関数ごとにrequireを書くわけでもあるまいし、少なくともvar iとは次元が違うものだと分かると思うんだけど…
2015/06/01(月) 22:59:26.58ID:VQX8/s75
lodash使うアプリでグローバルなんて聞いたことがない。

普通nodeでライブラリを使うときは、
ローカル変数に、略

いわんでもわかるだろ?
知ってるならなw
2015/06/01(月) 23:00:05.05ID:VQX8/s75
訂正

lodash使うアプリでグローバルなんて聞いたことがない。
node使うアプリでグローバル変数なんて聞いたことがない。
2015/06/01(月) 23:01:04.60ID:e+Q3qVuq
CakePHPなんかの__()ならともかく、underscore.jsでGetTextの方の_を、
どうすれば連想できるのかわからない
169デフォルトの名無しさん
垢版 |
2015/06/01(月) 23:01:38.04ID:dTiEpsP/
>>164
そんなどうでもいい知識はどうでもいい
2015/06/01(月) 23:03:51.00ID:dTiEpsP/
_を変数名にするのはゴミだってのは100人に聞いて99人が納得する話。
ほんとjQueryといい、javascriptのライブラリ作ってる奴は基地外だわ。
レスを投稿する