[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 03/07 01:59 / Filesize : 110 KB / Number-of Response : 495
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ECMAScript デス 3



1 名前:デフォルトの名無しさん [2007/09/19(水) 09:08:01 ]
《ECMAScriptを語るスレ》

1. - 概要 -
ECMA-262規格として知られる言語(通称 ECMAScript)についての利用法や言語仕様、
その他四方山話をするスレです。
- ECMA-262 3rd Edition 標準規格(英語)-
www.ecma-international.org/publications/standards/Ecma-262.htm
Under Translation of ECMA-262 3rd Edition (日本語訳)
www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/


前スレ
ECMAScript デス 2
pc11.2ch.net/test/read.cgi/tech/1088298991/

過去スレ
JavaScript デス
pc5.2ch.net/test/read.cgi/tech/1052273054/


413 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:30:48 ]
いきなりだけど || 演算子のハナシ。

function foo(s){
s = s || 'default string';
...
}

みたいな記述をたまに見かけるんだけど、これ問題ない?
s が単に true になっちゃう処理系があってもおかしくない気がするんだけど。

function foo(s){
s = s==undefined ? 'default string' : s;
...
}

ってこれまで書いてたんだけど、上の例のほうが短いし、慣れれば読みやすい気もする。
ただ数値の場合は 0 渡したいときに困るかね?

414 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:34:38 ]
ECMA262より

The production LogicalORExpression : LogicalORExpression || LogicalANDExpression is
evaluated as follows:
1. Evaluate LogicalORExpression.
2. Call GetValue(Result(1)).
3. Call ToBoolean(Result(2)).
4. If Result(3) is true, return Result(2).
5. Evaluate LogicalANDExpression.
6. Call GetValue(Result(5)).
7. Return Result(6).
(中略)
NOTE
The value produced by a && or || operator is not necessarily of type Boolean.
The value produced will always be the value of one of the two operand expressions.


415 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 03:50:28 ]
たまにどころかprototype.jsはじめそこら中で使われてるべ?
むしろundefinedと==で比較する方がやばくね?

416 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 04:51:27 ]
> s が単に true になっちゃう処理系があってもおかしくない気がするんだけど。

つまり、undefinedがbooleanとしてtrueに扱われる処理系ってこと?
それはない。

417 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 07:47:38 ]
9.2 ToBoolean
The operator ToBoolean converts its argument to a value of type Boolean
according to the following table:

InputType Result
Undefined false
(略)

おまけに、
> 4. If Result(3) is true, return Result(2).

return Result(3)ではない。


418 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 07:52:22 ]
>>415
> むしろundefinedと==で比較する方がやばくね?

やばくないです。長いので省略しますが、11.9.1と11.9.3です。

419 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 08:17:29 ]
>>413
||は、true/falseじゃなく、元の値を返すという言語仕様だから、大丈夫。

420 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:59:10 ]
>>418
argument.length でチェックしないと意味が変わるでしょ
foo が何をする関数なのかにもよるけど 'default string' なら >>413 の後者は「間違い」

421 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 11:23:51 ]
言いたいことは一度に言って欲しいな



422 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 18:33:03 ]
>>418
引数のsはnullかもしれないし、falseかもしれないだろ。ダメじゃん。

423 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:14:58 ]
x64でうごくやつってないものか

424 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:29:09 ]
Rhino

425 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:59:35 ]
413 です、フォローありがとう。

今日、仕事帰りに本屋寄ったら、このスレでお勧めのサイ本売ってて、買ってきたよ。
古い本だと思ってたし、4200円と高いのでスルーしてた。

|| の仕様についてちゃんと載ってたよ。
何冊か入門書読んだけど、単なる論理ORだと思ってたが、違ったんだな。

ただ "" が false に型変換されるって記述もあったので、"" を与えたい場合には
やっぱり今までどおり

 s = s==undefined ? "default string" : s;

が良い気がしたよ。ただそれ以外では

 s = s || "default string";

って記述もアリなんだな。いやぁ、面白いわ。

ちなみに俺ってIE4, NS4 の頃あたりに一度、JavaScript やってた人なんだわ。
v1.2 までは || が ture になっちまうってサイ本にあって、俺の記憶と一致した。

この週末、頑張ってサイ本読むわ。

426 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:02:35 ]
>>418

いちおう s===undefinded にしなかったのは、s==undefined だと s==null のときにも反応してくれるから。
これは昔から一緒って言うか、定番の書き方だと俺の灰色の脳細胞に残ってた。

っていうか、サイ本、読んでておもしれーな。

