最近のJavaScript状況メモ

すっかり最近の動向に疎くなってたので、いまさらながらメモ。
IEOperaの追従状況が気になるところ。

JavaScript 1.7

リストの分割代入が出来るようになってる。

[a, b] = f() というコマンドは、関数の返り値を角カッコ中の変数に順番に代入します。

http://developer.mozilla.org/ja/docs/New_in_JavaScript_1.7

Operaでの対応状況はこちら。たしかにvarをつけると動かないのは痛い。

Operaで分割代入

http://orera.g.hatena.ne.jp/misttrap/20070303/p1

JavaScript 1.8

もういちいちreturnを書かなくてもいい。

function(x) x * x
この構文を使うことによって、中括弧と 'return' 文を省くことができます(それらは暗黙的に補われます)。

http://developer.mozilla.org/ja/docs/New_in_JavaScript_1.8

ブラウザとバージョンの対応

JavaScript と Navigator のバージョン

http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Guide:About

New in JavaScript 1.xのリンクもここにあり(1.5?1.8)

JavaScript ブラウザ
1.0 Navigator 2.0
1.1 Navigator 3.0
1.2 Navigator 4.0
1.3 Navigator 4.06
1.4
1.5 Firefox 1.0
1.6 Firefox 1.5
1.7 Firefox 2.0
1.8 Firefox 3.0

JavaScript 2.0

うーん、Javaみたいなクラスベースのかっちりした言語になっちゃうんだろうか…。

JavaScript 2.0 は JavaScript の進化における次期の主要なステップである。JavaScript 1.5 で既にあったものの他に JavaScript 2.0 は以下の機能を取り入れている:
* 静的及び動的なクラス定義構文
* 名前空間とバージョン管理機構を含むパッケージ
* プラグラムやインターフェイス記述のための型
* const や final のような不変値の宣言
* private 、internal 、public 、及びユーザ定義のアクセス制御
* 他のプログラミング言語とのより正確なコミュニケーションを行うための int などのマシン型

http://www.mozilla-japan.org/js/language/js20/introduction/index.html

ECMAScript4は厳密にも書けるが、型なしのいい加減コーディングの手段も残されているようだ。
それならいいかも(←すでにいい加減コーディングしか考えてないやつ)

ECMAScript 4 の Draft をざっくり読んでみた - てっく煮ブログ
型を厳密に宣言すれば、実行時じゃなく実行前型チェックができるので処理が高速になる。他にも、int, uint, double といった値は高速演算できる、Vector(後述)を使えば Array のオーバーヘッドを削減できる、といったメリットも。
もちろん、型なしのいい加減コーディングもできる。ライブラリでは厳密にコーディングして高速化を図り、ちょっとしたコードはいい加減に書いてコーディング時間の削減を狙う、といった使い分けもできるようだ。

http://d.hatena.ne.jp/nitoyon/20071030/es4_overview

厳密モードがseald classで、いい加減モードがdynamic class?

ActionScript for JavaScript(er).
dynamic class じゃないと
* オブジェクトをハッシュとして扱うことができない
* プロパティの追加ができない
* strict の場合は prototype にもアクセスできない
* dynamic class の反対は sealed class

http://amachang.art-code.org/usrb.in/amachang/static/shibuyaes/

ECMAScriptのeditionと各言語実装の関係はだいたいこんな感じ?

ECMAScript 3 JavaScript 1.x ActionScript 1,2 JScript
ECMAScript 4 JavaScript 2.x ActionScript 3 JScript.NET