12/01/02 05:17:18.23
2. - JavaScriptについて -
JavaScriptは動的Webページ作成専用言語ではありません。
このスレでは、★言語★としてのECMAScript(JavaScript、JScript等)の話題を扱います。
ブラウザ環境でのJavaScriptはWeb製作板へ。ASP、CGIなどはWebProg板へ。
●スレ違い●なレスの例
+ JavaScriptによるWebページの挙動実現に関する疑問/質問、は、
■スレ違い■です。→Web製作板へどうぞ
+ Webブラウザの動作挙動に関するの疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
+ そのほか、Webページ作成に限定した内容の疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
■参考■[Web製作板] + JavaScript の質問用スレッド vol.94 +
スレリンク(hp板)
※JavaScriptが板違いと言いたい人へ
運営サイドから次のような見解が出ています。
|459 飛べない削除屋 ★ sage :04/05/30 15:38 ID:???
|>>458
|ローカルルールにはひどく単純化されて書かれていますが、
|Javascript という言語そのものが板違いなのではありません。
|用途によって板違いかどうかを判断してください。
3:デフォルトの名無しさん
12/01/02 05:21:56.94
3. - 主な実装 -
Rhino (Mozilla.orgでメンテナンスされている組み込みを目的としたJava製の実装)
URLリンク(www.mozilla.org)
SpiderMonkey (同上。ただしこちらはCによる実装で、Mozilla Firefoxで採用されている)
URLリンク(developer.mozilla.org)
NJS (旧NGSを引き継いで開発されている独立したインタプリタ実装)
URLリンク(sourceforge.net)
JScript (Microsoft社による実装。WSHを介したローカルマシン用のバッチスクリプトとして使用に加え、.NETの開発言語のひとつでもある。
また、WebクライアントサイドスクリプトやASPにも利用することができる。)
URLリンク(msdn.microsoft.com)
JScript .NET
URLリンク(msdn.microsoft.com)(v=vs.71).aspx
DMDScript (Digital Mars社による実装。Windows上で利用できるJScript置き換え的な位置づけ
スタンドアロンのインタプリタに加え、COMコンポーネントとして組み込むこともできる。)
URLリンク(www.digitalmars.com)
FESI (ECMAScript第一版に準拠したJava実装)
URLリンク(www.lugrin.ch)
DMonkey (Delphi(ObjectPascal)への組み込みを目的とした実装)
URLリンク(sourceforge.jp)
Tamarin (Adobe から Mozilla.org に寄贈された JIT 付きの仮想マシン。
コンパイラは含まれないので、ECMAScript のソースを直接実行することはできない。)
URLリンク(wiki.mozilla.org)
4:デフォルトの名無しさん
12/01/02 05:22:47.60
3の続き
KJS(KDEプロジェクトによって開発された実装)
URLリンク(api.kde.org)
JavaScriptCore(SafariのブラウザエンジンであるWebKitで採用されている実装で、KJSを元に改良されている)
URLリンク(trac.webkit.org)
Carakan(Opera Software ASAによって開発されOperaで採用されている実装)
URLリンク(my.opera.com)
V8(GoogleによるC++実装で、Google ChromeやNode.jsなどで採用されている)
URLリンク(code.google.com)
iv / lv5(日本人によって開発されているC++実装で、ES5.1準拠を謳う)
URLリンク(github.com)
5:デフォルトの名無しさん
12/01/02 05:23:15.54
4. - 関連スレ -
Web上におけるクライアントサイドスクリプティングに特化した実装(通称Javascript)については
WebPrograming板などの専門スレをご利用ください。
[Web製作板] + JavaScript の質問用スレッド vol.94 +
スレリンク(hp板)
[WebProg板] Ajaxでも語りませんか Rigel4
スレリンク(php板)
[プログラム板] JavaScriptスレ
スレリンク(tech板)
6:デフォルトの名無しさん
12/01/02 05:25:46.39
ここまでテンプレ
リンク切れの修正や実装の補足などをした
7:デフォルトの名無しさん
12/01/02 09:55:56.16
>>1
おつ
8:デフォルトの名無しさん
12/01/02 10:00:35.85
>>989
JSON2.jsでは普通に使われてる書き方だけどな。
まぁ一般的な書き方は(functionの方ではあるけどな。
>>996-998
今回書かれているbに対して、それらの書き方は構文的にもエラー。
しかしb = と代入式が書かれてる時点で括弧なしは構文エラーではなくなる。
つまり単独での実行を例にするのは間違ってる。
9:デフォルトの名無しさん
12/01/02 10:49:33.00
なんで右にもtestを付けるんですか?
var test = function test() {};
10:デフォルトの名無しさん
12/01/02 12:07:04.67
name で名前が取り出せるようになるから。
11:デフォルトの名無しさん
12/01/02 12:14:18.49
あ、それだけなんですか。デバッグの時に多少マシになる感じなんですね。
12:デフォルトの名無しさん
12/01/02 12:15:14.56
>>8
言語仕様を読んだこと無い奴がカドクセーとかほざいてるだけだから気にするな。
13:デフォルトの名無しさん
12/01/02 12:39:13.77
そういう流れいらないから
14:デフォルトの名無しさん
12/01/02 12:45:04.91
カッコを付ける習慣がある以上、納得できる理由を出さないと。ただの遠吠えになってるよ。
15:デフォルトの名無しさん
12/01/02 12:59:11.96
お前の習慣なんてしらねーよw
16:think49 ◆bKk/qcAKuM
12/01/02 19:52:15.67
>>前スレ997
ご指摘通り、記憶違いのようでした。お騒がせしました。
>>8
なるほど…。確かに代入演算子で右辺が式であることを保証している為、式文の規定にはとらわれないですね。納得です。
URLリンク(www2u.biglobe.ne.jp)
>>9
名前付き関数式は関数内のスコープに影響するので変数名を変更しても自身を参照できるようになります。
17:デフォルトの名無しさん
12/01/02 20:04:49.43
い-635
ちなみに、平成18年度の民主党の収支報告書だが、
電通が 690,150,988円(約6億9千万円)
博報堂が 19,425,964円 (約2千万円)
読売グループ系列(読売広告、読売メディアセンター)が 72,058,917円(約7千万円)なw
フライシュマンヒラードジャパンが、1974000円かw
フライシュマンの本社はアメリカにあって、アメリカ政界や企業のPRも担当してるユダヤ系の会社だなw
ここが「マニュフェスト」っていう横文字を考えたんだなw
そういえば、今東電と電力総連がフライシュマンを雇ってるらしいじゃないww
札束で学者ひっぱたいてテレビででたらめ言わせても年寄なんかはまだまだテレビのいうことを信じるからなw
18:デフォルトの名無しさん
12/01/03 12:04:33.05
>>16
> 変数名を変更しても
「変数が別のものに束縛されても」と言いたいのかな?
19:デフォルトの名無しさん
12/01/03 13:43:44.69
ECMAScriptの規格に「束縛」なんて用語出てこないけど、何と勘違いしちゃってるの?
20:think49 ◆bKk/qcAKuM
12/01/03 15:09:33.38
>>18
「束縛」はわかりませんが、URLリンク(jsfiddle.net) の「名前付き関数式を利用するパターン」がそれです。
IE8- ではバグがあるので使えませんけどね…。
URLリンク(d.hatena.ne.jp)
後学の為に「束縛」を説明(もしくは参考URLの掲示)していただけると嬉しいです。
ぐぐって何となくは理解しましたが、「変数への代入 === 束縛」なのでしょうか。
この前提が正しいと仮定して、束縛することよりも元々の変数の名前で参照できなくなることが鍵のような気がします。
21:デフォルトの名無しさん
12/01/07 01:12:09.05
ES5になってdefineProperty()とか出来て変わったようですが
下記のコードをES5らしく書くなら、どう書いたらいいでしょうか?
var O = function (a) {
this.o = a;
};
O.prototype = {
get oooo() {
return this.o;
}
};
var o = new O('oooo!');
o.oooo;
22:デフォルトの名無しさん
12/01/13 16:46:09.65
>>8
>JSON2.jsでは普通に使われてる書き方だけどな。
hoge = function(){}();
こういうのの話だよね?
無いぞ。どこだよ。
23:デフォルトの名無しさん
12/01/15 15:53:23.33
>>21
var O = Object.create(null, {
o: { value: "" },
oooo: { get: function() { return this.o; } }
});
var o = Object.create(O, {
o: { value: "oooo!"}
});
24:デフォルトの名無しさん
12/02/05 21:17:08.31
URLリンク(d.hatena.ne.jp)
ES.nextもstrawmanもキモくね?
25:デフォルトの名無しさん
12/02/06 00:49:49.89
Traitだけありゃいいのに最適化がうんたら
26:デフォルトの名無しさん
12/02/23 00:39:23.23
>>24
実行コンテキストがいちいち変わるのが理解出来ないからクラスベースの
構文糖用意したつもりなんだよ。妥協点がそこだったんだろ。
ところで関数が暗黙にthisプロパティを持たなくなったのは良かったが
Function.prototype.bind(cx,args...)で引数のLIST型書きかえれるようにしたのはやめて欲しかった。
Callオブジェクトを撲滅できない以上ここら辺は積極的に隠蔽すべきだと思うんだが。
__proto__プロパティがダメでObject.define*がいい理由も根拠がわからん。
27:デフォルトの名無しさん
12/03/07 21:34:12.90
__proto__がいいと思う理由は何?
28:デフォルトの名無しさん
12/03/08 21:27:21.83
function Foo() {};
function Bar() {};
var f1 = new Foo();
f1.constructor === Foo.prototype.constructor; // Foo
Foo.prototype = new Bar();
var f2 = new Foo();
f2.constructor === Object.getPrototypeOf(Foo.prototype).constructor; // Bar
f1.constructor !== f2.constructor; // Foo !== Bar
Foo.prototypeの参照先が変わったのに、
なぜf1.constructorはFooを指しているんでしょうか。
29:デフォルトの名無しさん
12/03/08 23:46:27.29
newはprototypeのコピーであって参照じゃないっしょ
30:デフォルトの名無しさん
12/03/09 02:34:50.33
>>29
言われて本読みなおしてググってやっと理解できました。
ありがとうございます。
31:デフォルトの名無しさん
12/03/15 01:18:49.40
ECMAScript Language Specification ECMA-262 6th Edition - DRAFT
URLリンク(people.mozilla.org)
読みやすくてイイ!
32:デフォルトの名無しさん
12/03/24 17:13:23.76
JavaScriptではperlの
( $foo, $bar ) = split( /,/ );
みたいな書き方は出来ない?
(リストの左辺値)
33:デフォルトの名無しさん
12/03/24 17:13:59.06
>>32
すんません。ECMAScriptでした。
34:デフォルトの名無しさん
12/03/24 17:53:59.26
実装による
以上
35:デフォルトの名無しさん
12/03/24 20:34:52.67
>>34
仕様の話に実装で答えても…
36:デフォルトの名無しさん
12/03/24 20:38:43.62
ES5.1までの仕様にはないかな
6以降で入れるみたいな話しがちらほら
Fxはたしか実装してた気がする
37:デフォルトの名無しさん
12/03/25 00:11:46.03
FirefoxはJavaScript1.7で導入してて
URLリンク(developer.mozilla.org)
分割代入 (destructuring assignment) って名前がついてる
38:デフォルトの名無しさん
12/03/25 07:09:48.00
CoffeeScript使え
39:デフォルトの名無しさん
12/03/27 14:24:18.92
32です。ありがとうございました。
ってことは、配列の内容を個々に変数にバラすには
1個ずつ代入するしか方法がない、ってことでしょうかね。
40:デフォルトの名無しさん
12/03/27 15:40:12.32
だからFFでできるしCS使う手もあるっていってるじゃん
41:デフォルトの名無しさん
12/03/27 23:09:58.48
isnt演算子のセンスのなさ
isnt = is not = is!
でよかったじゃん
42:デフォルトの名無しさん
12/03/28 09:34:12.46
それは分かりづらいから無い
43:デフォルトの名無しさん
12/03/28 21:08:23.71
Dだと!is
44:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 00:37:15.88
>>40
ES3縛りっつー前提だもんで。
結局こんなん書きました。1個ずつ代入してることには変りはないですが。
ary2lc( [ 'yy', 'mm', 'dd' ], "2012/03/28".split("/") );
function ary2lc( to, from ) {
for( var i=0; i<to.length; i++ ) {
eval( to[i] + " = " + from[i] );
}
}
45:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 09:42:07.10
CoffeeScriptはES3デスよ……
46:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 21:57:40.92
>>45
すんません。よく知りませんでした。
勉強します。
47:デフォルトの名無しさん
12/04/27 12:03:13.48
ところでes6のletとconstはふざけてんのアレ?
48:デフォルトの名無しさん
12/04/27 14:32:16.75
letはいろんな書き方できるから?
何がどうふざけてるか書いてくれないかな
49:デフォルトの名無しさん
12/04/27 22:41:57.09
そういう感性は俺にはなかった。
letもconstもプログラム言語にはあって然るべき機能だと思うけど。
50:デフォルトの名無しさん
12/04/28 08:03:01.79
>>48,49
jsのブロックは見た目はブロックスコープに見えるけど言語仕様上ブロックスコープはないからブロックのセマンティックスはただの複文。
複文は複数の文を一つの文とみなすことしかやってない。var定義はプロトタイプベース言語としてのメタな文脈においてmozillaはvarバインドと呼んでるんだけど
varバインドは関数スコープで変数を束縛する。このときjsではスタックフレームもオブジェクトなのでプロトタイプベースから見ればスロット集合の実体を持ってて
ローカル変数はスタックフレームオブジェクトのスロットに束縛する。このときtry-catchの変数だけは実装上varとは別のスロット集合に束縛してスコープが別になってる。
それを仕様に取り込んだのがletでvarバインドに対してletバインドと呼んだりする。let文はその文で定義された変数はその文中のみ有効というwith文の置き換え。
let式のexpの部分は暗黙のブロックに囲まれるのでlet文の構文糖。ブロック中のlet定義は複文によって一つとみなされるので複文中の文から
letは見えるけど複文の実行が終われば他のコードからは見えなくなって結果letバインドされた変数はGCされる。
あくまでブロックスコープなんてものはなくてイメージとしてはカンマ結合(let a,=1,b=2;)みたいなもんだと思えばいい。
最新のドラフトを追ってないんで変更があるかもしれないけどes6のlet,constはdeclarationといってletバインディングされる。
es6はjsの仕様に合わせずブロックスコープを仕様にしたせいでletがブロック直下にしか置けなくなった。
letはwithの抹殺以外に旧時代のスコープを新たに作るために無名関数を使うコードを完全に置き換える目的もあったのにes6の仕様だと
let文とlet式が使えなくなってそれが直接的にできなくなった。他にもif直下にlet置けないからどんなに単独のifが短くて一行で書き
たくてもブロックで囲むコーディングルールを言語仕様が強制してしまったり、letはブロック直下以外禁止なのでforの初期化子に
置けないから本末転倒になってる。これを回避するにはforをブロックで囲んでその直下にlet定義するしかない。es5のfor-initializerが
消えたのはこれに無理やり合わせるため。
ほかにもconstがletバインドだから関数スコープじゃなくなって関数の頭で条件に応じて初期化内容を変えるのに
51:デフォルトの名無しさん
12/04/28 08:04:38.56
function f(){
if(cond) const x=1;
print(x);//!condならundefined
}
function f2(){
if(cond){
const c=//hogehoge
}else{
const c=//fugafuga
}
//色々長い処理
print(c);//!condならfugafuga
}
がif(cond){ const x=1; print(x) }else{ const x=undefined; print(x) }かconst x cond ? 1 : undefined;と
function f2(){
if(cond){
const c=//hogehoge
//色々長い処理
print(c);
}else{
const c=//fugafuga
//色々長い処理
print(c);
}
になる。ほかにもconstは最適化のために初期化子必須になったんだけどこれは元々ある変数の初期化を伴わない定義の
デフォルトはundefined valueという仕様にesでlet文法作るときのミスで合わせられなくなったせいで未初期化の
constはundefined valueに束縛されずに2度目の代入が出来てしまうため、建前は最適化のためと言ってるけど初期化子必須に
したせいでconstの値がundefined valueになるときconst c = undefinedかconst c = void(0)としなきゃいけなくなったから
cに入る値が実行時まで遅延されて逆に最適化が難しくなってる。globalのプロパティundefinedはundefined valueじゃなくて
プロパティだから[[get]]するまで値が確定しないのとvoid(0)も[[call]]しないと確定しないのが原因。
jsの元からある仕様だとconstは初期化いらないから、しない場合はundefined valueに束縛されて定義時に値が確定して最適化出来る。
52:デフォルトの名無しさん
12/04/28 08:06:50.90
これは最適化云々より変数の値がundefined valueになることを明確に主張するコードとしてわざとこう書くもんだった。
あとfunctionDeclarationがletバインドになったから既存の実装と全く互換性がなく関数定義をifブロックで囲むと外から見えなくなる。
#ifdefしたい時はif-elseでコード全体を囲む必要がある。#ifdefした関数使うコードがifとelseで2パスあるわけ。
es6のブロックスコープは本来はブロックスコープじゃないものをブロックスコープとして仕様にしたからコンテキスト依存になって制限のほうが多くなってるんだよ。
ecma-262は乱立する実装の最小公倍数の共通化とマシンリソースやセキュリティの都合があるから、極力実装に首突っ込まないよう
配慮されてたのに3.1派が主流になってから既存の実装と互換性がないのと最適化ばかり考えて実装の都合に制限された仕様になってるのがふざけてるって話。
nextやharmonyのbrendan eichの提案見てるとnetscape草案のjs2.0にあったのばかりだしMapやWeakMapだって3.1派が昔拒否したライブラリだし元に戻そうとしてるのは分かるよ。
仕様と実装の説明すると長いな。まあ、そういうこと。
53:デフォルトの名無しさん
12/04/28 09:54:55.97
ガチで長いぞw
54:デフォルトの名無しさん
12/04/28 17:45:52.49
>>50
長過ぎるのと意味が分からんところがあるけど
> このときtry-catchの変数だけは実装上varとは別のスロット集合に束縛してスコープが別になってる。
とりあえず、↑これはcatch内だけだね。
> letはブロック直下以外禁止なのでforの初期化子に
> 置けないから本末転倒になってる。これを回避するにはforをブロックで囲んでその直下にlet定義するしかない。
んなこたーない。仕様的にもちゃんと置けるよ。
他は後でつっこむ
55:デフォルトの名無しさん
12/04/28 18:55:45.44
>>50-52"をまとめると
ブロックはスコープじゃなくて唯の複文
letはスコープ作るために導入された
letはundefined valueで初期化されない
letでundefined valueで初期化されるよえに=undefined、=void(0)などと書くと最適化されにくくなる弊害がある
ってこと?
56:デフォルトの名無しさん
12/04/28 20:34:09.47
let文、let式がなければ
var foo = 0;
{ let foo = foo; alert(foo); }
とかではまるやつが出てくるのは目に見えてるしな
57:デフォルトの名無しさん
12/04/28 22:07:39.07
letは色んな事出来すぎるからだめなんだよなぁ
何であんなに色んな記法を作ったのか
58:デフォルトの名無しさん
12/04/29 01:30:12.11
>>51
> ほかにもconstは最適化のために初期化子必須になったんだけどこれは元々ある変数の初期化を伴わない定義の
constやletを初期化せずに宣言するのはバグの元だろ。どの言語でも言える事だけどローカル変数は
宣言と同時に絶対初期化するべき。
> 未初期化のconst
constは初期化必須って言っているのに、未初期化って矛盾してるぞ。その時はどんな値になってるんだ?
単純に未初期化のconstは、その時点で実行時エラーになる気がするが。
59:デフォルトの名無しさん
12/04/29 01:39:48.38
constもletもJavaScriptの構造を理解している人に取っては必要ないものだよ
他言語メインの人がなんとなく使うときにハマるからあった方がいいねってもの
60:デフォルトの名無しさん
12/04/29 01:40:25.53
const hoge;
hoge = "後から代入できちゃう";
ってことなんじゃねーの?
undefinedな定数にしたくて初期値省略してるのに、代入されたら台無しだよっていう
61:デフォルトの名無しさん
12/04/29 02:01:05.13
constな変数(定数)をundefinedにする意味は全くないと思うけど、単純に未定義
って事もあるから、どっちでもいいか。
constな変数は絶対に初期化しとけって事だな。
62:デフォルトの名無しさん
12/04/29 07:14:17.62
>>60
これってできるの?
うちのchromeさんだと出来ないんだけど
正確には代入してもconstされた値は上書きできないがエラーも出ない
#エラー出ないのはちょっとなー
const hoge = "aaaa";
hoge = "bbb"; // ここでbbbはが返る
alert(hoge); // ここで表示されるのはaaaa
const moge;
moge = "ccc"; // ここではcccが返る
alert(moge); // ここではundefinedが返る
正直な話言語仕様的には3.1で十分で
5,6なんかはは楽にするために拡張されると解釈してる
63:デフォルトの名無しさん
12/04/29 07:56:25.15
JavaScriptって、一見代入とかができたように見えて、実はできない、という
場合ってスルーしちゃうじゃない。昔から。
foo = "foo"
foo.bar = "baz"
alert(foo.bar) // undefined
64:デフォルトの名無しさん
12/04/29 08:00:51.12
何のためのstrict modeなんですかねえ
65:デフォルトの名無しさん
12/04/29 08:13:31.96
たとえばJavaだと、参照される前に確実に1回だけ初期化される変数は、
finalだけど初期値なし、にできるけどな。
要するにundefinedってのは、名前が未定義って意味じゃなくて、初期化されてない値
(unititializeとすべき?)って意味だから、「undefinedな定数」なんて無理だから、って
ことじゃね?
66:デフォルトの名無しさん
12/04/29 08:27:47.33
>>63
これは foo.bar にアクセスした時点で新たに String オブジェクトが生成されて
そっちの bar プロパティに代入してるだけだから、
代入が失敗しているわけではないと思う
67:デフォルトの名無しさん
12/04/29 13:19:34.99
>>66
イミフ
68:デフォルトの名無しさん
12/04/29 13:20:57.64
fxでも失敗するね
const hoge;
hoge = "aaaa"; // aaaa
hoge; // undefined
69:デフォルトの名無しさん
12/04/29 13:26:20.85
>>67
仕様書を読んでみるといい
70:デフォルトの名無しさん
12/04/29 13:41:28.54
6ドラフトの12.2.1 Let and Const Declarations
読んだけどわからん
そんなこと書いてあるかな?
71:デフォルトの名無しさん
12/04/29 14:11:35.11
すごくおおざっぱに説明すると、プリミティブに対してオブジェクトとして
アクセスしようとすると、オブジェクトが作られて、それに対してアクセスする、
というのが言語仕様。
だから、その作られたオブジェクトの属性として設定されるけど、そのオブジェクトに
アクセスする方法がないし、元の変数は元のプリミティブを指したままなので……
というのが >>63 で起きてること。
72:デフォルトの名無しさん
12/04/29 22:57:50.88
ゴミな仕様だな
73:デフォルトの名無しさん
12/04/30 12:10:26.90
普通に例外吐いて止まってくれるだけでだいぶ助かるんだが
74:デフォルトの名無しさん
12/04/30 13:06:49.34
strict mode + Object.sealed でおk
75:デフォルトの名無しさん
12/04/30 15:41:31.94
foo.bar()
みたいな明らかに一文が終了してるときもセミコロンいるやん。
if(foo)
a+b;
みたいなコード書くヤツのほうを撲滅しろよ。
76:デフォルトの名無しさん
12/04/30 16:27:47.76
波括弧を必須にするだけでよかったのにな
77:デフォルトの名無しさん
12/04/30 16:59:47.58
;の省略とかややこしくなるだけだからいらんわ
78:デフォルトの名無しさん
12/04/30 17:09:36.40
セミコロン省略はそこまで混乱しないだろ
79:デフォルトの名無しさん
12/04/30 18:12:22.52
多分シェルでも全ての行末にセミコロンを付けるような人なんだろう
80:デフォルトの名無しさん
12/04/30 21:28:42.23
セミコロン省略はあっていい
自分も付けるか気分と見やすさと必須性で決める
基本は全く無駄な物だから付けない
81:デフォルトの名無しさん
12/04/30 22:12:51.55
必要ないならなくなってるよ。必要だから残ってる。
httpを使うことを考えると無くせない。
82:デフォルトの名無しさん
12/05/01 07:52:42.83
俺は実際全くセミコロン付けないで書けている。よって必要ない。
改行せず一行に詰め込む時にだけ必要、という主張だね。
83:デフォルトの名無しさん
12/05/01 08:48:23.26
そんなことは言ってない
必要ないところで省略した方が逆に見栄えもよく感じられて
問題もないこともあるから省略できていいって言ってる
セミコロンは必要、だけど省略も必要
わかる?
84:デフォルトの名無しさん
12/05/01 08:57:11.06
省略したほうがいい場面ってどこだよ
array.filter(function(v) { return v % 2 == 0 });
みたいに関数本体が一文で済むところなら
セミコロンなしでもいいかなという気はするけど、
それ以外になんかあるか?
85:デフォルトの名無しさん
12/05/01 09:25:23.96
一律つけた方が法則がシンプルな分
見栄えもいいよ
セミコロンの場合実害が少ないからなくても困らないけど
86:デフォルトの名無しさん
12/05/01 09:46:43.49
メモ帳で長いコード書くとき
カッチリしたもう変更がないだろう機械的なコードはセミコロンで固めて
個性的な変更しまくりのふわふわしたコードには付けないな
87:デフォルトの名無しさん
12/05/01 09:49:49.99
>>84
いや、むしろそういうごちゃごちゃした1行には付けるべきだろ。
a=1
b=2+a
みたいなのには必要ない、もしくは、
a=1;b=2+a;
にする。
88:デフォルトの名無しさん
12/05/01 09:54:58.57
>>86
こーいう、背後に哲学が感じられる使い分けが
コードから読み取れれば問題ない
無分別に一貫性なくつけたりつけなかったり
は醜いし読みにくい。
考えなさっぽさが滲みでてみっともないし。
89:デフォルトの名無しさん
12/05/01 10:28:52.18
スマホで作ってるとセミコロン付ける付けないとインデントはかなり悩む
それはそうとMathやStringが拡張される話で今盛り上がってるのは個人的にもありがたいんだけど
数の進数やbit数に関しての拡張と現在milli秒で扱ってる範囲ををmicro秒にして欲しいんだけど
そういう話は挙がってないの?
90:デフォルトの名無しさん
12/05/01 11:54:26.69
なんでもかんでもマイクロ秒管理したら
既存APIが遅くなるんでねーの?
91:デフォルトの名無しさん
12/05/01 12:18:42.55
OSから取得するナノ秒までで約60bit
マイクロ秒までで約50bit
ミリ秒までで約40bit
全部64bit整数使ってるだろうから変わりないのでは?
92:デフォルトの名無しさん
12/05/01 14:11:47.69
非力な組み込みでもecmascript使うんだから標準で仕様化したらだめだ。
93:デフォルトの名無しさん
12/05/01 14:45:30.95
非力というか万が一タイマーがサポートしてないのなら0埋めで返せばいいだけじゃない?
スクロールとか描画なんかの演算とタイマー設定をもう少し正確にやりたいだけでしょ?
まあディスプレイ付きのデバイスなら今時間違いなくマイクロ秒まではサポートしてるタイマー使ってるはずだけど
94:デフォルトの名無しさん
12/05/01 18:40:05.14
セミコロン問題は、一応プラグマのopen issueのままです。
URLリンク(wiki.ecmascript.org)
95:デフォルトの名無しさん
12/05/02 00:11:18.62
>>93
だから、ECMAScriptなんつー総本山規格じゃなくて、ディスプレイ付デバイスで動かすような実装のレベルで
何とかしてよってのが>>92なんじゃねーの。
96:デフォルトの名無しさん
12/05/02 05:02:25.84
マイクロ秒単位のタイマは、むしろ非力な組み込みでの需要の方が大きいんじゃねーの
なんにせよ非リアルタイムな環境でのマイクロ秒タイマは
信用ならない精度になるだろ
そういう話をするとしたらQueryPerformanceCounter的な高精度カウンタを新設して
自前でポーリングしれって感じになるんじゃねえかな
97:デフォルトの名無しさん
12/05/03 08:04:21.13
コンストラクタを呼び出すとき
applyを使って引数を配列で指定したいときがあるんだけど可能かな?
例えばコンストラクタが
var C = (function(){
var c = 0;
return function (a,b) {
this.a = a;
this.b = b;
alert([a,b,++c]);
};
})();
として、とりあえず以下はダメだった。
var o = new C.apply(null, args);
var o = new (C.apply(null, args));
var o = (new C).apply(null, args);
エラー
var o = C.apply(new C, args);
コンスタラクタが二回呼ばれる
oが返されない
var o = new C();
C.apply(o, args);
コンスタラクタが二回呼ばれる
var o = {};
C.apply(o, args);
oがCのインスタンスにならない
アイデアあったらヨロ
98:デフォルトの名無しさん
12/05/03 08:34:31.35
>>97
Function#bind を活用してみてください。
99:デフォルトの名無しさん
12/05/03 09:00:22.22
>>98
それじゃ無理だろ。
そもそもbindさせるオブジェクトを
これから作ろうって話な訳だし。
evalして無理やりパースするくらいじゃね?
100:デフォルトの名無しさん
12/05/03 11:47:48.86
>>97
もともとそのコンストラクタをどう使うつもりなのか
101:デフォルトの名無しさん
12/05/03 12:58:18.91
>>97
これがしたいんだろ?
calleeと分割代入使うか__parent__書き換えるからecma標準じゃできんぞ。
calleeはYコンビネータにして分割代入はカリー化してループ回すと出来るかもしれんがこんな所じゃ貼れんよ。
function getConstructor(){
var c = 0;
return (function ([a,b]) {
this.a = a;
this.b = b;
print([a,b,++c]);
}).bind(arguments.callee, Array.prototype.slice.call(arguments));
};
var cons = getConstructor(1,2);
var o = new cons();
102:デフォルトの名無しさん
12/05/03 13:59:28.01
>>97
ES5仕様のbindがあるならこんなんでどうよ?
function applyNew(ctor, args) {
var a2 = [null];
a2.push.apply(a2, args);
return new (ctor.bind.apply(ctor, a2));
}
applyNew(C, [2,3]);
103:デフォルトの名無しさん
12/05/03 14:19:49.87
それじゃapplyNewの戻り値が関数になるし[2,3]がインスタンスにバインドされない。
隠蔽したいのはCのvar c=0だけだと思う。
104:デフォルトの名無しさん
12/05/03 14:32:30.10
いい忘れた。
a2.push.apply(a2, args)じゃなくてArray.prototype.push.apply(a2, args)じゃね?
105:デフォルトの名無しさん
12/05/03 15:32:29.16
>>100
基本的には「コンストラクタを呼び出す時に
apply的な呼び出しは可能なのか」ということ。
限定的な使い方ではなくクロージャとかになっていても
問題ないような記法が自分では見つけられなかった。
あるコンストラクタのユーティリティ関数を作るときに
関数内からコンストラクタを呼び出す際、
引数の数が一定じゃない場合などは配列で渡せるとシンプルだなと思ったので。
強引な代替案なら思い付くんだけど
ハッとするようなスマートな記法をお持ちの方がいたら
勉強になるなと思ったですw
106:デフォルトの名無しさん
12/05/03 17:23:25.41
>apply的な呼び出しは可能なのか
関数の仮引数を分割代入するだけだからnextが標準化されるまで待つよろし。
(function ({"a": a, "b": b}){return a+b;}).call(thisObj, {a : 1, b : 2})//->3
(function ([a,b]){return a+b;}).apply(thisObj, [1,2]);//->3
>クロージャとかになっていても
thisがレキシカルじゃないから元から出来るけどecmaが許さない。
107:デフォルトの名無しさん
12/05/03 17:54:48.87
言っておくが >>102 でできるからな。
108:デフォルトの名無しさん
12/05/03 20:53:52.00
>>107
jqueryとかのbindメソッドじゃダメだよね?
現時点で実装してる処理系ってFirefoxくらい?
109:デフォルトの名無しさん
12/05/03 21:15:07.89
ES5だからIE9以上を含む全てじゃね?
IEはしらんがFxやらGoogleChromeやらOperaは実装済のはず
110:97
12/05/03 23:41:34.06
>>102
ありがとう!
勉強になったよ
pushの結合もオレには新しかったw
concatより早いんかな
あとで調べてみようっと
111:デフォルトの名無しさん
12/05/04 11:32:46.04
形だけなら別にbind 要らねんじゃね?
var Func = (function(){
var c = 0;
return function (a,b) {
this.a = a;
this.b = b;
alert([a,b,++c]);
};
})();
function applyNew (C, args) {
function F() {};
F.prototype = C.prototype;
var o = new F();
C.apply(o, args);
o.constructor = C;
return o;
}
var args = ["A", "B"];
var o1 = applyNew(Func, args);
var o2 = applyNew(Func, args);
var o3 = applyNew(Func, args);
alert(o1 instanceof Func)
112:デフォルトの名無しさん
12/05/04 13:43:47.26
__proto__使わずに同じ事する懐かしの方法だな。
>>105はnew(C.apply(...))の形式が取りたいって最初の要件は良かったのか?
113:デフォルトの名無しさん
12/05/04 13:45:14.01
最初の要件かそもそも、不明確なので
114:デフォルトの名無しさん
12/05/04 15:36:13.38
>>112
実引数に配列を渡したいだけかと思ってたが。
115:デフォルトの名無しさん
12/05/04 15:47:45.81
>コンストラクタを呼び出すときapplyを使って引数を配列で指定したい
これが要件で
>として、とりあえず以下はダメだった。
>var o = new C.apply(null, args);
>var o = new (C.apply(null, args));
>var o = (new C).apply(null, args);
>コンスタラクタが二回呼ばれる
>oが返されない
>oがCのインスタンスにならない
これを解決したいって話だったが>>97
116:デフォルトの名無しさん
12/05/04 16:43:37.62
>>115
そうか、>>111は忘れてくれw
117:デフォルトの名無しさん
12/05/23 01:38:00.11
ECMAからES5.1仕様書のHTML版公開
URLリンク(ecma-international.org)
118:デフォルトの名無しさん
12/05/23 11:26:27.98
素晴らしい。
119:デフォルトの名無しさん
12/06/04 06:55:06.70
お兄ちゃん、感心しているだけじゃなくてちゃんと読まないとダメだよ?
120:デフォルトの名無しさん
12/06/04 16:23:57.05
あー毒舌な妹がこんなところにまで
121:デフォルトの名無しさん
12/06/10 04:12:22.56
なあお前ら。
関数が結合されるのがヤダヤダ!って場合は__parent__の代わりにbind使えばいいが__proto__はどうするよ?
あと自己反映のときのcalleeとか。harmonyにProxyがあるのにcalleeがダメな理由てなんだ?
122:デフォルトの名無しさん
12/06/10 11:15:47.27
>>121
__proto__のgetterはObject.getPrototypeOf、setterはObject.createである程度代用できる
arguments.calleeについてはURLリンク(togetter.com) が参考になる
123:デフォルトの名無しさん
12/06/11 07:47:35.23
>>122
そこ色々間違ってるから鵜呑みにしないほうがいいぞ。
124:デフォルトの名無しさん
12/06/11 10:30:16.63
>>123
どこがどう間違っているのか分からないとあなたの情報を鵜呑みに出来ない
125:デフォルトの名無しさん
12/06/11 10:30:27.73
>>123
ご指摘ありがとう
よろしければ、より参考になる資料を示して頂けると嬉しい
126:デフォルトの名無しさん
12/06/14 17:49:57.32
古い情報も相当残ってるけどwiki.ecmascript.orgが確実。
127:デフォルトの名無しさん
12/06/14 18:28:36.68
>>126
古い情報が相当残っているのに確実とする理屈がわからない
結局、どこが間違っているかも言及なしだしあてにはできないなー
128:デフォルトの名無しさん
12/06/15 08:25:24.62
書いた本人は分かってるんだろうけど書き方がイマイチだから読む人がちゃんと分からないのではってことかな?
いずれにしろ1つのサイトだけあてにするのはダメ
129:デフォルトの名無しさん
12/07/01 15:23:04.66
URLリンク(wiki.ecmascript.org)
>removed <| and TriangleLiterals
これだからTC-39はダメなんだ!
130:デフォルトの名無しさん
12/07/01 16:24:38.17
そらそうよwww
これでもう復活はないなw 嫌いじゃないけどちょっと無理がありすぎたんだw
131:デフォルトの名無しさん
12/07/02 11:09:20.07
ダメなところを改善したいBrendan EichといじりたくないTC39の戦いはまだまだつづく!
132:デフォルトの名無しさん
12/07/02 13:59:41.98
AS3が一番とばっちりだよな。
先走りすぎたせいでJS2とも別モンになっちまったしhaXeの方がJS2に近いくらいだわ。
133:デフォルトの名無しさん
12/07/02 14:57:01.97
Q. JS2とは?
134:デフォルトの名無しさん
12/07/02 16:48:46.88
ActionScript3は、少し先走りすぎだったし、
Mozillaに提供した実装Tamarinのコードの質が悪く、
仕様の安易な部分と合わせて、反対派を団結させてしまったね。
結局Mozilla.orgでもTamarinを利用するTraceMonkeyプロジェクトはなくなったし。
ECMAScript 4で議論された機能については、議論継続中だからいいんだけども。
135:デフォルトの名無しさん
12/07/02 17:20:57.92
議論継続中て言ったてこれだろ?
>Tentative addition of Class Definitions Syntax and Semantics in 13.5 based upon Maximally Minimal Strawman. NOTE-Classes do not yet have full consensus within TC39 and may not survive.
11.1.5 make super references illegal in method definitions within object literals
>removed <| and TriangleLiterals
subtypingのないjs1.xにclass definition入れたってFoo.prototype={}やObject.definePropertiesの構文糖でしかないし
1.xの延長である以上型変換が暗黙の強制型変換しかないから2.0と違ってタイプルーズで真の
structural typeでないから言語仕様の問題は解決できないだろ。HarmonyやStrawmanにある型付き前提の仕様入れる気無いだろTC39。
10年無駄にして最初ゴネたimport,exportとライブラリ強化入れただけだけどその間に
本来的に必要なのはclassじゃなくてsubtypeというのを少しでも認識させたのが唯一の功績だよ。
136:デフォルトの名無しさん
12/07/06 16:22:49.91
ECMAScript 4に戻ってやり直すのが皆一番幸せになるわ
137:デフォルトの名無しさん
12/07/06 16:26:33.37
つか明らかにJavaScriptの土管化が進行中な件
ウェブのC言語と言えば聞こえはいいが、要は誰も直で書きたがらないってことだからな。
そういう用途に応えるためにLLJSとか開き直ったものも出してきてるしw
138:デフォルトの名無しさん
12/07/06 16:31:52.47
そして
問題点1:土管としては低効率
問題点2:土管が土管化を嫌がっていらんことするリスク
139:デフォルトの名無しさん
12/07/07 01:50:08.30
それって土管って表現するの?
140:デフォルトの名無しさん
12/07/07 09:45:23.03
6の仕様を見ていると結構いい感じだな。早いとこ普及してほしいよ。一応仕様のリリースは来年らしいけど。
141:デフォルトの名無しさん
12/09/10 09:02:29.57
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
>JavaScriptの土管化
142:デフォルトの名無しさん
12/09/27 00:40:57.35
ECMAScript6にいつのまにかclassが追加されててワロタw
どうやら6/15のDraftに追加されたようだ。
さがしたら>>135で話題になってたけど、言ってる意味がわからん。。
ちょっと勉強するか。
143:デフォルトの名無しさん
12/09/27 01:36:15.53
しかし仕様書を見てもよくわからんな。。
もう少し土管化するまで待つか
144:デフォルトの名無しさん
12/09/27 08:05:08.60
土管化が何を指してるのかさっぱりだ
145:デフォルトの名無しさん
12/10/01 02:35:37.39
URLリンク(www.slideshare.net)
URLリンク(constellation.github.com)
この辺りを見てclassについてある程度理解出来た。
単なるシンタックスシュガーなんだな。それで十分だ。
それにしても、モジュールの機能が無いみたいだけどそれ以外は普通にモダンな
スクリプト言語になっちゃうね。
146:デフォルトの名無しさん
12/10/01 12:03:59.01
言語設計は最初からモダンだけどな。
ライブラリ設計は古かったけど。(殆ど無いに等しいし)
147:デフォルトの名無しさん
12/10/14 16:38:50.03
ECMAScriptの最新 = TypeScriptなの?
148:デフォルトの名無しさん
12/10/15 00:05:30.16
私も興味があります
現在策定中のECMAScriptとTypeScriptの相違はどの程度なのでしょうか?
149:デフォルトの名無しさん
12/10/15 00:19:27.67
マージされることがあるとしても、バージョン二つくらい後だろ。
クラス仕様については、ECMAScriptとほぼ同じ機能になってるな。
違いは組み込みかライブラリ化の違いくらい。
150:デフォルトの名無しさん
12/10/15 17:18:28.74
>>149
ありがとうございます
そうなると、あと10年位掛かりそうな・・・
オプショナルな静的型付けとかジェネリックとか、次の仕様に取り込まれないかな
151:デフォルトの名無しさん
12/10/15 17:47:41.70
ECMAScript4の失敗を忘れたのか?
そこまでやるならいっそ新しい言語にしてくれたほうがマシ
糞みたいな互換性やら名前やらとはさっさとおさらばしたいぜ
152:デフォルトの名無しさん
12/10/15 20:19:01.64
ECMAScript4の失敗についてはよく知らないけど
TypeScriptはJavaScriptの上位互換だよ
TypeScriptのように、既存のJavaScriptが動くように仕様を拡張したら問題ないのでは?
153:デフォルトの名無しさん
12/10/15 20:43:43.76
ECMAScript4の失敗
URLリンク(ja.wikipedia.org)
URLリンク(developers.slashdot.jp)
URLリンク(news.mynavi.jp)
154:デフォルトの名無しさん
12/10/15 22:08:55.95
>>153の記事を読んでの感想。
ECMAScript 4の失敗というのは、ECMAScript 4の仕様自体の問題というよりも、
Adobe、Mozilla、Opera、Google陣営と、Microsoft、Yahoo!陣営による政治的な問題
という色彩が強いように感じた。
例えば、ECMAScript 4が決裂した2008年当時は、Microsoftは「Web標準」を軽視し、
Silverlightを普及させようとしていたのではなかったか。
つまり、当時のMicrosoftは、Silverlightを普及させるために、JavaScriptが高機能になるのを嫌った。
一方、JavaScriptの重要性を認識していたMozillaやGoogleなどは、JavaScriptを大幅に拡張したかった。
そうした各陣営の様々な政治的な思惑があって、ECMAScript 4は決裂したように思う。
しかし、今は、Microsoftも「Web標準」にシフトして、業界全体でJavaScriptの重要性に対する認識が
共有されるようになったのではないか。
Webサイトに限らず、デスクトップアプリケーションやモバイルアプリ、サーバーサイドにまで
JavaScriptが使われている。
そうした中で、JavaScriptによる開発が行いやすいよう、ECMAScript 4のような大規模な拡張が
JavaScriptには求められているし、こうした要求に異を唱える陣営は今はもういないのではないか。
だから、合意に達するのであれば、慎重かつ大胆にECMAScript 6の仕様を拡張してほしいというのが、私の考え。
155:デフォルトの名無しさん
12/10/15 22:58:57.10
MicrosoftはMicrosoftで思惑あったと思うが、
・AdobeがActionScriptをECMAScript4にしようとしていた。
・既に広く広まったECMAScript3との互換性の問題が軽視。
古いコードをどうやって実行するのか議論が深まらないまま。
・ECMAScript4の新機能の多くがActionScriptをコピーしただけで、
入れることの是非、設計詳細部の議論が深まらないまま。
・ActionScriptの機能の多くが実装者の思いつきで設計。(Adobeの公開MLに残ってる)
・参照実装であるtamarinのコードの質の低さ。
というわけでストップになった。
ただしECMAScript4で導入されそうになった機能は捨てられたわけでなく、
多くは議論を深めてから入れる方向で考えられている。
Webの現状を考えると時間をかけるのが妥当と判断された。
それはBrandenの声明にもはっきり書かれている。
156:デフォルトの名無しさん
12/10/15 23:48:22.01
>>155
ActionScriptはECMAScript 4を元に作られたと思っていたのですが、
実際は逆で、ActionScriptを元にECMAScript 4の仕様を決めようとしていたということでしょうか?
ECMAScript 4は2回決裂しているようなので、そこらへんの前後関係は良く分かりませんが、
少なくとも2回目の決裂に関しては、Adobeの強引さとActionScriptの出来が問題になったということですかね。
ECMAScript 6に関してはしっかり議論して合意に達してほしいですね。
便利な機能が入ることを期待しつつ、時間が掛かることをもどかしく思ったりしつつ、
末端プログラマとして、仕様策定者に期待したいです。
157:デフォルトの名無しさん
12/10/16 08:10:49.32
>実際は逆で、ActionScriptを元にECMAScript 4の仕様を決めようとしていたということでしょうか?
ドラフトを先走って実装しただけ
158:デフォルトの名無しさん
12/10/18 19:10:41.39
>>154
前半の陰謀論はまったく要らないな
159:デフォルトの名無しさん
12/10/19 21:05:59.32
JavaScriptの未来?
URLリンク(brendaneich.github.com)
160:デフォルトの名無しさん
12/10/19 21:13:28.34
>>159
ちなみにBrendan Eichのスライド
161:デフォルトの名無しさん
12/10/19 21:25:10.17
Brendan Eich @BrazilJS 2012 - The State of JavaScript
URLリンク(www.youtube.com)
162:デフォルトの名無しさん
12/10/20 00:54:46.78
typescript出たばかりなのに、No Classかよw
163:デフォルトの名無しさん
12/11/02 03:30:41.79
tcp/ipみたく実装できてから仕様が固まるのかな
164:デフォルトの名無しさん
12/11/14 10:34:30.08
結果論かもしれないが、ECMAScript 4を捨てたのは明らかな失策だろう。
議論議論と、皆いつからそんなに会議好きになったのかな。
この記事がとても興味深いんだけど。
第二次世界大戦中のライフハック「仕事を進まなくさせる8ヵ条」
URLリンク(akihitok.typepad.jp)
> 1. 何事をするにも「通常のルート」を通して行うように主張せよ。
> 決断を早めるためのショートカットを認めるな。
> 2. 「スピーチ」を行え。できる限り頻繁に、長い話をすること。
> 長い逸話や自分の経験を持ちだして、主張のポイントを解説せよ。
> 「愛国的」な主張をちりばめることを躊躇するな。
> 3. 可能な限りの事象を委員会に持ち込み、「さらなる調査と熟考」
> を求めよ。委員会のメンバーはできるだけ多く(少なくとも5人以上)すること。
> 4. できる限り頻繁に、無関係なテーマを持ち出すこと。
> 5. 議事録や連絡用文書、決議書などにおいて、細かい言葉遣いに
> ついて議論せよ。
> 6. 以前の会議で決まったことを再び持ち出し、その妥当性について
> 改めて問い直せ。
> 7. 「警告」せよ。他の人々に「理性的」になることを求め、将来やっかいな
> 問題を引き起こさないよう、早急な決断を避けるよう主張せよ。
> 8. あらゆる決断の妥当性を問え。ある決定が自分たちの管轄にあるのか
> どうか、また組織上層部のポリシーと相反しないかどうかなどを問題にせよ。
まさにウェブ標準そのものじゃないですかね。
> 「愛国的」な主張をちりばめることを躊躇するな。
オープンウェブ()の理想を語るとかですかね、この辺に対応するのは。
165:デフォルトの名無しさん
12/11/14 10:41:03.03
>>159
他人事ながら心配になるのは、そのスライドが現実化するよりも
Firefoxのシェアがゼロになる方がおそらく早いってことなんだが。
StatCounter等のデータ参照。特にモバイルでシェアゼロだしな。
Googleもいつまで養ってくれるんだか。
危機感があるから、ウェブの未来だのFirefox OSだの大々的にぶちあげてるんだろうけれど。
166:デフォルトの名無しさん
12/11/14 11:55:54.29
>>165
>Firefoxのシェアがゼロになる方がおそらく早い
StatCounterのデータをきちんと分析できればその妄想は消えるよ
URLリンク(gs.statcounter.com)
今Chromeが食ってるのはIE8以前のシェアとFirefox4以前のシェアってのが一目瞭然。
過去のFirefox3.xのシェアがぶっとかったから、ブラウザ名だけの分析だとFirefoxのシェアが失われてるように見えるが
実際には、Firefox5以降のラピッドリリースに乗り換えてるFirefox信者をGoogleは全然動かせてない。
その量、WEB利用者全体の20%強……このシェアがゼロになるというなら、ちょっとその理由を教えてほしい
167:デフォルトの名無しさん
12/11/14 12:14:52.56
ちょっと昔なら逆転不可能そうに見えたブラウザ市場をChromeがガツガツ食い込んで行ったのは
裏を返せば、どのブラウザにだってまだまだシェア伸ばすチャンスはいくらでもあるってことの証明だしな
168:デフォルトの名無しさん
12/11/14 12:25:49.32
おまいらスレチなんで各ブラウザの専スレでやってくれないかー
169:デフォルトの名無しさん
12/11/14 12:39:10.73
そこはブラウザの専スレじゃなくてブラウザ戦争スレに誘導だろ
170:デフォルトの名無しさん
12/11/14 17:03:47.11
|┃三 ,ィ, (fー–─‐- 、、
|┃. ,イ/〃 ヾ= 、
|┃ N { \
|┃ ト.l ヽ l
ガラッ.|┃ 、ゝ丶 ,..ィ从 |
|┃ \`.、_ _,. _彡’ノリ__,.ゝ、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|┃三 `ゞf‐>n;ハ二r^ァnj< y=レヽ < 話は聞かせてもらったぞ!
|┃. |fjl、 ` ̄リj^ヾ)  ̄´ ノ レ リ | Operaは滅亡する!
|┃三 ヾl.`ー- べl,- ` ー-‐’ ,ン \____________
|┃ l r─‐-、 /:|
|┃三 ト、 `二¨´ ,.イ |
|┃ _亅::ヽ、 ./ i :ト、
|┃ -‐”「 F′:: `:ー ‘´ ,.’ フ >ー、
|┃ ト、ヾ;、..__ , ‘_,./ /l
171:デフォルトの名無しさん
12/11/15 16:23:31.62
>>164
かなり勘違いしてる。
>>165
これ、まだ現実味ない事ばかり書いてるわけじゃなくて、
既に確定しているversion 6や既に現実になっていることが多い。
Javascriptが共通基盤になるって話がちょっと盛ってあるくらい。
172:デフォルトの名無しさん
12/11/22 22:07:58.91
正直Windowsみたいに一社独占になった方が開発は楽になるけどね。
今後はいろいろなOSとブラウザが乱立するんだろうね。
173:デフォルトの名無しさん
12/11/23 08:48:10.93
> 正直Windowsみたいに一社独占になった方が開発は楽になるけどね。
一生Adobe信者になれば楽になれるぞ
174:デフォルトの名無しさん
12/11/23 09:55:42.99
そういやアドベはブラウザは作らないのかね。
作って普及させれば全て無駄にならないのに。
175:デフォルトの名無しさん
12/11/23 10:39:23.23
Flashプラグインあるじゃん。これさえあれば既存の全ブラウザ乗っ取ったも同然。
176:デフォルトの名無しさん
12/11/23 16:48:28.33
すでにIE10が乗っ取れてないわけだが
177:デフォルトの名無しさん
12/11/24 12:58:20.82
なんかe4xが死にそう
interpolationは便利だったのに
178:デフォルトの名無しさん
12/11/27 04:47:12.84
これか
URLリンク(developer.mozilla.org)
かなり思い切った決断だけど
なんで廃止にする必要があったの?
問題はFirefoxだけ?
179:デフォルトの名無しさん
12/11/27 04:50:27.92
>>178
ごめん、E4Xをサポートしているのは、ブラウザではFirefoxぐらいか?
180:デフォルトの名無しさん
12/11/27 10:58:00.49
もっと早くに死んでるべきものだった。
XML literal syntax(笑)
181:デフォルトの名無しさん
12/11/27 11:22:01.01
セキュリティの問題さえなければ便利だったんだけどね
innerHTML(笑)は標準化さえされてないし、DOMは超冗長だし
182:デフォルトの名無しさん
12/11/27 15:07:03.68
>>181
innerHTMLは標準化されてるよ
URLリンク(domparsing.spec.whatwg.org)
URLリンク(www.w3.org)
183:デフォルトの名無しさん
12/11/27 16:30:09.11
E4Xってヒアドキュメントに使うもんだと思ってた
っていうかこれからヒアドキュメントどうすればいいんや・・・
184:デフォルトの名無しさん
12/11/27 17:35:53.95
>>182
ちゃんと勧告まで進めばいいな
DOM4は大丈夫そうだけど、その関連規格はコケそうで怖い
DOMの仕様は5つもW3C Noteになった前例があるし
185:デフォルトの名無しさん
12/11/27 22:54:32.73
>>183
URLリンク(uupaa.hatenablog.com)
186:デフォルトの名無しさん
12/12/03 09:07:26.90
>>183
ES6 Template Strings
187:デフォルトの名無しさん
12/12/03 22:31:17.95
>>186
何この気持ち悪い構文
普通にWYSIWYGリテラルでいいのに・・・
188:デフォルトの名無しさん
12/12/04 17:52:16.89
Perlとシェルを合体させたような変な構文だな
189:デフォルトの名無しさん
12/12/04 17:55:27.25
XML literalの百倍マシ。Javascriptっぽいし。
190:デフォルトの名無しさん
12/12/09 23:50:29.25
JXONってDOMなんだな
>>186
#演算子やん
191:デフォルトの名無しさん
13/01/01 13:04:46.41
typescriptて散々実装しねぇって駄々捏ねてたのにes4の先行実装だな。
15年早かったらes5なんてなかったのに。
192:デフォルトの名無しさん
13/01/04 01:02:18.10
URLリンク(benvie.github.com)
ここにES6が実験出来るサイトがあった。
早速classとか試してみたらちゃんと動いた。
多重継承が出来なそうだが、ES6は出来ないのかな?
あと配列内包(List comprehension)がうまく動かん…
193:デフォルトの名無しさん
13/01/04 02:06:29.51
trait使えばできるだろ>多重継承
ES.nextに入ってなかったっけ?
194:デフォルトの名無しさん
13/01/05 11:47:34.88
VBScriptでweb上の画像を取得するスクリプトをいくつか書いたのだけど、
ブラウザをIE8からFireFoxに変えたら正常に動作しなくなった。
それで結局全部Jscriptに書き換えるはめになってしまった。
WSHの動作環境はブラウザに依存するもんなんでしょうか?
画像の取得に使用したcomはWinHttp.WinHttpRequest.5.1とMSXML2.XMLHTTP3.0、
使用OSはXPです。
195:デフォルトの名無しさん
13/01/05 14:25:52.62
バッチリ依存します。そもそも、それらのAPIは標準化されていません
OperaだろうとGoogle Chromeだろうと動かないでしょう
196:デフォルトの名無しさん
13/01/05 15:01:24.08
>>195
ありがとう。
テキストは取得できるのに画像が取得できないという症状でした。
JScriptにしたら問題なく動作するようになりました。
しかしそのJScriptでさえ、JavaScriptの「方言」と呼ばれたりしています。
う~む……、
現実の世界では英語が国際的に標準語の地位を固めて久しいですが、
プログラムの世界は混沌としていますね。
197:デフォルトの名無しさん
13/01/05 16:09:05.30
そのJScriptがクソなだけだ
英語が標準語ならJScriptはラテン語だろう
198:デフォルトの名無しさん
13/01/05 19:51:42.53
MicrosoftがJScriptとかいう謎なクソ言語を作っただけの話で、
そこまでややこしい話ではない。
とりあえずIEをメインにして開発するのをやめれば
自然とそれなりに標準に沿ったものになる
199:196
13/01/05 23:50:29.96
>>198
移植そのものは2ヶ月ほどの作業だったのですが、
その後のデバッグにみっちり1月半かかってしまいました。
それにしても、OSは世界標準なのに、実装されているバッチスクリプトが方言って……(泣)
200:デフォルトの名無しさん
13/01/06 01:06:47.43
MSはWeb関連では失敗続きで弱小メーカーだからね。
真に世界標準なのはOffice(Excel,Word)であって、WindowsはOfficeの抱き合わせ販売
といっても過言ではない。(過言かも…)
だから、Officeの呪縛がない個人PCだとWindowsでなくてもそれほど困らないし。
201:デフォルトの名無しさん
13/01/06 01:11:47.62
OfficeもWineで動くから実はWindowsは全く必要ない…?
202:デフォルトの名無しさん
13/01/06 02:12:03.17
確かにそうだね。ただ、Webアプリが充実してくるとOSの重要性は無くなっていって
どうでもよくなりそうだね。
少なくとも会社のPCは、惰性でWindowsをずっと使っていくと思われる。
203:デフォルトの名無しさん
13/01/08 19:42:04.34
海外じゃ公的機関が予算削減のためにOpenOfficeを使ってるだろ
204:デフォルトの名無しさん
13/01/09 15:59:00.23
es6どんどん糞になっていくよな
proxyとAPI強化しか要らん
どこに行こうとしてるんだ
205:デフォルトの名無しさん
13/01/09 20:30:38.50
>>204
letとかオプション引数とか=>とかが要らないわけない。
早くES6が普及してほしい。
206:デフォルトの名無しさん
13/01/09 21:04:16.79
たまにはremoveされた<| と TriangleLiterals のことも思い出してあげてください
207:デフォルトの名無しさん
13/01/09 23:49:59.86
>>204
API強化はスレ違いです。
208:デフォルトの名無しさん
13/01/10 00:44:06.28
意味が分からん。いきなり何を言ってるんだお前は
209:デフォルトの名無しさん
13/01/12 12:43:53.73
es6でconstが導入されるけど、functionの引数にもconst指定できればいいけど。
210:デフォルトの名無しさん
13/01/12 16:18:48.94
const引数か、あったら便利かもな
211:デフォルトの名無しさん
13/01/12 17:18:05.69
逆に無いと引数が変更されるのかがわからないし、
精神衛生上よくないよね。是非ともあってほしい機能だ。
212:デフォルトの名無しさん
13/01/12 17:28:59.86
プロパティが変更できるんじゃ意味ないだろ
213:デフォルトの名無しさん
13/01/13 09:51:30.92
>>211
constってプロパティが変更出来るのか?
そもそも、C++みたいにconstメソッドとかの指定が無いから、
メソッドが内部を変更してしまうかも分からないね。
つうか、今一俺が仕様を分かってないな…
214:デフォルトの名無しさん
13/01/13 11:03:23.10
今のFirefoxに実装されてるconstは、
const指定した変数が指すオブジェクトを別のオブジェクトには変更できないけど、
const指定した変数が指すオブジェクトの中身は変更できるね
これを関数引数に指定できても意味無いな
215:デフォルトの名無しさん
13/01/13 13:09:36.12
じゃあconstの存在意義って何よ
216:デフォルトの名無しさん
13/01/13 13:52:23.84
constはプリミティブ型にしか意味なさそう。
オブジェクトを本当にconstにするには、Object.seal(obj)を使う必要があるんだろうね。
217:デフォルトの名無しさん
13/01/13 14:14:28.53
インタプリタでconstは厳密な実装が難しい。ましてevalのある言語。
218:デフォルトの名無しさん
13/01/13 14:15:58.46
>>216
オブジェクトを書き込み不可にしたいのならそう。
通常、constは参照の方の属性。
219:デフォルトの名無しさん
13/01/13 17:39:39.16
>>217
それは違うんじゃないかな?Object.seal()とかあるわけだし。
それにしても、es6になっても癖のある言語である事に変わりないね。俺は好きだがw
220:デフォルトの名無しさん
13/01/13 17:51:08.18
>>219
const引数修飾子はオブジェクトの属性ではないのです。
221:デフォルトの名無しさん
13/01/13 18:23:10.52
>>220
>>217はインタプリタの一般論で言ってたから、そんなわけないとObject.seal()
を例にして否定したんだよ。
222:デフォルトの名無しさん
13/01/13 19:10:38.56
一部でも難しければ、全体が難しいんじゃないかな?
223:デフォルトの名無しさん
13/01/13 19:26:59.41
じゃあどうやってObject.seal()実装してるの、って話だろ
別に一部も全部も難しくないって
224:デフォルトの名無しさん
13/01/13 19:44:05.92
はあ?
Property descriptorで全てのpropertyをflexible: falseにして、
新規propertyを作れなくするんだけど?
225:デフォルトの名無しさん
13/01/24 19:33:48.70
flexibleは名前変わったしsealじゃなくてfeezeだよ
インタプリタでconst難しいのはあってるけど
226:デフォルトの名無しさん
13/02/01 22:14:26.55
代入した時にエラーを吐くならともかく
完全にスルーするってどういう意味があるのかサッパリでござる
バグの元にしかならんと思うんだが
227:デフォルトの名無しさん
13/02/02 00:31:41.27
そんなあなたにstrict mode
228:デフォルトの名無しさん
13/02/03 13:30:29.45
>>226
pageをリロードしたときに二重定義エラーになるからだろ。
リロードしたときに一々コンテキスト毎再生成してたら遅いだろ。
標準化されたstrict modeはfatal-warnings modeの挙動取り込んだんだから
>>227の言う通りデバッグのときだけstrict mode使えば良いじゃん。
それよかletになつたから#ifdefとして使えんのが痛い。
他のも標準化範囲半端だから不便だけどfor ofとextraとコレクションやっと入ったんだ喜べ!
229:デフォルトの名無しさん
13/03/07 15:27:21.75
URLリンク(en.wikipedia.org) 112位
URLリンク(github.com) 54位
URLリンク(github.com) マルチプラットフォームなcompilerらしいが実態は謎 108位
URLリンク(github.com) coffeeっぽい lua transpiler 107位
URLリンク(github.com) ruby 実装の clojure 109位
URLリンク(github.com) 真打登場?しかしrazor-qtなぜおまランクに入ってる… 80位
URLリンク(github.com) forthっぽい js transpiler 111位
URLリンク(github.com) みんなも言語つくろうね!そんなeclipseで言語dsl作成ツール 99位
githubのランクにニューフェース(新言語)登場!
上記ふたつは昔からあるのだけど。状況を一言で言い表すと
すげー混沌でこれは…っていうか百花繚乱
230:デフォルトの名無しさん
13/03/22 13:13:07.13
JScriptから、要素数が65536の配列に見える
オブジェクトをC#で作っています。
x[1]=2とか、y=x[1]と書くと、IReflect.GetFieldではなく
IReflect.GetFieldsですべてのメンバを取得してから
"1"という名前のフィールドを探しているようです。
GetFieldsを呼び出された時点では、
目的のフィールド名が分からないので
フィールド名が"0"~"65535"のFieldInfo配列を返したら
InvokeMemberまでに数秒かかってしまいます。
要素数に関わらない時間で呼び出せるようにする
方法はありませんか?
231:デフォルトの名無しさん
13/03/22 13:18:16.69
proxy
232:デフォルトの名無しさん
13/03/29 07:35:30.36
URLリンク(github.com)
>Theoretically any browser supporting JavaScript's typed arrays is
>supported. Unfortunately, the spec hasn't been finalized yet and
>as such support is limited for now.
URLリンク(stackoverflow.com)
URLリンク(stackoverflow.com)
いまさらtyped-arrayとか調べてみたけどやっぱこの辺でつまったorz
よくみたらphpもasのライブラリとかも書いててすごいなオスロのひと…
233:デフォルトの名無しさん
13/04/03 13:55:55.13
>>230
ちょうどおいらもC#でjscript等で使用されることを想定してるオブジェクトを設計してるんだけど
IExpandoとかIReflectとか実装する意味ある?(面倒くさい)
もうできること限定しちゃって
コレクションもコレクションクラス作っちゃってやったほうが楽じゃね?
x.Set( 1, 2 );
y = x.Item( 1 );
で妥協しちゃだめ?
234:230
13/04/04 12:31:59.48
setメソッドでは妥協したくないところです。
IReflect.InvokeMemberに"[DISPID=0]"というメンバに対する処理を書いて
x(1)=2、y=x(1)というのは実装できました。
今のところ、これ以上の策がなく、妥協してるところです。
IExpandoを実装するとx[1]=2は実装できたんですが
y=x[1]に対応しようとすると、
230に書いた課題が残るんですよ。
コレクションではなくて、UART経由で0~65535のアドレスを持つ
レジスタへの読み書きなので、GetFieldsを呼び出された時点で
求めるメンバ名が取得できれば良いんですけどね。
235:デフォルトの名無しさん
13/04/28 12:03:49.25
Functional JavaScript: Introducing Functional Programming with Underscore.js
URLリンク(www.amazon.com)
Publication Date: June 18, 2013
236:デフォルトの名無しさん
13/04/30 19:29:37.54
es6 draft 15.4.4
>is not an Array exotic object
なん、だと・・・往生際が悪いぞ!マスター・アジア!
わざわざ下線引くからには皆考えることは同じだな。
あと、MappedArgumentsObjectがjs1.2のarguments objectと同じ仕様じゃん。caller無くした代わりか。
つか上がってるpdf3月なのにもう古い。
237:デフォルトの名無しさん
13/05/29 16:28:30.33
30%の確率で0、70%の確率で1を返すプログラムを教えてください
238:デフォルトの名無しさん
13/05/29 19:04:59.18
>>237
乱数
239:デフォルトの名無しさん
13/05/29 19:14:50.60
if ( (new Date()).getSeconds() % 3 ){
return 1;
}else{
return 0;
}
240:デフォルトの名無しさん
13/05/29 19:54:46.93
>>239
それなら Date.getTime() % 3 の方がGC的によい
241:デフォルトの名無しさん
13/05/29 20:08:41.26
そもそもそれ70%のコードじゃなくね
242:デフォルトの名無しさん
13/05/30 12:49:14.78
これはひどい
243:デフォルトの名無しさん
13/05/30 14:10:10.49
>>240
ほとんどのシステムで時計見るのは遅いよw
244:デフォルトの名無しさん
13/06/01 03:42:36.21
>>237
課題はできた?
亀だが。
f();
とすることで取り出せるから。
上のは全然できてないから、これちゃんと提出してね。
var f = (function () {
var b = this.a,
l = b.length,
r = function (l) {
return Math.floor(Math.random() * l);
};
return b[r(l)];
}).bind(
(function (a) {
var r = [],
i = 0;
a.forEach(function (m, v) {
for (i = 0; i < m; i += 1)
r.push(v);
});
return {a: r};
}([3, 7]))
);
245:デフォルトの名無しさん
13/06/02 21:39:31.17
>>237
var f = function() {
var base = 10000000;
var r = Math.floor(Math.random() * 10 * base);
return r < 3 * base ? 0 : 1;
};
// 検証コード
var zero = 0;
var one = 0;
for (i = 0; i < 10000000; ++i) {
var result = f();
if (result == 0) {
++zero;
}
if (result == 1) {
++one;
}
}
print(zero / (zero + one)); // => 0.2999617
print(one / (zero + one)); // => 0.7000383
246:デフォルトの名無しさん
13/06/02 21:42:53.65
少し間違った
var f = function() {
var base = 10000000;
var r = Math.floor(Math.random() * 10 * base + 1);
return r < 3 * base ? 0 : 1;
};
247:デフォルトの名無しさん
13/06/04 16:55:54.33
>>244,245
↑
こいつらは何がしたいわけ?
248:デフォルトの名無しさん
13/06/07 12:17:25.74
どっかのアホなスレと勘違いしてるんだろ
249:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
(function (x) {
y=2;
print(x,y);
function(x){x=10;y=20;print(x,y)};
print(x,y)})(1)
[出力]
1 2
10 20
1 20
これ一体どう実装されているんだろう?
クロージャの生成で変数テーブルの参照を共有するのだろうから
yの変更が反映されるのは至極真っ当。
xの変更が反映されないのは、引数については変数捕捉されないように細工がされている?
a.クロージャ生成時に見えていた変数テーブル
b.クロージャ引数用の変数テーブル
この2つを持っていて、変数評価時に走査している?
さらにクロージャの中でクロージャ生成する場合は
a,bを合わせて新たに1つのaにしているんだろうか。
250:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
>>249
単純に4行目のfunction宣言内で新しい環境が作られているからじゃね?
つまり3行目と5行目のprint呼び出しに現れるxは、
1行目のfunction宣言の環境内で束縛されているけれど、
4行目はのprint呼び出しは(新しい)別の環境内にあるx(の束縛)を参照している
251:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
4行目が
function(x){x+=10;y=20;print(x,y)};
だとどうよ
252:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
>a,bを合わせて新たに1つのaにしているんだろうか。
スタックみたいにテーブルを重ねていくんじゃね
253:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
>>249
たまたま名前が同じだが以下と同じだ。
(function (x) {
y=2;
print(x,y);
function(z){z=10;y=20;print(z,y)};
print(x,y)})(1)
名前が同じだけで別のものだ。
scopeって考えを理解できてない。
254:デフォルトの名無しさん
13/07/25 NY:AN:NY.AN
>>249
出力結果おかしくない?
4行目は即時関数じゃないから、実行されないと思うんだけど。
実行環境によっては、それで実行されるのか?
それ以外は453が正解だと思うが。
255:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
変数yとかzがグローバル変数だし
4行目が名前無しの関数宣言?してるだけだし
もうなんかプログラム的にめちゃくちゃ
256:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
zはグローバルじゃない。
257:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
トップレベルで束縛されている変数を「グローバル変数」と呼び、
それ以外のすべての変数を「ローカル変数」と呼ぶとすれば、
>>256が言うようにzはグローバル変数じゃないし、それどころか
>>249,253ともすべての変数がローカル変数だったりする
で、あるクロージャ(ここでは環境と同義)について、
自クロージャ内で束縛されている変数を「束縛変数」と呼び、
より外側のクロージャで束縛されている変数を「自由変数」と呼ぶとすれば、
>>249の場合
[外側のクロージャ内] x(仮引数): 束縛変数, y: 束縛変数
[内側のクロージャ内] x(仮引数): 束縛変数, y: 自由変数
>>253の場合
[外側のクロージャ内] x(仮引数): 束縛変数, y: 束縛変数
[内側のクロージャ内] x: 自由変数, y: 自由変数, z(仮引数): 束縛変数
となる
258:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
>>257
yはグローバル変数だぞ
259:255
13/07/26 NY:AN:NY.AN
>>256-257
ごめんzはちょっと見落としてたよ
でもyはグローバル変数だろ?
仮引数じゃなければ、varつけて宣言してない変数はトップレベルに束縛されてしまうはず
なのでyはグローバル変数じゃない?
260:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
内側のクロージャの宣言はChromeとかだとエラーになるな
そもそも呼び出してないんで実行結果にまったく影響無いが
これが実行できてしまう環境ってなんなの?
261:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
え、関数が関数返せない処理系なんかあるの?
262:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
関数が何かを返すなら少なくともreturn文が必要だな
>>249と>>253はreturnも無いし関数の戻り値も参照してないけど
263:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
(function(){var abc; abc=function(){};})();
(function(){function abc(){};})();
(function(){function(){};})();
firefoxもchromeも三つ目だけシンタックスエラーになるね
無名関数の定義は式の右辺値になってないとだめなのかな
関数宣言と紛らわしいからか
264:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
式の右辺値とか関係無いか
関数宣言になっちゃって、その場合は無名じゃダメってことなのかね
265:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
SyntaxError: function statement requires a name
が出るから多分そうだね
266:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
IEはドキュメントモードによってはエラーにならんのか
わらえるw
267:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
wshはエラー出ないね
268:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
Edition 3rdしか見てないけどECMA-262の仕様的にはfunction(){function(){};}はエラー
269:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN
JScriptだから(震え声)
270:デフォルトの名無しさん
13/07/27 NY:AN:NY.AN
>>249
コードが間違ってないなら結合オブジェクト実装しちゃったんだろう
271:デフォルトの名無しさん
13/08/03 NY:AN:NY.AN
どうやら、6の仕様が確定するのは今年末で、最終的にリリースされるのは来年末らしいな。
もうちょっと早くなんなかったのかね。
272:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
・なぜ匿名関数呼び出しの際function(){}を括弧でくるまなければいけないのか
・なぜreturnがいるのか
ファンクショナルなことしてると助長になりすぎ
273:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
うが抜けた
274:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
うはどこに入るのか
275:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
助う長
276:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
・なぜ「う」がいるのか
277:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN
鵜飼のためにうは存在する。
278:デフォルトの名無しさん
13/08/05 NY:AN:NY.AN
>>272
functionの前にvoidとか ! とか適当な単項演算子を書けば
括弧でくるまなくても良くなる
279:デフォルトの名無しさん
13/08/05 NY:AN:NY.AN
ほんとにファンクショナルなことやってるなら、
function(){}を括弧でくくる必要なんてほとんど無いはずなんだけどね。
returnは面倒くさいけど。
280:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN
関数リテラル使って関数オブジェクトを複数作ると、一般的にメモリ上はどうなるんだろう。
関数オブジェクトが持つのはクロージャだけなのかコード部分(text領域)も複製されるのか。
関数リテラルによる関数複製のコストが知りたい。
281:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN
ソース嫁
282:デフォルトの名無しさん
13/08/14 NY:AN:NY.AN
実装による、としか言いようがない。そしてこのスレはスレタイによれば標準規格についてのスレ。
ただ、ひとつ言っておくなら、textというのはバイナリコードを指す用語だから、
インタプリタには基本的にはそんなものはない。
283:デフォルトの名無しさん
13/08/14 NY:AN:NY.AN
>>280
関数宣言でも最適化でインライン展開するから実装者以外が気にすることじゃないな。
ariguments.calleeが遅いとか嘘で仕様からなくしたいだけだし。
>>282
純粋なインタプリタなんて素のspidermonkeyくらいじゃね?
284:デフォルトの名無しさん
13/08/14 NY:AN:NY.AN
素朴な通訳系実装なら構文木は共有してるし、
高度なJIT持っていれば>>283の一行目の通り。
ただシビアな要求のあるコード書いてる人は、
JITあってもプロファイル取ってあれこれやってる。
URLリンク(github.com)
285:デフォルトの名無しさん
13/08/30 NY:AN:NY.AN
標準準拠でさ、関数コンテキストでDontDelete属性付けずに変数定義するの方法てないよな?
esじゃなくてもActivationオブジェクトとる方法ないけどさ。
286:デフォルトの名無しさん
13/09/02 19:24:58.91
JavaScriptに出来ないことなんてあるわけ無いだろ
eval('var abc = 123')
delete abc //true
287:デフォルトの名無しさん
13/09/02 20:20:57.78
このスレって思い出話しかすること無い寂れた言語スレに比べて
いくらでも話題にできることあるはずなのに過疎りすぎじゃね
288:デフォルトの名無しさん
13/09/02 21:38:39.37
>>286
evalがあったか、忘れてた。MZ-700ばりに不可能はないな。
Variable Instantiation時にCallになきゃc(`Д´と⌒c)つ彡ヤダヤダ
じゃないけどstrict mode時には使えなさそうだ。
未修飾でdeleteするとstrict modeで例外出るしDontDelete付かないことは想定してなさそうだよね。
ここら辺つめが甘いっていうか。さすが付け焼刃のes5っていうか。
>>287
仕事で使ってる土方が言語仕様全く理解してないからこっちに用無いでしょ。
プロトタイプベースだし、動的extentのくせにレキシカルクロージャ出来るとか、
es5になってプロパティの定義(属性の指定)がsmalltalkっぽくなったとか知らん人間からはobj-cくらいキモいんじゃない?
289:デフォルトの名無しさん
13/09/03 06:57:07.17
プロパティの削除は無くてはならないけど
トップレベル変数を削除する必要のある機械なんて皆無でしょ
所によって宣言されていたり宣言が解除されていたり出来るのは変
290:デフォルトの名無しさん
13/09/03 17:44:39.86
>>289
静的型付け言語とかそういうのから見ればプロパティの削除どころか追加さえも変って事になるんじゃね?
291:デフォルトの名無しさん
13/09/03 20:46:39.95
プロパティの削除は機能として無くてはならないけど
関数スコープの変数宣言の解除とか使い道がないように思うんだけど
何百行もあるような関数でならまだあるのかな
292:デフォルトの名無しさん
13/09/04 00:38:38.43
>>289
>トップレベル変数を削除する必要のある機械なんて皆無でしょ
トップレベルの変数を削除なんて誰も言ってないだろ?strict modeで未修飾のdeleteならコンテキスト関係ないぞ。
どれのこと言ってんのか分からんから次の
>所によって宣言されていたり宣言が解除されていたり出来るのは変
が曖昧だが・・・プロパティが追加されたり削除されたりするのは動的言語では当たり前の仕組み。
当たり前である以上、議論する意味はなくない?ダックタイピングが型理論的にどういう分類になるか議論するのと同じことだろ。
293:デフォルトの名無しさん
13/09/04 00:42:34.78
変数はプロパティとは違うだろ
そりゃvar xはJSの内部概念的には__scope__.xだけど
294:デフォルトの名無しさん
13/09/04 01:55:53.59
概念じゃなくて言語仕様でVOのプロパティなんだけど。何がVOになるかは定義されてないけどVOは定義されてる。
295:デフォルトの名無しさん
13/09/04 02:32:00.91
うん、でもプロパティとは違うから。
296:デフォルトの名無しさん
13/09/04 02:34:45.15
うん、でもプロパティとは違うから。
297:デフォルトの名無しさん
13/09/04 03:10:06.27
うん、でもプロパティとは違うからw
298:デフォルトの名無しさん
13/09/04 03:54:10.85
>>289>>293>>295
>>290
想定してるパラダイムが一致してないのに、
「俺の想定するECMAScriptのパラダイムではこうだ!」
って主張しても何の意味も無いだろ。
「ECMAScriptの仕様上、
過去どう定義されていて、
過去どう解釈されていて、
現在どう定義されていて、
現在どう解釈されるべきで、
将来どう定義されるべきで、
将来どう解釈されるべきなのか」
299:デフォルトの名無しさん
13/09/04 12:16:53.34
あーこりゃ仕様に目が眩んで現実が見えてない
300:デフォルトの名無しさん
13/09/04 NY:AN:NY.AN
>>229
URLリンク(ambroselittle.com)
URLリンク(adambard.com)
> 36 TypeScript 972
URLリンク(github.com)
なんとなく確認してみたけど
qupzilla と qBittorrent は typescript だったんだ
…すごくいい加減そうな集計されてそう
301:290,298
13/09/04 14:25:34.29
>>299
いや>>289>>293>>295の人らも俺々仕様に目が眩んで現実が見えてないって話だよ。
「~と定義・解釈されるべき」だとしても「現状~と定義されている」事にはならんだろ。
コレで話が通じてなかったらどうにもならん。
302:デフォルトの名無しさん
13/09/04 14:35:03.70
お前が言うな
303:デフォルトの名無しさん
13/09/04 18:17:22.98
近頃のエンジンは再帰を末尾最適化してくれるらしいんだけど
その最適化がどういうコードならできて、どういうコードなら妨害してしまうのか知りたい
自分たまにボードゲーム作るんだけど、
そっちではスタックオーバーフロー見なくなったけど
ちょっとしたフィボナッチで起こったりするし
まあコードの書き方が悪いんだろうけど
304:デフォルトの名無しさん
13/09/04 21:53:05.57
ES6のArrayTypeってパフォーマンスのいい多重配列が定義できるってのはわかるんだけど、
単配列としてもアクセスできるってことなんだろうか?
var Uint8_10x10Array = new ArrayType(new ArrayType(uint8, 10), 10)
var arr = new Uint8_10x10Array()
arr[2][3] = 50
Uint8_10x10Array.storage(arr).buffer[2*10+3] //50??
305:デフォルトの名無しさん
13/09/04 22:55:04.77
ES6サポート遅いな……
privateとか今年中に実装されんのかな
306:デフォルトの名無しさん
13/09/05 00:37:56.08
再来月ラストコールなのに
中身の無い項目のあるドラフトとか、議論内容見てると非常に不安になってくる
307:デフォルトの名無しさん
13/09/05 09:28:25.95
5.1thの和訳ってないんですか?
308:デフォルトの名無しさん
13/09/05 12:48:00.89
変に英文キーワードの混じった和訳のほうが読みにくいと思うよ
309:デフォルトの名無しさん
13/09/05 15:35:31.71
>>307
一応ある(もちろん非公式・未保証)
忍者規制でURL直書きできないんで↓で:
www.webzoit.net/hp/it/internet/homepage/script/ecmascript/ecma262_51/
310:デフォルトの名無しさん
13/09/06 01:32:40.32
一日ぶりに来て伸びてるかと思えばなんだこれ。
>>290=298=301
あんた誰だよ。
ついでに言うとVOは名前だけEnvironment Record Specification Typesに変わってるぞ.
>>305
privateてdraft落ちてなかったっけ?
symbolがユーザー定義できなくなっただろ。
311:デフォルトの名無しさん
13/09/06 01:58:18.29
間違いなく採用はされる、Symbolとprivateをどうまとめるかの議論がもっと必要そうなだけ。
でもES7にしようとは誰も思ってないと思う。
HTMLのように1年毎くらいでES6.1、6.2と出る可能性がかなり高いかもしれない。
312:デフォルトの名無しさん
13/09/06 03:31:25.49
>>310
ユーザー定義は出来るのでは
URLリンク(wiki.ecmascript.org)
URLリンク(wiki.ecmascript.org)
313:デフォルトの名無しさん
13/09/06 07:05:18.48
>>312
それharmony、古い。draftが出てる。
Symbolまわりは今グドグドやっててworking draftに入ったり外れたりしてる。
314:デフォルトの名無しさん
13/09/06 07:53:24.88
>>313だが知らんと分かりづらいな。
harmonyで提案された中から選別されてdraftになる。それが↓のCurrent Working Draftのpdfの仕様書。
URLリンク(wiki.ecmascript.org)
この仕様も最新の議論が反映されてるわけじゃない。wikiは古いのも新しいのも関係なくページを残してるからそれが仕様になるとは限らんよ。
んで、だいたいharmonyの中身はes6に、漏れたのとstrawmanがes7に行く形。value objectみたいに。
基本es6はjavascript1.8.5の改良、es7はそれより上だからes7が出て初めて未来と遭遇するわけ。
315:デフォルトの名無しさん
13/09/06 09:26:15.18
>>314
いや、今のドラフトに乗ってないことなんて百も承知なんだけど。
そうは言ってもV8には既に仮実装されてるし、早期に採用される可能性が高い。
むしろされない理由がない。話し合いが足らないだけで採用する方向では合意取れてるんだし。
この頃は機能も増えて各進行度もバラバラドラフトだけじゃ追い切れないよ。
ちゃんとコミュニティの情勢も読まなきゃ。
316:デフォルトの名無しさん
13/09/06 10:33:10.17
ES.nextという言葉が使われだしてからもう実質Living Standardになってる
合意が取れてもドラフトに載せられるまでまとめるのが間に合わなくなりつつあるしあてにはできない
317:デフォルトの名無しさん
13/09/06 13:06:46.25
「あーこりゃ仕様に目が眩んで現実が見えてない」ってやつか
318:デフォルトの名無しさん
13/09/06 20:12:36.57
Number.MAX_SAFE_INTEGERとか
2^53±1のどの値にするかやプロパティ名になにが適切かが
決まるだけでもだいぶかかったしな
319:デフォルトの名無しさん
13/09/06 21:36:06.53
昨今一番もてはやされてるかもしれない言語が
十年ぶりに大きく変わろうとしているのに
この過疎りようはどうにかならんのかねぇ
320:デフォルトの名無しさん
13/09/06 22:43:40.90
ここ本スレじゃねぇし。
誰もECMAScriptなんて呼ばねぇよ。
321:デフォルトの名無しさん
13/09/06 23:06:35.21
ここよりも盛り上がってる本スレが存在するとな!?
是非教えてもらいたいw
322:デフォルトの名無しさん
13/09/07 00:22:32.33
JavaScriptで検索ぐらいしようよw
323:デフォルトの名無しさん
13/09/07 07:53:44.82
URLリンク(gaslight.co)
3年くらい遅くねぇか…
324:デフォルトの名無しさん
13/09/07 13:04:21.73
今まではその役割も兼ねてきたがこれからはTypeScriptって言われてる
325:デフォルトの名無しさん
13/09/07 14:41:13.54
JavaScriptで検索してもここよりもスレNo少なくて最近の書き込み数も劣ってるスレしか見つからんな
326:デフォルトの名無しさん
13/09/07 18:47:43.00
2ch全体ならWeb制作版の質問スレが一番賑わってるかね
327:デフォルトの名無しさん
13/09/07 19:00:27.22
それを言うのなら、
ウェブプログラム版じゃね?
なんでプログラム板と分かれてるのか知らないけど
328:デフォルトの名無しさん
13/09/07 19:01:26.63
いやWeb制作版だよ。
桁違いすぎるw
+ JavaScript の質問用スレッド vol.108 +
スレリンク(hp板)
329:デフォルトの名無しさん
13/09/07 20:47:44.93
屁理屈乙
そこ質問スレだから
俺も仕方ないから底で議論したりしてるけど
本来NGだから
330:デフォルトの名無しさん
13/09/07 23:24:39.01
[JavaScript] スクリプト言語34 [Perl,Python,PHP]
スレリンク(tech板)
これじゃないの?
331:デフォルトの名無しさん
13/09/08 00:21:12.67
そこは元JSerの隔離スレの残り
JSerとの衝突で一時スレが喧嘩分裂した
今は収まってて本スレはこっち
【PHP,Python】スクリプト,バトルロワイヤル37【Perl,Ruby,JS】
スレリンク(tech板)
332:デフォルトの名無しさん
13/09/08 01:05:07.84
今月のミーティングでは細かくはあるけど非常によく使う部分に関わる重要な部分が決まるみたいだな
333:デフォルトの名無しさん
13/09/08 01:54:36.00
ジェネレーター周りはこれで変更無さそう
URLリンク(domenic.me)
334:デフォルトの名無しさん
13/09/10 13:52:57.70
ES5の非常に秀逸な記事を見つけた。
このレベルは中々無い。
URLリンク(constellation.hatenablog.com)
335:デフォルトの名無しさん
13/09/11 00:05:34.67
多分unique symbols/private namesはES6に間に合って
どちらもユーザー定義出来ると思う
336:デフォルトの名無しさん
13/09/14 02:23:58.45
>>334
記述子使ったことない奴向けだな
337:デフォルトの名無しさん
13/09/16 23:03:46.05
ES6のオブジェクトリテラルは面白いな
URLリンク(wiki.ecmascript.org)
338:デフォルトの名無しさん
13/09/17 04:47:04.56
<| とか妙な記号の並び使うのはどうなのよ
339:デフォルトの名無しさん
13/09/17 12:09:02.13
obj = { a: 1 }
obj.= { b: 2 }
obj //{ a: 1, b: 2 }
が欲しい
340:デフォルトの名無しさん
13/09/17 14:46:47.01
演算子も1つじゃ足りなかったら、オーバーライドしなくても2つ3つと組み合わせればいくらでも作れるのね
そう言えば細菌は主にsortで使う、-1,0,1を返す<=>演算子が提案されてたね
341:デフォルトの名無しさん
13/09/17 14:54:12.59
んなもん大昔からPerlにあるわけだが
342:デフォルトの名無しさん
13/09/17 22:38:41.72
harmony:proposalsのページ情報がくっそ古くて役たたねえな
配列内包は
[ x for (x of a) if (x.color === ‘blue’) ]
[ square(x) for (x of [1,2,3,4,5]) ]
[ [i,j] for (i of rows) for (j of columns) ]
じゃなくて今はこうだろ
[ for (x of a) if (x.color === ‘blue’) x ]
[ for (x of [1,2,3,4,5]) square(x) ]
[ for (i of rows) for (j of columns) [i,j] ]
URLリンク(wiki.ecmascript.org)
343:デフォルトの名無しさん
13/09/18 01:48:14.19
for ofはfor each inでよかったのにって思ってるのは俺だけか?
E4Xから取り込んでソースコード互換を残して欲しかった。
344:デフォルトの名無しさん
13/09/18 02:20:20.06
for-each-inはfor-inと同様にプロトイプも辿る
配列にも安全に使えないぽっと出のポンコツ内部イテレータもどきだったでしょ
for-ofは正真正銘の外部イテレータでES6の中核機能
月とすっぽんくらい、ほんとに全然違う
JSは汎用的な言語だからE4XはES標準に組み込まれるまではいかないだろう
345:デフォルトの名無しさん
13/09/18 02:38:35.03
E4Xはこれで我慢して
URLリンク(wiki.ecmascript.org)
document.body.appendChild(dom`<span>${message}</span>`)
とか可能だと思う
346:デフォルトの名無しさん
13/09/18 06:52:13.60
これ楽しみにしてたのに否決されたらショックだ……
URLリンク(twitter.com)
347:デフォルトの名無しさん
13/09/18 21:46:30.03
URLリンク(www.youtube.com)
348:デフォルトの名無しさん
13/09/19 00:00:30.00
URLリンク(www.youtube.com)
349:デフォルトの名無しさん
13/09/19 00:07:13.85
URLリンク(www.youtube.com)
350:デフォルトの名無しさん
13/09/19 02:15:58.26
>>344
いやいや、シンタックスをfor each inにしてセマンティックスをfor ofにしてくれって意味。
351:デフォルトの名無しさん
13/09/19 02:40:51.35
動作が違うんだからソース互換守れないじゃん
何いってんのよ
352:デフォルトの名無しさん
13/09/19 03:36:17.94
<お知らせ>
このスレの住民が引っ越してきます
スレリンク(tech板)
353:デフォルトの名無しさん
13/09/19 14:12:57.57
DOMWorkerのTransferable objectsの仕組みをJSコアでサポートすることにより、
Workerの自由度と、将来のWorkerLikeな機能の可能性が格段に増す。
URLリンク(wiki.ecmascript.org)
これと同系統な仕様で、ES7期待の星のParallels
URLリンク(wiki.ecmascript.org)
354:デフォルトの名無しさん
13/09/19 16:46:08.91
ES6だと念願(?)だった配列のクローンがこんな簡単にできるのな。
a1 = [1,2,3,2,1]
a2 = [...a1] //[1,2,3,2,1]
でも現状のドラフトの仕様だとこれは配列にしか適応できない?
ここでも挙がってるがFirefoxの実装のようにいてレートしてくれる方がいいのにな。
URLリンク(esdiscuss.org)
そしたらこんな使い方もできるのに。
a3 = [...new Set(a1)] //[1,2,3] 重複排除
m1 = new Map()
m2 = new Map([...m1]) //Mapのクローン
355:デフォルトの名無しさん
13/09/19 17:54:56.39
このスレ過疎り気味だけど
お陰で最初の方を見るとES4の分析がいろいろされてて面白いな
ES6は時間を書けるだけのものになったのか、
また行き過ぎてないかを考えるのにちょうどいい
356:デフォルトの名無しさん
13/09/19 21:08:28.43
>>354
> ES6だと念願(?)だった配列のクローンがこんな簡単にできるのな。
え? 適当なライブラリの関数使えば、
今でも簡単にできるんじゃね?
357:デフォルトの名無しさん
13/09/19 21:30:18.63
たかが配列のコピーに何でライブラリ入れなきゃいけないんだってことだろjk
358:デフォルトの名無しさん
13/09/19 21:34:46.29
配列のコピーだけでプログラムが終わることなんて無いだろ?
ライブラリを入れるだけで、配列のコピー以外も含めて圧倒的に生産性が上がる。
目的と手段を履き違えてないか?
359:デフォルトの名無しさん
13/09/19 21:52:32.75
まあ今の仕様だと多重配列にはsliceと同じ問題があるけど
arr.slice()よりはカッコイイって事だな
イテレータブルなのを全部展開してくれれば
多重配列も一発クローンできるのにね
まあそれでもES6なら多重配列のコピーが従来よりも簡単に、且つ正確に定義できる
Array.clone = (...a) => a.map((v) => Array.isArray(v) ? Array.clone(...v) : v);
var arr2 = Array.clone(arr1);
>>358
流石にその発言はないわ
360:デフォルトの名無しさん
13/09/19 21:53:39.71
cloneするのに一番わかり易い文法って知ってるか?
b = clone(a)
これだよ?
361:デフォルトの名無しさん
13/09/19 22:02:21.42
関数オーバーライドが出来ないんだからそれはない
362:デフォルトの名無しさん
13/09/19 22:04:43.18
>>359より短く書けたw
更に古いブラウザにまで対応。
最強じゃね?
var _ = require('lodash');
var arr2 = _.clone(arr1);
363:デフォルトの名無しさん
13/09/19 22:14:44.01
お前がそう思うんならそうなんだろう、お前の中ではな
364:デフォルトの名無しさん
13/09/19 22:19:46.43
JavaScriptスレから移住してきた人にはスマンが
ここは標準仕様をメインで語るスレなのよ
ライブラリの話禁止というわけではないが
そういう話の流れじゃそもそもないのよな
365:デフォルトの名無しさん
13/09/19 22:21:49.57
Array.isArrayがないと別コンテキストのオブジェクトが本当にArrayか見分けるのは難しいんじゃないか?
366:デフォルトの名無しさん
13/09/19 22:28:43.54
>>359よりこっちの方が良かった
Array.clone = x => Array.isArray(x) ? x.map(Array.clone) : x;
367:デフォルトの名無しさん
13/09/20 00:41:52.37
URLリンク(speakerdeck.com)
368:デフォルトの名無しさん
13/09/20 10:58:34.35
URLリンク(stackoverflow.com)
なんか悪いんだろうなぁ…とは思うんだけど
何が悪いんだろうなぁまではよくわからん
そういうのが多すぎる…
369:デフォルトの名無しさん
13/09/20 12:16:50.61
TC39勢力
30% コミュニティの流れに関わる
15% 基礎構文や仕様の流れに関わる
Mozilla
35% 仕様の具体的な部分に関わる
Microsoft, Apple, Intel, jQuery
20% 専門的な仕様の詳細に関わる
その他凄い人、偉い人
370:デフォルトの名無しさん
13/09/20 14:47:21.10
TC39 3大勢力
1/3 【ハンドル・ブレーキ】
Webを牛耳る者として、三人称視点で情報や意見を提供する、情報・管理係
1/3 【エンジン・アクセル】
早期実装者及び専門家として、一人称視点で仕様を策定する、規格・運用係
Mozilla, その他凄い人、偉い人
1/3 【モーター・ギア】
企業団体として、ニ人称視点であれこれ注文する、文句・要求係
Microsoft, Apple, Intel, jQuery