427 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:08:57 ]
サイ本って新版でただろ

428 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:43:00 ]
まぢ? >>427

金曜夜の焼き鳥を諦め、その金で買ってきたのは第5版ってやつなんだが・・・

429 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:47:53 ]
>>428
それで大丈夫よ。427は
> 古い本だと思ってた
にひっかかって注意してくれたんじゃないかな。

焼き鳥で腹を膨らませるよりもよかったと思えることを願っているよ。

430 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:48:06 ]
www.oreilly.co.jp/books/9784873113296/
第5版出たのは去年だがそれが最新。第3版なら古いけど。

431 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:08:45 ]
>>429-430 ありがと、安心した。

読破したら、美味しい焼き鳥で自分を祝っちゃる!



432 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 15:51:19 ]
'aaaggfeeeehhh'.split(/(?=(.)\1*)/);

IE6:    a,a,a,g,g,f,e,e,e,e,h,h,h
Firefox3: a,a,a,a,a,g,g,g,g,f,f,e,e,e,e,e,e,e,e,h,h,h,h,h,h,h
Chrome: a,a,a,a,a,g,g,g,g,f,f,e,e,e,e,e,e,e,e,h,h,h,h,h,h

どれが正しいんですか?

433 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:41:54 ]
みんなちがって、みんないい。

434 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:49:23 ]
>>432
ほれ、www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-5_String_Objects.html#section-15.5.4.14
そういう時は自分の手で動かしてみるんだ

ちなみに俺が 'aahh'.split(/(?=(.)\1*)/) を自分の手で動かしてみたところ、
a,a,a,h,h,h,h となるのが正解という結論に達した

435 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 18:27:22 ]
>>434
ありがとうございます
1行ずつ解釈していったところ、どうやら同じ結果になったようです
つまりChromeが確かにECMA準拠ということですね・・・
うむむ、勉強になりました

436 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 09:33:07 ]
rhino: a,a,a,h,h,h,h
tamarin: aahh


437 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:21:03 ]
この辺の話になるのかなぁ
bugs.ecmascript.org/ticket/376
[RegExp: Change behavior for backreferences to non-participating groups]

web-graphics.com/2007/09/05/a-quick-js-quizz-for-anybody-who-think-they-know-regex/
web-graphics.com/2007/11/26/ecmascript-3-regular-expressions-a-specification-that-doesnt-make-sense/
https://mail.mozilla.org/pipermail/es-discuss/2007-September/thread.html#4513
https://mail.mozilla.org/pipermail/es-discuss/2007-September/thread.html#4574
https://mail.mozilla.org/pipermail/es-discuss/2008-September/thread.html#7355

438 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:51:29 ]
そこんとこ3.1は今のところ3.0のまま。


439 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 15:24:51 ]
>>436
ちょw tamarin!

tamarinってもうSpiderMonkeyにマージされてんの?


440 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:04:29 ]
spidermonkey: a,a,a,h,h,h,h,h

441 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:09:13 ]
kjsembed(KDE): a,a,h,h



442 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:14:42 ]
v8: a,a,a,h,h,h,h


443 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 17:03:08 ]
IE/Tamarin/kjsembedはキャプチャ括弧の内容を追加してないんだろうけど
SpiderMonkeyがhを余分に出すのが謎だな

444 名前:こりゃたまらん! mailto:sage [2008/10/06(月) 17:25:01 ]
>>443
tamarin> 'aahh'.split(/(?=(.)\1*)/)
aahh
tamarin> print('aahh')
aahh
tamarin> 'aahh'
aahh



445 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 17:37:28 ]
>>439
>>370 >>375 >>380

446 名前:443 mailto:sage [2008/10/06(月) 18:28:15 ]
>>444
あ、すまん、まったく分割されてないのね。カンマを脳内補完してた
Tamarin環境がないんだけど['a', 'a', 'h', 'h']ならa,a,h,hと出るんだよね?

447 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:17:53 ]
tamarin> ['1','2','3','4']
1,2,3,4


448 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:56:53 ]
タマランw

449 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:33:15 ]
PerlとRubyはv8と一緒だねぇ。
Pythonは分割してくれなかった。


450 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:26:21 ]
なんでjsの正規表現エンジンって独自なんだろう?って所まで遡るわけか

451 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:41:05 ]
正規表現の拡張は許されてるんだから
WebKitとかPCRE使うならPCREの機能フルに提供しろよって感じだな



452 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:16:32 ]
rubyの正規表現は鬼車だっけ

453 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:12:21 ]
PCREは仕様が結構変わるし、
PCREのまんまって仕様は難しいと思う。
今でもブラウザ依存が問題になっているのに。

それから、マッチに失敗した時は、空の配列を返せばいいのに…

454 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:30:25 ]
import pcre.*;
出来るようにならないかなあ。

455 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:04:55 ]
名前空間ってアボーンしたんじゃなかったけ?

456 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 16:01:35 ]
import pcre;でいいよ、もう。

457 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 17:35:46 ]
C++0xのregexがECMAScriptの仕様を参照しているから、
こっちが変わったら向こうにも影響するかも。

458 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:12:10 ]
正規表現で?<が使えるようにならないかな

459 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:40:48 ]
>>457
なんでよりによって?混乱すると思うんだが

460 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:47:41 ]
いっそSNOBOLとかIconを標準ライブラリに含めればいいんだよ。
javaあたりがやりそうで怖いけどなw

461 名前:not 457 mailto:sage [2008/10/09(木) 01:09:33 ]
>>459
正規表現文法は数タイプ実装され、フラグで切り替えられて、
そのsyntax_option_typeの中にECMAScriptというのがある。
ただECMA282と明記された上で、さらなる改変部分も明記されているので、
大きな混乱は生じないんじゃないか。

ECMAScriptの仕様でも、もし挙動を変えるとすれば、
互換モードを付けることになるんじゃないかな。



462 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 15:20:15 ]
262-3rd の 7 節を今ごろ読んでるんだけど、
lex レベルで InputElementDiv と InputElementRegExp のどちらを使うべき文脈か
なんてのは簡単に決められるの?結局きちんとパーズしないと駄目?

463 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:39:15 ]
文脈自由文法とかチョムスキー標準形とか分かりますか?

464 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:31:11 ]
V8からOpenOfficeのUNOに接続できたら汎用言語になる?

465 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:33:04 ]
今でも十分に汎用だよ。

466 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:35:59 ]
Rhinoな俺にはバックのjavaのライブラリが膨大すぎるんだがw
LiveConnect最高だ。

467 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:57:21 ]
>>464
やれやれー

468 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:40:22 ]
>>406
ES3.1はグローバルな名前空間一つしか用意しないで、
moduleを導入するみたい。elispやschemeのように。

>>399のような難しい話じゃないみたい。
とにかく仕様を整理しないといけないから、
構文も意味も全くいじらないで3.1を出す。
いじるのは4で入れる。

ただしコンパイル環境と実行環境でそろえないとまずいもの、
静的型チェック、名前空間などは入れたくないということらしい。
ejohn.org/blog/ecmascript-harmony/#comments

まあ、静的型チェック、名前空間があろうがなかろうが、
プログラムを書いている時と実行している時の
モジュールの仕様が変わったら、問題は出るはずなんだけど。
それを起こさないためのドメイン名風階層名前空間と
バージョン管理なんだから。


469 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:09:19 ]
>>468
ES3.1 draft に module 関係の言及はないと思うけど…後はいいけど。

470 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:40:47 ]
え? elisp にモジュール入るの?

471 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:56:07 ]
そういえばActionMonkeyが取りやめになったって、
MozillaがTamarinのGCを使うとかいってたのはどうなったの?
TraceMonkeyのGCはSpiderMonkeyのままなの?



472 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:39:11 ]
>>471
Mozilla Developer Conference 2008 で講演してた浅井さん曰く、
Tamarin の GC 取り込みはやる予定だが Fx 3.1 (Gecko 1.9.1) には入らないんだとさ

Fx 3.2 とか Fx 4 以降になるんじゃないかっていう話だったと思う
詳しく覚えてる人いたら詳細求む

473 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:17:01 ]
Tracing JITも同時に入れるって話じゃなかった?

tamarinのソースを少し読んだがあまりの汚さに驚愕。
入れるの取り止めになって正解。
あまりのことにMozilla弱体化の陰謀かと思ったよ。
Action Scriptの仕様は結構好きなんだが。

474 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:05:33 ]
>>471
https://wiki.mozilla.org/XPCOMGC
hg.mozilla.org/users/bsmedberg_mozilla.com/gcmonkey
steps.dodgson.org/?date=20081012

475 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 12:51:48 ]
3.1にObject.seal()入るんだ。freeze()も。
よかった。

476 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 05:15:49 ]
前方互換が無くなるだけで不要な機能だろ
無用な方言を増やすだけの概念

477 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 09:13:33 ]
class, moduleその他、
動的に変って欲しくないオブジェクトのために必要なんだよ。

478 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 22:17:26 ]
seal も freeze も、Object.defineProperty の糖衣構文だと思う

やってることは「内部プロパティを変更」という点で共通してる
あるととっても便利(特に [[Enumerable]] の変更)

479 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 03:15:50 ]
便利かどうかなんて訊いた覚えはないがありがとう。
>“前方互換が無くなるので不要な機能”
forEach とかクラスメソッドは 3.0 でも Array や prototype を事前に拡張することで対応できる。
しかし Object.defineProperty は?
IE6 と IE7 で動かすためには __*** とか適当なプロパティ作って、
forEach をそれを見るような実装で上書きするような実装しか今俺には思い浮かばない。
とここまで forEach がある Array ならいいが
Object には Enumerable 関数は考えられてない(アホだよな)から
for in に対応できるような実装は不可能。

4.0 から 3.1 にした意味は?中の人は何も学習してないんだろうか。

480 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 11:32:42 ]
>>478
seal, freezeに関しては、
重要なのは提供方法ではなく、
・Objectが[[extensible]]でなくなる
・propertyが[[flexible]]、[[writable]]でなくなる
そのための方法があること。
これでライブラリー内部のエラー処理がずいぶんと楽になる。
ライブラリーユーザ側のデバッグも。

[[enumerable]]に関しては、
今のままではdirty hackの巣窟になりそうで、
何とかしないといけないとは思うけど、
前方互換の問題があるから慎重にやるべきだと思う。
特にメタな仕組みを持つライブラリに影響が大。
for in抽象はもうちょっとうまく整理するやり方があったと思う。
Javaのcontrol invacation syntaxみたいな。

481 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 02:52:09 ]
Object.forEach みたいな関数が出てきたとして、
Object はルート要素なんだから、全てのオブジェクトに forEach が無いとおかしい罠。
元はと言えば Object をハッシュのように使った“慣習”のツケなんだけど…



482 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 09:28:53 ]
>>481
> 元はと言えば Object をハッシュのように使った“慣習”のツケなんだけど…
kwsk

実装自体は連想配列なのに、使ってはならない理由があったの?


483 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 10:03:02 ]
Array のようにちゃんとデータ型として規定されてれば、
メソッドやプロパティの名前空間とぶつかるような実装にはならなかっただろうし、
enumerable のアリナシに四苦八苦することも少なかっただろうって話

484 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 10:44:37 ]
要はHashとかDictionaryとかいう型を別に作っておけばよかったということだな
中身はObjectとまったく一緒でいいけど

485 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 10:53:50 ]
特殊な組み込み型を用意するんじゃなくて、
そういうものを実装できる機構があればいい。

[[enumerable]]に関しては、
>>481の言うようにforEachはどのObjectも持つようにして、
for inはforEachメソッドを呼び出すように再整理するのがいいと思う。

Property attributeによる整理で基本的にはうまくいっている。

486 名前:482 mailto:sage [2008/11/25(火) 12:16:11 ]
thx

> 要はHashとかDictionaryとかいう型を別に作っておけばよかったということだな
言われてみれば激しく同意だなー


487 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 18:04:15 ]
>>484
そうすると、ESのESたる特徴がなくなってしまいますな。
つーか、それ、何のJavaの亜流?って感じになっちまう。実際なりそうだけど。 orz

488 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 09:44:23 ]
ボタンAを押すと自動的にボタンBを押すスクリプトはどう書けばよろしいのでしょうか?

489 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 11:06:05 ]
>>488
click()
たぶんスレ違いだからJavaScriptスレ池

490 名前:488 mailto:sage [2008/11/26(水) 13:36:50 ]
いえ、ecmaです。
よろしくお願いします

491 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 13:45:27 ]
ECMAScriptの仕様にボタンはない



492 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 17:09:54 ]
>>488
スレ違

たぶんこっち↓
+ JavaScript の質問用スレッド vol.67 +
pc11.2ch.net/test/read.cgi/hp/1223618153/

493 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:30:20 ]
> for in抽象はもうちょっとうまく整理するやり方があったと思う。
> Javaのcontrol invacation syntaxみたいな。

> for inはforEachメソッドを呼び出すように再整理するのがいいと思う。
旧 ES4 だと iterator::values() iterator::items() iterator::keys()
とか提案されてたが、ボツったわけでどーすんのやら。
wiki.ecmascript.org/doku.php?id=proposals:iterators_and_generators

494 名前:488 mailto:sage [2008/11/27(木) 12:19:04 ]
ありがとうございます。
行ってみます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<110KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef