From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- .../ecmascript_5_support_in_mozilla/index.html | 43 -- .../ecmascript_6_support_in_mozilla/index.html | 276 ------- .../guide/liveconnect_overview/index.html | 799 --------------------- .../javascript/new_in_javascript/1.1/index.html | 74 -- .../javascript/new_in_javascript/1.2/index.html | 92 --- .../javascript/new_in_javascript/1.3/index.html | 153 ---- .../javascript/new_in_javascript/1.4/index.html | 28 - .../javascript/new_in_javascript/1.5/index.html | 42 -- .../javascript/new_in_javascript/1.6/index.html | 79 -- .../javascript/new_in_javascript/1.7/index.html | 558 -------------- .../javascript/new_in_javascript/1.8.1/index.html | 34 - .../javascript/new_in_javascript/1.8.5/index.html | 143 ---- .../javascript/new_in_javascript/1.8/index.html | 123 ---- .../ja/web/javascript/new_in_javascript/index.html | 78 -- .../functions/arguments/caller/index.html | 56 -- .../global_objects/array/observe/index.html | 89 --- .../global_objects/array/unobserve/index.html | 134 ---- .../global_objects/arraybuffer/transfer/index.html | 126 ---- .../reference/global_objects/iterator/index.html | 95 --- .../global_objects/object/count/index.html | 44 -- .../global_objects/parallelarray/index.html | 59 -- .../global_objects/stopiteration/index.html | 66 -- .../global_objects/string/quote/index.html | 75 -- .../operators/array_comprehensions/index.html | 198 ----- .../operators/expression_closures/index.html | 76 -- .../operators/generator_comprehensions/index.html | 172 ----- .../reference/statements/for_each...in/index.html | 81 --- .../javascript/server-side_javascript/index.html | 11 - 28 files changed, 3804 deletions(-) delete mode 100644 files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html delete mode 100644 files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html delete mode 100644 files/ja/web/javascript/guide/liveconnect_overview/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.1/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.2/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.3/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.4/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.5/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.6/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.7/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.8.1/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.8.5/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/1.8/index.html delete mode 100644 files/ja/web/javascript/new_in_javascript/index.html delete mode 100644 files/ja/web/javascript/reference/functions/arguments/caller/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/array/observe/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/array/unobserve/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/iterator/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/object/count/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/parallelarray/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/stopiteration/index.html delete mode 100644 files/ja/web/javascript/reference/global_objects/string/quote/index.html delete mode 100644 files/ja/web/javascript/reference/operators/array_comprehensions/index.html delete mode 100644 files/ja/web/javascript/reference/operators/expression_closures/index.html delete mode 100644 files/ja/web/javascript/reference/operators/generator_comprehensions/index.html delete mode 100644 files/ja/web/javascript/reference/statements/for_each...in/index.html delete mode 100644 files/ja/web/javascript/server-side_javascript/index.html (limited to 'files/ja/web/javascript') diff --git a/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html b/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html deleted file mode 100644 index 9dfa1c7805..0000000000 --- a/files/ja/web/javascript/ecmascript_5_support_in_mozilla/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Mozilla における ECMAScript 5 のサポート -slug: Web/JavaScript/ECMAScript_5_support_in_Mozilla -tags: - - ECMAScript5 - - JavaScript -translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla ---- -

{{jsSidebar("New_in_JS")}}

- -

ECMAScript 5.1 は、JavaScript を元とした標準の最新版であり、2011年の6月に承認されました。

- -

Firefox や Thunderbird の両方に含まれており、Mozilla プロジェクトで使用されている JavaScript ランタイムでは、 ECMAScript 5.1 の機能が完全にサポートされています。この記事では、Mozilla の JavaScript ランタイムの異なるバージョン毎にサポートされている機能について取り扱います。

- -

すでにサポートされている機能

- -

JavaScript 1.8.5 (Gecko 2, Firefox 4) で追加された機能

- -

Firefox 4 では、Object.* に追加されたメソッドおよび strict mode が完全にサポートされています。New in JavaScript 1.8.5 を参照してください。

- -

JavaScript 1.8.1 (Gecko 1.9.1, Firefox 3.5) で追加された機能

- - - -

ECMAScript 5 によるレイアウトの改良は、特定の状況下において、JavaScript のコードをXHTMLとして評価するのを妨げる解析アルゴリズムとなりました。

- -

JavaScript 1.6 (Gecko 1.8, Firefox 1.5) で追加された機能

- -

Array の拡張 -- JavaScript 1.6 より Javascript の一部として、配列操作の方法の幾らか改良を提供するメソッドが追加されています。現在、それらのメソッドは ECMAScript 5 の一部として標準化されています。

- -

参考

- - diff --git a/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html b/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html deleted file mode 100644 index 191d95c3cc..0000000000 --- a/files/ja/web/javascript/ecmascript_6_support_in_mozilla/index.html +++ /dev/null @@ -1,276 +0,0 @@ ---- -title: Mozilla における ECMAScript 6 のサポート -slug: Web/JavaScript/ECMAScript_6_support_in_Mozilla -tags: - - ECMAScript6 - - JavaScript -translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_2015_support_in_Mozilla ---- -
{{jsSidebar("New_in_JS")}}
- -

ECMAScript 2015 (第 6 版) は、ECMAScript 言語標準仕様の現行バージョンです。一般的に "ES6" として参照され、Firefox や他の Mozilla アプリケーションで使用されているエンジンの SpiderMonkey における JavaScript 実装のための標準仕様を定義しています。

- -

"ES.next" または "harmony" のコードネームで呼称され、ECMAScript 5.1 を基にした最初のワーキングドラフトは、2011 年 7 月 12 日に "ES.next" として公開されました。2014 年 8 月に ECMAScript 6 仕様草案の機能追加が凍結され安定化とバグ修正の期間に入りました。最終的に、ECMA General Assembly によって ECMA-262 Edition 6 が公式に承認され、2015 年 6 月 17 日に標準仕様として発行されました。これは、国際工業規格の ISO/IEC 16262:2016 としても発行されます。

- -

標準仕様の PDF および HTML バージョンが ecma-international.org サイトで無料ダウンロード できます。

- -

ECMAScript 標準仕様へのフィードバックチャンネルは es-discuss です。

- -

Firefox で既にサポートされている機能

- -

以下の機能は Firefox に実装済みです。 () 内のバージョンは、その機能のサポートが追加されたバージョンを示しています。

- -

標準ライブラリ

- -

Array オブジェクトの追加機能

- - - -

新規オブジェクト MapSetWeakMapWeakSet

- - - -

Math の新たな関数

- - - -

Number オブジェクトの新機能

- - - -

Object オブジェクトの新機能

- - - -

Date オブジェクトの新機能

- - - -

新オブジェクト Promise

- - - -

新オブジェクト Proxy

- - - -

RegExp オブジェクトの新機能

- - - -

String オブジェクトの新機能

- - - -

新オブジェクト Symbol

- - - -

型付き配列

- -

型付き配列は ECMAScript 6 の一部として規定され、独自の仕様書を持つものではなくなりました。

- - - -

式と演算子

- - - -

- - - -

関数

- - - -

その他の機能

- - - -

ES6 仕様に従っていない機能

- -

以下の機能は (部分的に) Firefox に実装されていますが、ES6 仕様に従っていない機能です。これらには、2 つの理由があります。Firefox の実装が ES6 仕様の古い草案を基にしているか、Firefox の現在の実装が、ES6 仕様に追加される前の似たような実験的な設計になっていることです。

- - - -

関連情報

- - diff --git a/files/ja/web/javascript/guide/liveconnect_overview/index.html b/files/ja/web/javascript/guide/liveconnect_overview/index.html deleted file mode 100644 index 4deeca4ad2..0000000000 --- a/files/ja/web/javascript/guide/liveconnect_overview/index.html +++ /dev/null @@ -1,799 +0,0 @@ ---- -title: LiveConnect の概要 -slug: Web/JavaScript/Guide/LiveConnect_Overview -tags: - - Java - - JavaScript - - LiveConnect -translation_of: Archive/Web/LiveConnect/LiveConnect_Overview ---- -

この章では、Java のコードと JavaScript のコードが相互通信を可能にする技術である LiveConnect の使用方法を解説します。この章の読者は、Java プログラミングの経験があるものとします。

- -

ラッパの使用

- -

JavaScript において、ラッパとは元の言語のオブジェクトをくるんだ、ターゲットとする言語のデータ型のオブジェクトです。JavaScript でプログラミングをするときは、ラッパオブジェクトを用いることで Java のメソッドやフィールドにアクセスすることができます。つまり、ラッパのメソッドを呼び出したりプロパティにアクセスすることで、Java のオブジェクトにおいて呼び出すことになります。Java 側では JavaScript のオブジェクトがクラス netscape.javascript.JSObject のインスタンスでラップされ、Java に渡されます。

- -

JavaScript のオブジェクトが Java に送られる際、ランタイムエンジンは JSObject 型の Java ラッパを生成します。一方 JSObject が Java から JavaScript に送られるときは、ランタイムエンジンはそのラップを解き、元の JavaScript オブジェクトの種類に戻します。JSObject クラスには、JavaScript のメソッドを呼び出したり JavaScript のプロパティを調べるためのインタフェースが備わっています。

- -

JavaScript から Java への通信

- -

Java のパッケージやクラスを参照したり、Java のオブジェクトや配列を扱ったりするときは、特別な LiveConnect オブジェクトを使用します。JavaScript から Java へのアクセスはすべて、これらのオブジェクトを用いて行います。それらのオブジェクトについて、以下の表で簡単にまとめます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
表 9.1 LiveConnect オブジェクト
オブジェクト説明
JavaArrayラップされた Java の配列です。JavaScript コード内からアクセスされます。
JavaClassJava のクラスへの JavaScript からの参照です。
JavaObjectラップされた Java のオブジェクトです。JavaScript コード内からアクセスされます。
JavaPackageJava のパッケージへの JavaScript からの参照です。
- -

注意: Java は強く型付けされた言語であり、JavaScript は弱く型付けされた言語であるため、LiveConnect を使用する際はもう一方の言語のために JavaScript ランタイムエンジンが引数の値を適当なデータ型に変換します。詳細はデータ型の変換をご覧ください。

- -

かなり直感的に Java とやりとりできることから、ある意味で LiveConnect オブジェクトの存在は透過的です。例えば、次のように Java の String オブジェクトを作成し、new 演算子を Java のコンストラクタとともに用いて、そのオブジェクトを JavaScript の変数 myString に代入することができます:

- -
var myString = new java.lang.String("Hello world");
-
- -

この例では、変数 myStringJavaObject になります。これは、Java の String オブジェクトのインスタンスを保持しているためです。JavaObject であるので、myStringjava.lang.String およびそのスーパークラスである java.lang.Object のパブリックなインスタンスメソッドにアクセスできます。これらの Java のメソッドは JavaScript から、JavaObject のメソッドとして使用できます:

- -
myString.length(); // 11 を返す
-
- -

JavaClass オブジェクトの静的メンバは直接呼び出すことができます。

- -
alert(java.lang.Integer.MAX_VALUE); // 2147483647 というアラート
-
- -

Packages オブジェクト

- -

Java のクラスが javasun あるいは netscape パッケージのいずれの一部でもない場合は、Packages オブジェクトを用いてそれにアクセスします。例えば Redwood 社が、実装したさまざまな Java のクラスを格納するための、redwood という名前の Java パッケージを使用することを想定します。redwoodHelloWorld クラスのインスタンスを作成するには、次のようにそのクラスのコンストラクタにアクセスします:

- -
var red = new Packages.redwood.HelloWorld();
-
- -

デフォルトパッケージのクラス (すなわち、明示的にはパッケージに名前をつけていないクラス) にアクセスすることもできます。例えば、HelloWorld クラスが直接 CLASSPATH に入っており、またパッケージには入っていない場合は、次のようにしてそれにアクセスできます:

- -
var red = new Packages.HelloWorld();
-
- -

LiveConnect の javasun および netscape オブジェクトはよく使用される Java のパッケージであるために、短縮記法が備わっています。例えば、次のように使用できます:

- -
var myString = new java.lang.String("Hello world");
-
- -

これは次のものを省略したものです:

- -
var myString = new Packages.java.lang.String("Hello world");
-
- -

Java の配列の使用

- -

Java のメソッドが配列を作成し、JavaScript からその配列を参照するときは、JavaArray を使用します。例えば、次のコードは int 型の要素を 10 個持つ JavaArray x を作成します:

- -
var x = java.lang.reflect.Array.newInstance(java.lang.Integer, 10);
-
- -

JavaScript の Array オブジェクトのように、JavaArray にはその配列の要素数を返す length プロパティがあります。Array.length とは異なり、JavaArray.length は読み取り専用のプロパティです。これは、Java の配列は作成時に要素総数が固定されるためです。

- -

パッケージおよびクラスの参照

- -

JavaScript から Java のパッケージやクラスへの簡単な参照では、JavaPackageJavaClass オブジェクトが作成されます。先の Redwood 社についての例では、例えば Packages.redwood という参照が JavaPackage オブジェクトです。同様に、java.lang.String のような参照は JavaClass オブジェクトです。

- -

ほとんどの場合は JavaPackageJavaClass オブジェクトについて気にする必要はありません。ただ Java のパッケージを使うだけのことであり、LiveConnect がこれらのオブジェクトを透過的に生成するからです。LiveConnect がクラスの読み込みに失敗する場合があり、そのときは以下のようにして手動で読み込みを行う必要があります:

- -
var Widgetry = java.lang.Thread.currentThread().getContextClassLoader().loadClass("org.mywidgets.Widgetry");
-
- -

JavaScript 1.3 以前では JavaClass オブジェクトをパラメータとして Java のメソッドとして渡す際に、自動的には java.lang.Class のインスタンスに変換されません。そのため、java.lang.Class のインスタンスのラッパを作成しなければなりません。次の例では、forName メソッドがラッパオブジェクトである theClass を生成します。そしてそれを newInstance メソッドに渡し、配列を生成します。

- -
// JavaScript 1.3
-var theClass = java.lang.Class.forName("java.lang.String");
-var theArray = java.lang.reflect.Array.newInstance(theClass, 5);
-
- -

JavaScript 1.4 以降では次の例のように、JavaClass オブジェクトをメソッドに直接渡すことができます:

- -
// JavaScript 1.4
-var theArray = java.lang.reflect.Array.newInstance(java.lang.String, 5);
-
- -

char 型の引数

- -

JavaScript 1.4 以降では char 型の引数を必要とする Java のメソッドに、1 文字の文字列を渡すことができます。例えば、次のようにして文字列 "H" を Character コンストラクタに渡すことができます:

- -
var c = new java.lang.Character("H");
-
- -

JavaScript 1.3 以前では、このようなメソッドにはその文字の Unicode 値に対応する整数値を渡さなければなりません。例えば、次のコードも "H" という文字列を変数 c に代入するものです:

- -
var c = new java.lang.Character(72);
-
- -

JavaScript での Java 例外の処理

- -

Java のコードは実行時に失敗すると、例外を投げます。JavaScript のコードが Java のデータメンバまたはメソッドにアクセスし、失敗すると、Java の例外が JavaScript に渡されます。これは、例外を処理できるようにするためです。JavaScript 1.4 からは try...catch 文でこの例外を受け取ることができます。(Mozilla 固有の LiveConnect コードが Mozilla 内でメンテナンスされていなかったため、この機能は (他の一部機能もあわせて) Gecko 1.9 で壊れています (バグ 391642 をご覧ください)。しかし Java 6 アップデート 11 および 12 での、Mozilla の汎用 (かつクロスブラウザの) NPAPI プラグインコードに依存する構築のサポートにより修復されました。)

- -

例えば、Java の forName メソッドを使用して Java のクラス名を theClass という変数に代入するとします。forName メソッドに渡す値が Java のクラス名に評価できなければ、そのメソッドは例外を投げます。次のようにして、例外を処理できるように forName 代入文を try ブロック内に置きます:

- -
function getClass(javaClassName) {
-   try {
-      var theClass = java.lang.Class.forName(javaClassName);
-   } catch (e) {
-      return ("The Java exception is " + e);
-   }
-   return theClass;
-}
-
- -

この例では、javaClassName が "java.lang.String" のような正当なクラス名に評価されると代入が成功します。javaClassName が "String" のような不正なクラス名に評価されると、getClass 関数が例外を受け取り、次のようなものを返します:

- -
The Java exception is java.lang.ClassNotFoundException: String
-
- -

例外の型に基づいて特別な処理をするには instanceof 演算子を使用します:

- -
try {
-  // ...
-} catch (e) {
-  if (e instanceof java.io.FileNotFound) {
-     // FileNotFound についての処理
-  } else {
-    throw e;
-  }
-}
-
- -

JavaScript の例外についての詳細情報は例外処理文を参照してください。

- -

Java から JavaScript への通信

- -

Java で JavaScript のオブジェクトを使用したい場合は、その Java ファイルに netscape.javascript パッケージをインポートしなければなりません。このパッケージは次のクラスを定義しています:

- - - -

これらのクラスの詳細は JavaScript リファレンスをご覧ください。

- -

LiveConnect クラスの場所の特定

- -

古いバージョンの Netscape ブラウザでは、これらのクラスがブラウザに同梱されていました。JavaScript 1.2 からは、これらのクラスは .jar ファイルに格納されています。それより古いバージョンの JavaScript では、これらのクラスは .zip ファイルに格納されています。例えば Windows NT 向けの Netscape Navigator 4 では、クラスは Navigator のディレクトリ直下の Program\Java\Classes ディレクトリ内の java40.jar ファイルに格納されています。

- -

より最近では、クラスは Sun の Java ランタイムに同梱されています。はじめはランタイムディストリビューションの "jre/lib" ディレクトリ内の "jaws.jar" ファイルに入っていましたが (JRE 1.3)、その後同じ場所の "plugin.jar" に移っています (JRE 1.4 以降)。

- -

JDK での LiveConnect クラスの使用

- -

LiveConnect クラスにアクセスするには、次のどちらかの方法で JDK コンパイラの CLASSPATH に .jar または .zip ファイルを配置します:

- - - -

Windows NT では、コントロールパネルのシステムアイコンをダブルクリックし、CLASSPATH という名前のユーザ環境変数を作成し、それに次のような値を設定することで環境変数を作成できます:

- -
C:\Program Files\Java\jre1.4.1\lib\plugin.jar
-
- -

CLASSPATH についての詳細は Sun の JDK に関する資料をご覧ください。

- -

注意: Java は強く型付けされた言語であり、JavaScript は弱く型付けされた言語であるため、LiveConnect を使用する際はもう一方の言語のために JavaScript ランタイムエンジンが引数の値を適当なデータ型に変換します。詳細は  をご覧ください。

- -

LiveConnect クラスの使用

- -

すべての JavaScript オブジェクトは、Java コード内では netscape.javascript.JSObject のインスタンスとして現れます。Java コード内でメソッドを呼び出すときに、その引数として JavaScriptのオブジェクトを渡すことができます。そうするためには、そのメソッドの対応する仮パラメータを JSObject 型で定義しなければなりません。

- -

さらに、Java コード内で JavaScript のオブジェクトを使用するたびに、netscape.javascript.JSException 型の例外を処理する try...catch 文の内側で、その JavaScript オブジェクトを呼び出すようにしてください。こうすることで JSException 型の例外として Java で現れる、JavaScript コードの実行におけるエラーを Java コードで処理できるようになります。

- -

JSObject を用いた JavaScript へのアクセス

- -

例えば、JavaDog という Java のクラスを使用するとします。次のコードで示すように、JavaDog コンストラクタは JavaScript のオブジェクトである jsDog を引数としてとります。このオブジェクトは JSObject 型として定義されています:

- -
import netscape.javascript.*;
-
-public class JavaDog{
-    public String dogBreed;
-    public String dogColor;
-    public String dogSex;
-
-    // クラスコンストラクタの定義
-    public JavaDog(JSObject jsDog){
-        // ここで try...catch を使用して JSExceptions を処理できるようにする
-        this.dogBreed = (String)jsDog.getMember("breed");
-        this.dogColor = (String)jsDog.getMember("color");
-        this.dogSex = (String)jsDog.getMember("sex");
-    }
-}
-
- -

JSObjectgetMember メソッドは、JavaScript のオブジェクトのプロパティにアクセスするために使用するものです。この例では JavaScript のプロパティである jsDog.breed の値を Java のデータメンバである JavaDog.dogBreed に代入するために、getMember を使用しています。

- -

注意: より現実的な例では try...catch 文の内側で getMember を呼び出し、JSException 型のエラーを処理できるようにします。詳細は、Java での JavaScript の例外処理を参照してください。

- -

getMember の動作をさらに知るために、JavaScript の Dog オブジェクトを作成し、その定義を見てみます:

- -
function Dog(breed,color,sex){
-   this.breed = breed;
-   this.color = color;
-   this.sex = sex;
-}
-
- -

Dog の JavaScript のインスタンスである gabby は、次のようにして作ることができます:

- -
var gabby = new Dog("lab", "chocolate", "female");
-
- -

gabby.color を評価すると、それが "chocolate" という値を持っていることがわかります。ここで次のように gabby オブジェクトをコンストラクタに渡し、JavaScript コードで JavaDog のインスタンスを作成することにします:

- -
var javaDog = new Packages.JavaDog(gabby);
-
- -

javaDog.dogColor を評価すると、それも "chocolate" という値を持っていることがわかります。これは Java のコンストラクタ内の getMember メソッドが、gabby.color の値を dogColor に代入するからです。

- -

Java での JavaScript の例外処理

- -

実行時に Java からの JavaScript コードの呼び出しに失敗すると、例外が投げられます。Java から JavaScript コードを呼び出すときに、try...catch 文でこの例外を受け取ることができます。JavaScript の例外は、netscape.javascript.JSException のインスタンスとして Java コードから扱えます。

- -

JSException は JavaScript が投げるあらゆる種類の例外に対応する、Java のラッパです。JSObject のインスタンスが JavaScript のオブジェクトのラッパであるのと同じようなものです。Java で JavaScript コードを評価するときは JSException を使用してください。

- -

Java で JavaScript コードを評価する際、次の状況でランタイムエラーが発生します:

- - - -

例えば、Java のオブジェクトである jsCode が自身に渡される文字列 eTest を評価するとします。次のようなエラー処理を実行することで、評価が原因で発生するどちらの種類のランタイムエラーにも対応できます:

- -
import netscape.javascript.JSObject;
-import netscape.javascript.JSException;
-
-public class eTest {
-    public static Object doit(JSObject obj, String jsCode) {
-        try {
-            obj.eval(jsCode);
-        } catch (JSException e) {
-            if (e.getWrappedException() == null)
-                return e;
-            return e.getWrappedException();
-        }
-        return null;
-    }
-}
-
- -

この例では、渡された文字列 jsCodetry ブロック内のコードが評価しようとします。文字列 "myFunction()" を jsCode の値として渡すとします。myFunction が JavaScript の関数として定義されていない場合、JavaScript インタプリタは jsCode を評価できません。インタプリタはエラーメッセージを生成し、Java のハンドラがそのメッセージを受け取り、doit メソッドは netscape.javascript.JSException のインスタンスを返します。

- -

しかし、次のように myFunction が JavaScript で定義されているとします:

- -
function myFunction() {
-   try {
-      if (theCondition == true) {
-         return "Everything's ok";
-      } else {
-         throw "JavaScript error occurred";
-      }
-   } catch (e) {
-      if (canHandle == true) {
-         handleIt();
-      } else {
-         throw e;
-      }
-   }
-}
-
- -

theCondition が false であれば、関数は例外を投げます。その例外は JavaScript コードで受け取られ、さらに canHandle が true の場合に JavaScript はそれを処理します。canHandle false がならばその例外が再び投げられ、Java のハンドラがそれを受け取り、 doit メソッドが次の Java の文字列を返します:

- -
JavaScript error occurred
-
- -

JavaScript の例外についての詳細情報は例外処理文を参照してください。

- -

後方互換性

- -

JavaScript 1.3 以前のバージョンでは、JSException クラスには省略可能な文字列引数をとる 3 つの public タイプのコンストラクタがありました。この文字列引数は、詳細なメッセージやその例外に対する他の情報を指定するものです。getWrappedException メソッドは使用できませんでした。

- -

次のような try...catch 文を使用することで、JavaScript 1.3 以前のバージョンで LiveConnect の例外を処理できます:

- -
try {
-   global.eval("foo.bar = 999;");
-} catch (Exception e) {
-   if (e instanceof JSException) {
-      jsCodeFailed();
-   } else {
-      otherCodeFailed();
-   }
-}
-
- -

この例では foo が定義されていないと eval 文が失敗します。try ブロックの eval 文が JSException を投げると、catch ブロックが jsCodeFailed メソッドを実行します。try ブロックがそれ以外のエラーを投げると、otherCodeFailed メソッドが実行されます。

- -

データ型変換

- -

Java は強く型付けされた言語であり、JavaScript は弱く型付けされた言語であるため、LiveConnect を使用する際はもう一方の言語のために、JavaScript ランタイムエンジンが引数の値を適切なデータ型に変換します。この変換について以下のセクションで説明します:

- - - -

JavaScript から Java への変換

- -

JavaScript から Java のメソッドを呼び出してパラメータを渡す際、渡すパラメータのデータ型は以下のセクションで説明するルールによって変換されます:

- - - -

netscape.javascript.JSObject メソッドの戻り値は常に java.lang.Object のインスタンスに変換されます。このような戻り値の変換ルールもここで説明します。

- -

例えば JSObject.eval が JavaScript の数値を返すのであれば、この数値を java.lang.Object のインスタンスに変換するルールは数値に記載されています。

- -

数値

- -

Java のメソッドに JavaScript の数値型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
double -
    -
  • そのままの値が、丸められたり絶対値や符号が損なわれることなく Java に渡されます。
  • -
  • NaNNaN に変換されます。
  • -
-
java.lang.Double
- java.lang.Object
java.lang.Double の新しいインスタンスが作成され、そのままの値が、丸められたり絶対値や符号が損なわれることなく Java に渡されます。
float -
    -
  • 値は float 精度に丸められます。
  • -
  • 大きすぎまたは小さすぎて表現できない値は、正の無限大または負の無限大に丸められます。
  • -
  • NaNNaN に変換されます。
  • -
-
byte
- char
- int
- long
- short
-
    -
  • 値は負の無限大方向に丸められます。
  • -
  • 大きすぎまたは小さすぎて表現できない値は、ランタイムエラーになります。
  • -
  • NaN は変換されずにランタイムエラーになります。
  • -
-
java.lang.String値は文字列に変換されます。例えば: -
    -
  • 237 は "237" になります。
  • -
-
boolean -
    -
  • 0 および NaN は false に変換されます。
  • -
  • その他の値は true に変換されます。
  • -
-
- -

java.lang.String のインスタンスをパラメータに想定した Java のメソッドに JavaScript の数値をパラメータとして渡すと、その数値は文字列に変換されます。equals() メソッドを使用すると、この変換結果と他の文字列を比較できます。

- -

真偽値

- -

Java のメソッドに JavaScript の真偽値型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
booleanすべての値は、Java で対応するものに直接変換されます。
java.lang.Boolean
- java.lang.Object
java.lang.Boolean の新しいインスタンスが作成されます。同一のプリミティブ値に対して 1 つのインスタンスではなく、各パラメータについて新しいインスタンスが作成されます。
java.lang.String値は文字列に変換されます。例えば: -
    -
  • true は "true" になります。
  • -
  • false は "false" になります。
  • -
-
byte
- char
- double
- float
- int
- long
- short
-
    -
  • true は 1 になります。
  • -
  • false は 0 になります。
  • -
-
- -

java.lang.String のインスタンスをパラメータに想定した Java のメソッドに JavaScript の真偽値をパラメータとして渡すと、その真偽値は文字列に変換されます。== 演算子を使用すると、この変換結果と他の文字列を比較できます。

- -

文字列値

- -

Java のメソッドに JavaScript の文字列型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
java.lang.String
- java.lang.Object
JavaScript 1.4: -
    -
  • JavaScript の文字列は、Unicode 値で java.lang.String のインスタンスに変換されます。
  • -
- -

JavaScript 1.3 以前:

- -
    -
  • JavaScript の文字列は、ASCII 値で java.lang.String のインスタンスに変換されます。
  • -
-
byte
- double
- float
- int
- long
- short
すべての値は、ECMA-262 に記載に従って数値に変換されます。JavaScript の文字列値は ECMA-262 に記載されたルールに従って数値に変換されます。
charJavaScript 1.4: -
    -
  • 1 文字の文字列は、Unicode 文字に変換されます。
  • -
  • 他のすべての値は数値に変換されます。
  • -
- -

JavaScript 1.3 以前:

- -
    -
  • すべての値が数値に変換されます。
  • -
-
boolean -
    -
  • 空文字列は false になります。
  • -
  • 他のすべての値は true になります。
  • -
-
- -

undefined 値

- -

Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
java.lang.String
- java.lang.Object
値は java.lang.String のインスタンスに変換され、インスタンスの値は文字列 "undefined" になります。
boolean値は false になります。
double
- float
値は NaN になります。
byte
- char
- int
- long
- short
値は 0 になります。
- -

undefined 値の変換は JavaScript 1.3 以降でのみ可能です。それより古いバージョンでは、undefined 値がサポートされていません。

- -

java.lang.String のインスタンスをパラメータに想定した Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、その undefined 値は文字列に変換されます。== 演算子を使用すると、この変換結果と他の文字列を比較できます。

- -

null 値

- -

Java のメソッドに JavaScript の null 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
あらゆるクラス
- あらゆるインタフェースの種類
値は null になります。
byte
- char
- double
- float
- int
- long
- short
値は 0 になります。
boolean値は false になります。
- -

JavaArray および JavaObject オブジェクト

- -

ほとんどの場合、Java のメソッドに JavaScript の JavaArray または JavaObject オブジェクトをパラメータとして渡すと、Java は単にそのオブジェクトのラップを解きます。そうでない場合は、Java は次の表で示すルールに従ってそのオブジェクトを別のデータ型に変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
ラップが解かれたオブジェクトと代入互換性のある、あらゆるインタフェースまたはクラスオブジェクトのラップが解かれます。
java.lang.Stringオブジェクトのラップが解かれ、ラップが解かれた Java オブジェクトの toString メソッドが呼び出され、その結果が java.lang.String の新しいインスタンスとして返されます。
byte
- char
- double
- float
- int
- long
- short
オブジェクトのラップが解かれ、次の状況のどちらかが起こります: -
    -
  • ラップが解かれた Java のオブジェクトに doubleValue メソッドがあれば、JavaArray または JavaObject はこのメソッドが返す値に変換されます。
  • -
  • ラップが解かれた Java オブジェクトに doubleValue メソッドがなければ、エラーが発生します。
  • -
-
booleanJavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります: -
    -
  • オブジェクトが null ならば、false に変換されます。
  • -
  • オブジェクトがそれ以外の値ならば、true に変換されます。
  • -
- -

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります:

- -
    -
  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトは戻り値のために変換されます。
  • -
  • オブジェクトに booleanValue がなければ、変換に失敗します。
  • -
-
- -

ラップが解かれたオブジェクトが Java のパラメータ型のインスタンスであれば、インタフェースまたはクラスが、ラップが解かれたオブジェクトと代入互換性があるということです。つまり、次の文は必ず true を返します:

- -
unwrappedObject instanceof parameterType;
-
- -

JavaClass オブジェクト

- -

Java のメソッドに JavaScript の JavaClass オブジェクトをパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
java.lang.Classオブジェクトのラップが解かれます。
netscape.javascript.JSObject
- java.lang.Object
JavaClass オブジェクトが netscape.javascript.JSObject の新しいインスタンス内にラップされます。
java.lang.Stringオブジェクトのラップが解かれ、ラップが解かれた Java オブジェクトの toString メソッドが呼び出され、その結果が java.lang.String の新しいインスタンスとして返されます。
booleanJavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります: -
    -
  • オブジェクトが null ならば、false に変換されます。
  • -
  • オブジェクトがそれ以外の値ならば、true に変換されます。
  • -
- -

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります:

- -
    -
  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトは戻り値のために変換されます。
  • -
  • オブジェクトに booleanValue がなければ、変換に失敗します。
  • -
-
- -

その他の JavaScript のオブジェクト

- -

Java のメソッドに JavaScript のその他のオブジェクトをパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Java のパラメータ型変換ルール
netscape.javascript.JSObject
- java.lang.Object
オブジェクトは netscape.javascript.JSObject の新しいインスタンス内にラップされます。
java.lang.Stringオブジェクトのラップが解かれ、ラップが解かれたオブジェクトの toString メソッドが呼び出され、その結果が java.lang.String の新しいインスタンスとして返されます。
byte
- char
- double
- float
- int
- long
- short
オブジェクトは、ECMA-262 に記載された ToPrimitive 演算子のロジックを使用して値に変換されます。この演算子で使用される PreferredType ヒントは Number です。
booleanJavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります: -
    -
  • オブジェクトが null ならば、false に変換されます。
  • -
  • オブジェクトがそれ以外の値ならば、true に変換されます。
  • -
- -

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こります:

- -
    -
  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトは戻り値のために変換されます。
  • -
  • オブジェクトに booleanValue がなければ、変換に失敗します。
  • -
-
- -

Java から JavaScript への変換

- -

Java から JavaScript に渡された値は、次のように変換されます:

- - - -

java.lang.Double および java.lang.Integer のインスタンスは、JavaScript の数値ではなく JavaScript のオブジェクトに変換されることに注意してください。同様に java.lang.String のインスタンスも、JavaScript の文字列ではなく JavaScript のオブジェクトに変換されます。

- -

Java の String オブジェクトも、JavaScript のラッパに相当します。JavaScript の文字列を必要とする JavaScript のメソッドを、このラッパを渡して呼び出すとエラーになります。そうではなく、次のようにラッパに空文字列を付加することで、ラッパを JavaScript の文字列に変換してください:

- -
var JavaString = JavaObj.methodThatReturnsAString();
-var JavaScriptString = JavaString + "";
diff --git a/files/ja/web/javascript/new_in_javascript/1.1/index.html b/files/ja/web/javascript/new_in_javascript/1.1/index.html deleted file mode 100644 index ec43553cd0..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.1/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: JavaScript 1.1 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.1 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.1 ---- -
{{jsSidebar("New_in_JS")}}
- -

The following is a changelog for JavaScript from Netscape Navigator 2.0 to 3.0. The old Netscape documentation references this as "Features added after version 1". Netscape Navigator 3.0 was released on August 19, 1996. Netscape Navigator 3.0 was the second major version of the browser with JavaScript support.

- -

JavaScript versions

- -

Netscape Navigator 3.0 also introduced JavaScript language versions.

- -
<script language="JavaScript">    <!-- JavaScript for Navigator 2.0. -->
-<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript for Navigator 3.0. --></pre>
-
-<h2 id="New_features_in_JavaScript_1.1">New features in JavaScript 1.1</h2>
-
-<h3 id="New_objects">New objects</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function">Function</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">Number</a></code></li>
-</ul>
-
-<h3 id="New_properties">New properties</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE">Number.MAX_VALUE</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE">Number.MIN_VALUE</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY">Number.NEGATIVE_INFINITY</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY">Number.POSITIVE_INFINITY</a></code></li>
-</ul>
-
-<h3 id="New_methods">New methods</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join">Array.prototype.join()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse">Array.prototype.reverse()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort">Array.prototype.sort()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split">String.prototype.split()</a></code></li>
-</ul>
-
-<h3 id="New_operators">New operators</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/void">void</a></code></li>
-</ul>
-
-<h3 id="Other_new_features">Other new features</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/HTML/Element/noscript"><noscript></a></code></li>
- <li><a href="/en-US/docs/Archive/Web/LiveConnect">LiveConnect</a>. Communication between Java and JavaScript.</li>
-</ul>
-
-<h2 id="Changed_functionality_in_JavaScript_1.1">Changed functionality in JavaScript 1.1</h2>
-
-<ul>
- <li>"Object deletion". You can remove an object by setting its object reference to <code>null</code>.</li>
- <li><code>constructor</code> and <code>prototype</code> properties on objects added.</li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval()</a></code> is now a method of every object (was previously a built-in function); it evaluates a string of JavaScript code in the context of the specified object.</li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random">Math.random()</a></code> now works on every platform.</li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString">toString()</a></code>: Added radix parameter, which specifies the base to use for representing numeric values.</li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN">isNaN()</a></code> now works on every platform (not only Unix anymore)</li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat">parseFloat()</a></code> and <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt">parseint()</a></code> now return <code>NaN</code> on all platforms, if the first character of the specified string cannot be converted to a number; in previous releases, it returned <code>NaN</code> on Solaris and Irix and zero on all other platforms.</li>
-</ul></script>
diff --git a/files/ja/web/javascript/new_in_javascript/1.2/index.html b/files/ja/web/javascript/new_in_javascript/1.2/index.html deleted file mode 100644 index 9e991631a1..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.2/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: JavaScript 1.2 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.2 -tags: - - JavaScript - - version -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.2 ---- -
{{jsSidebar("New_in_JS")}}
- -

この JavaScript の変更履歴は Netscape Navigator3.0~4.0 に基づいています。旧 Netscape Navigator のドキュメントは archive.org にあります。Netscape Navigator 4.0 は 1997 年 6 月 11 日にリリースされました。Netscape Navigator 4.0 は、JavaScript をサポートするブラウザの 3 番目のメジャーバージョンでした。

- -

JavaScript バージョン

- -

Netscape Navigator 4.0 では JavaScript 1.2 を実行できるようになりました。Netscape Navigator 3.0 以前では、language 属性が "JavaScript1.2" 以上に設定されているスクリプトを無視することに注意してください。

- -
<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript for Navigator 3.0. -->
-<SCRIPT LANGUAGE="JavaScript1.2"> <!-- JavaScript for Navigator 4.0. -->
- -

1.2 の新機能

- -

新しいオブジェクト

- - - -

新しく実装されたプロパティ

- - - -

新しく実装されたメソッド

- - - -

新しい演算子

- - - -

新しい構文

- - - -

他の新機能

- - - -

JavaScript 1.2 での機能変更

- - diff --git a/files/ja/web/javascript/new_in_javascript/1.3/index.html b/files/ja/web/javascript/new_in_javascript/1.3/index.html deleted file mode 100644 index cf0c5827f2..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.3/index.html +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: JavaScript 1.3 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.3 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.3 ---- -
{{jsSidebar("New_in_JS")}}
- -

The following is a changelog for JavaScript from Netscape Navigator 4.0 to 4.5. The old Netscape documentation can be found on archive.org. Netscape Navigator 4.5 was released on October 19, 1998.

- -

The most significant change in JavaScript 1.3 was compliance with ECMA-262 and Unicode by removing inconsistencies between JavaScript 1.2 and the new ECMA standard (which was published in June 1997). Additional features of version 1.2, at the time not specified by ECMA-262 were kept in the JavaScript language (see below for a list of differences).

- -

JavaScript versions

- -

Netscape Communicator and Navigator 4.06 and 4.5 executes JavaScript language versions up to 1.3. Note that Communicator and Navigator 4.0-4.05 and earlier ignored scripts with the language attribute set to "JavaScript1.3" and higher.

- -
<script language="JavaScript1.2"> <!-- JavaScript for Navigator 4.0. -->
-<SCRIPT LANGUAGE="JavaScript1.3"> <!-- JavaScript for Navigator 4.5. --></pre>
-
-<h2 id="New_features_in_JavaScript_1.3">New features in JavaScript 1.3</h2>
-
-<h3 id="New_globals">New globals</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="JavaScript/Reference/Global_Objects/NaN"><code>NaN</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity" title="JavaScript/Reference/Global_Objects/Infinity"><code>Infinity</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined" title="JavaScript/Reference/Properties/undefined"><code>undefined</code></a></li>
-</ul>
-
-<h3 id="New_methods">New methods</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite"><code>isFinite()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource" title="JavaScript/Reference/Objects/Object/ToSource"><code>toSource()</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call">Function.prototype.call()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply"><code>Function.prototype.apply()</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC">Date.UTC()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear"><code>Date.prototype.getFullYear()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear"><code>Date.prototype.setFullYear()</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds">Date.prototype.getMilliseconds()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds"><code>Date.prototype.setMilliseconds()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear"><code>Date.prototype.getUTCFullYear()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth"><code>Date.prototype.getUTCMonth()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate"><code>Date.prototype.getUTCDate()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours"><code>Date.prototype.getUTCHours()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes"><code>Date.prototype.getUTCMinutes()</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds">Date.prototype.getUTCSeconds()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds"><code>Date.prototype.getUTCMilliseconds()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString"><code>Date.prototype.toUTCString()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear"><code>Date.prototype.setUTCFullYear()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth"><code>Date.prototype.setUTCMonth()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate"><code>Date.prototype.setUTCDate()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours"><code>Date.prototype.setUTCHours()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes"><code>Date.prototype.setUTCMinutes()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds"><code>Date.prototype.setUTCSeconds()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds"><code>Date.prototype.setUTCMilliseconds()</code></a></li>
-</ul>
-
-<h3 id="Other_new_features">Other new features</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators" title="JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">Strict equality operators</a></li>
- <li>Unicode support</li>
- <li>A JavaScript Console was introduced.</li>
-</ul>
-
-<h2 id="Changed_functionality_in_JavaScript_1.3">Changed functionality in JavaScript 1.3</h2>
-
-<ul>
- <li>Changes to <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date" title="JavaScript/Reference/Global_Objects/Date"><code>Date</code></a> to conform with ECMA-262
-
-  <ul>
-   <li>New constructor <code>Date(year, month, day, [,
-    <i>hours</i>
-    [
-
-    <i>, minutes</i>
-    [
-
-    <i>, seconds</i>
-    [
-
-    <i>, milliseconds</i>
-    ]]]])</code></li>
-   <li>Additional method parameters:
-    <ul>
-     <li><code>setMonth(month[, date])</code></li>
-     <li><code>setHours(hours[, min[, sec[, ms]]])</code></li>
-     <li><code>setMinutes(min[, sec[, ms]])</code></li>
-     <li><code>setSeconds(sec[, ms])</code></li>
-    </ul>
-   </li>
-  </ul>
- </li>
- <li>The length of an array (property length) is now an unsigned, 32-bit integer.</li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push"><code>Array.prototype.push()</code></a>: In JavaScript 1.2, the <code>push</code> method returned the last element added to an array. Under JavaScript 1.3, <code>push</code> returns the new length of the array.</li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice"><code>Array.prototype.splice()</code></a>: In JavaScript 1.2, the <code>splice</code> method returned the element removed, if only one element was removed (<code>howMany</code> parameter is <code>1</code>). In JavaScript 1.3, <code>splice</code> always returns an array containing the removed elements. If one element is removed, an array of one element is returned.</li>
- <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#replace">Changes</a> to <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace"><code>String.prototype.replace()</code></a>.</li>
- <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#Boolean">Changes</a> to the <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean"><code>Boolean</code></a> object.</li>
- <li><a href="http://web.archive.org/web/20000815081640/http://developer.netscape.com/docs/manuals/communicator/jsref/js13.html#toString">Changes</a> to <code>toString()</code>.</li>
-</ul>
-
-<h2 id="Non-ECMA-262_features_of_JavaScript_1.3">Non-ECMA-262 features of JavaScript 1.3</h2>
-
-<p>The following is a comparison between the June 1998 version of ECMA-262 and JavaScript 1.3. The following features were not part of the standard at that time, but implemented in JavaScript 1.3.</p>
-
-<h3 id="Keywords_and_operators">Keywords and operators</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">Strict equality operators</a></li>
- <li>vertical tab (<code>\v</code> or <code>\u000B</code>) as an escape sequence.</li>
-</ul>
-
-<h3 id="Statements">Statements</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/label"><code>label</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/switch"><code>switch</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/do...while"><code>do...while</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/export"><code>export</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/import"><code>import</code></a></li>
-</ul>
-
-<h3 id="Built-in_objects">Built-in objects</h3>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp"><code>RegExp</code></a></li>
-</ul>
-
-<h3 id="Methods_of_built-in_objects">Methods of built-in objects</h3>
-
-<ul>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource">toSource()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch">Object.prototype.watch()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/unwatch"><code>Object.prototype.unwatch()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity"><code>Function.arity</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">Function.prototype.apply()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call">Function.prototype.call()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat">Array.prototype.concat()</a></code></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop">Array.prototype.pop()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push"><code>Array.prototype.push()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift"><code>Array.prototype.shift()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift"><code>Array.prototype.unshift()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice"><code>Array.prototype.slice()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice"><code>Array.prototype.splice()</code></a></li>
- <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat">String.prototype.concat()</a></code></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match"><code>String.prototype.match()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search"><code>String.prototype.search()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice"><code>String.prototype.slice()</code></a></li>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr"><code>String.prototype.substr()</code></a></li>
-</ul></script>
diff --git a/files/ja/web/javascript/new_in_javascript/1.4/index.html b/files/ja/web/javascript/new_in_javascript/1.4/index.html deleted file mode 100644 index 560e55f636..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.4/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: JavaScript 1.4 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.4 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.4 ---- -
{{jsSidebar("New_in_JS")}}
- -

The following is a changelog for JavaScript 1.4, which was only used for Netscape's server side JavaScript released in 1999. The old Netscape documentation can be found on archive.org.

- -

New features in JavaScript 1.4

- - - -

Changed functionality in JavaScript 1.4

- - diff --git a/files/ja/web/javascript/new_in_javascript/1.5/index.html b/files/ja/web/javascript/new_in_javascript/1.5/index.html deleted file mode 100644 index 33868c064b..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.5/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: JavaScript 1.5 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.5 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.5 ---- -

{{jsSidebar("New_in_JS")}}

- -

JavaScript バージョン 1.5 では以下の新機能や改良点が盛り込まれています。

- -

ランタイムエラー
- ランタイムエラーが例外として報告されるようになっています。

- -

数値の書式の強化
- Number.prototype.toExponential、Number.prototype.toFixed および Number.prototype.toPrecision メソッドの導入により、数値の書式が強化されています。Number オブジェクト のページを参照してください。

- -

正規表現の強化
- 以下のように正規表現が強化されています。

- - - -

ある条件下での関数の宣言
- if 節の中で関数を宣言できるようになっています。関数の定義 のページを参照してください。

- -

関数式
- 式の中で関数を宣言できるようになっています。関数の定義 のページを参照してください。

- -

複数の catch 節
- try...catch 文における複数の catch 節をサポートしています。catch ブロック のページを参照してください。

- -

ゲッタとセッタ
- オブジェクトにゲッタとセッタを追加できるようになっています。この機能は JavaScript の C での実装でのみ利用可能です。ゲッタとセッタの定義 のページを参照してください。

- -

定数
- 読み取り専用の名前付き定数がサポートされています。この機能は JavaScript の C での実装でのみ利用可能です。定数 のページを参照してください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.6/index.html b/files/ja/web/javascript/new_in_javascript/1.6/index.html deleted file mode 100644 index c1985c16ab..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.6/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: JavaScript 1.6 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.6 -tags: - - E4X - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.6 ---- -
{{jsSidebar("New_in_JS")}}
- -

JavaScript 1.6 では次のような新機能が導入されています。E4X、Array の新しいメソッド、そして Array および String の汎用化です。

- -

JavaScript 1.6 は Firefox 1.5 以降でサポートされています。

- -

E4X

- -

ECMAScript for XML (E4X) は JavaScript 内で XML コンテンツを作成したり処理したりする強力な技術です。私たちは、既存の DOM との透過的な統合など、E4X サポートの向上を続けていくつもりですが、XML ベースのウェブアプリケーションの開発者は Firefox 1.5 での E4X サポートの恩恵を受けることができます。

- -

E4X を利用する際も、あなたは標準的な MIME タイプを使用することができます:

- -
<script type="text/javascript">
-
- -

しかし E4X の文法は、スクリプトを HTML コメント (<!--...-->) 内に埋め込むという、古いブラウザからスクリプトを見えなくするための一般的な方法と衝突する可能性があります。E4X はまた、スクリプトを XML の CDATA セクション (<![CDATA{{ mediawiki.external('...') }}]>) 内に埋め込むという、"<" や ">" という記号を使えるようにするよりモダンな方法 (これは HTML には適用できないので注意) とも衝突する可能性があります。よくわからない文法エラーが生じた場合は MIME タイプに "; e4x=1" を追加してください:

- -
<script type="text/javascript; e4x=1">
-
- -

拡張機能のスクリプトは常に HTML コメントを E4X リテラルとして扱うことに注意してください。つまり、"e4x=1" が暗黙的に指定されている状態です。

- -

E4X については、Processing XML with E4X で説明されています。

- -

Array の拡張

- -

Array のメソッドが新しく 7 つ追加されました。これらは項目の場所に関するメソッドと反復的なメソッドの 2 つに分類可能です。項目の場所に関するメソッドは:

- - - -

反復的なメソッドは:

- - - -

詳しい情報については、Working with Arrays、もしくは、Nicholas C. Zakas の Mozilla's New Array Methods という記事を参照してください。

- -

Array および String の汎用化

- -

時々、配列のメソッドを文字列に適用したい場合があり、次のようにして、文字列を文字の配列として取り扱うことがあります。例えば、変数 str に含まれる文字がすべて英字であることをチェックするには、次のように書くでしょう:

- -
function isLetter(character) {
-  return (character >= "a" && character <= "z");
-}
-
-if (Array.prototype.every.call(str, isLetter))
-  alert("文字列 '" + str + "' は英字のみ含んでいます!");
-
- -

この記法はかなり無駄が多く、JavaScript 1.6 では{{ 原語併記("汎用的", "generic") }}な簡易表記が導入されました:

- -
if (Array.every(str, isLetter))
-  alert("文字列 '" + str + "' は英字のみ含んでいます!");
-
- -

同様に String のメソッドをどんなオブジェクトにも簡単に適用できます:

- -
var num = 15;
-alert(String.replace(num, /5/, '2'));
-
- -

Working with Array-like objects も参照してください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.7/index.html b/files/ja/web/javascript/new_in_javascript/1.7/index.html deleted file mode 100644 index 6750aa396b..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.7/index.html +++ /dev/null @@ -1,558 +0,0 @@ ---- -title: JavaScript 1.7 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.7 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.7 ---- -
-
{{jsSidebar("New_in_JS")}}
-
- -

JavaScript 1.7 はいくつかの新機能、特に{{ 原語併記("ジェネレータ", "generators") }}、{{ 原語併記("イテレータ", "iterators") }}、{{ 原語併記("配列内包", "array comprehensions") }}、{{ 原語併記("let 式", "let expressions") }}、および{{ 原語併記("分割代入", "destructuring assignment") }} を取り入れた言語アップデートです。JavaScript 1.6 のすべての機能も含まれています。

- -

JavaScript 1.7 のサポートは Firefox 2 に導入されました。

- -

この記事に含まれるコードの例は JavaScript シェルから実験できます。Introduction to the JavaScript shell を読み、シェルのビルド方法と使い方を学んでください。

- -

JavaScript 1.7 を使う

- -

JavaScript 1.7 の一部の新機能を使うためには、JavaScript 1.7 が使いたいという宣言が必要です。HTML または XUL コードでは次のコードを使ってください。

- -
<script type="application/javascript;version=1.7"/>
- -

JavaScript シェルを使うときは、コマンドラインで -version 170 スイッチを使うか、version() 関数を使って使いたいバージョンを設定する必要があります。

- -
version(170);
- -

新しいキーワード "yield" と "let" を使用する必要のある機能は、既存のコードでそれらのキーワードが変数や関数として利用されている恐れがあるため、バージョン 1.7 と宣言しなければ利用できません。新しいキーワードを導入していない機能 (分割代入と配列内包) は、JavaScript のバージョン宣言なしに利用できます。

- -

ジェネレータとイテレータ

- -

{{ 原語併記("繰り返しの", "iterative") }} アルゴリズム (リストの各要素に同じ処理をしたり、同じデータセットに繰り返し計算を行うなど) を含むコードを開発する際、しばしば計算処理の間その値が維持される必要のある状態変数が使われます。伝統的には、繰り返しのアルゴリズムの介在変数を得るにはコールバック関数を使わなくてはなりません。

- -

ジェネレータ

- -

フィボナッチ数を計算するこの繰り返しアルゴリズムについて考えてみましょう:

- -
function do_callback(num) {
-  document.write(num + "<br>\n");
-}
-
-function fib() {
-  var i = 0, j = 1, n = 0;
-  while (n < 10) {
-    do_callback(i);
-    var t = i;
-    i = j;
-    j += t;
-    n++;
-  }
-}
-
-fib();
- -

このコードはアルゴリズムのそれぞれの繰り返しステップの処理を実行するのにコールバックルーチンを使っています。この場合、それぞれのフィボナッチ数は単純にコンソールに出力されます。

- -

{{ 原語併記("ジェネレータ", "generators") }} および{{ 原語併記("イテレータ", "iterators") }} は相互に働き、新しく、より良くこれを実行する方法を提供します。ジェネレータを使って書かれたフィボナッチ数ルーチンがどうなっているか見てみましょう:

- -
function fib() {
-  var i = 0, j = 1;
-  while (true) {
-    yield i;
-    var t = i;
-    i = j;
-    j += t;
-  }
-}
-
-var g = fib();
-
-for (var i = 0; i < 10; i++) {
-  document.write(g.next() + "<br>\n");
-}
- -

yield キーワードを含む関数がジェネレータです。これを呼ぶと、ジェネレータの仮引数は実引数と結び付きますが、本体は実際には評価されません。代わりにジェネレータ・イテレータが返ってきます。ジェネレータ・イテレータの next() メソッドを呼び出すたびに、繰り返しのアルゴリズムが 1 回ずつ実行されます。それぞれのステップでの値は、yield キーワードで指定された値です。yield をアルゴリズムの繰り返しの範囲を示すジェネレータ・イテレータ版の return だと考えましょう。毎回 next() を呼び出すたび、ジェネレータのコードは yield の次の文から再開します。

- -

あなたはジェネレータ・イテレータを、その next() メソッドを繰り返し呼び出すことで、あなたが望んだ結果の状態にたどりつくまで反復させられます。この例では、私たちが欲しいだけの結果を手に入れるまで g.next() を呼び出し続けることで、私たちはどれだけでも多くのフィボナッチ数を得ることができます。

- -

ジェネレータを指定の時点から再開する

- -

一度 next() メソッドを呼び出してジェネレータをスタートさせると、与えた特定の値を最後の yield の結果として扱わせる send() を使うことができます。その際ジェネレータはその次の yield のオペランドを返します。

- -

ジェネレータを勝手な時点から始めることはできません。特定の値を send() する前に必ず next() でジェネレータをスタートさせなければなりません。

- -
注: 興味深い点として、send(undefined) を呼び出すことは next() を呼び出すことと等価です。しかし send() を呼び出す際、生まれたてのジェネレータを undefined 以外の値からスタートさせようとすると TypeError 例外を引き起こします。
- -

ジェネレータ中での例外

- -

投げさせたい例外の値を渡して throw() メソッドを呼び出すことで、ジェネレータに強制的に例外を投げさせることができます。この例外はその時点の中断されたジェネレータの文脈から、つまりあたかもその時点で一時停止されている yieldthrow value に置き換わったかのように投げられます。

- -

もし投げられた例外の処理中に yield に遭遇しなかった場合、その例外は throw() の呼び出し元に伝播し、それ以降 next() を呼び出すと StopIteration が投げられます。

- -

ジェネレータを閉じる

- -

ジェネレータは自分自身を閉じさせる close() メソッドを持っています。ジェネレータを閉じることの効果は:

- -
    -
  1. ジェネレータ内のアクティブなすべての finally 節が実行されます。
  2. -
  3. もし finally 節が StopIteration 以外の例外を投げた場合、その例外は close() メソッドの呼び出し元に伝播されます。
  4. -
  5. ジェネレータが終了します。
  6. -
- -

ジェネレータの例

- -

このコードは 100 回ループするごとに yield するジェネレータを走らせます。

- -
var gen = generator();
-
-function driveGenerator() {
-	if (gen.next()) {
-		window.setTimeout(driveGenerator, 0);
-	} else {
-		gen.close();
-	}
-}
-
-function generator() {
-	while (i < something) {
-		/** 何か **/
-
-		++i;
-		/** 100 周ごとに yield **/
-		if ((i % 100) == 0) {
-			yield true;
-		}
-	}
-
-	yield false;
-}
- -

イテレータ

- -

{{ 原語併記("イテレータ", "iterator") }} とは、データへの繰り返しの処理をしやすくする特別なオブジェクトのことです。

- -

普通の使い方では、イテレータオブジェクトは「目に見えません」。つまりあなたはイテレータオブジェクトを明示的に操作する必要はなく、代わりに JavaScript の for...infor each...inを使うことで、オブジェクトのキーや値への繰り返し処理を自然と行うことができます。

- -
var objectWithIterator = getObjectSomehow();
-
-for (var i in objectWithIterator) {
-  document.write(objectWithIterator[i] + "<br>\n");
-}
- -

もし独自のイテレータオブジェクトを実装したり、イテレータを直接操作する何か別の必要があったりするならば、あなたは next メソッドと StopIteration 例外、そして __iterator__ プロパティについて知る必要があります。

- -

あなたは Iterator(objectname) を呼び出すことで、あるオブジェクトのイテレータを生成することができますが、そのようなあるオブジェクトのイテレータは、そのオブジェクトの __iterator__ メソッドを呼び出すことで見つけられます。もし __iterator__ が存在しなければ、デフォルトのイテレータが生成されます。デフォルトのイテレータは、普通の for...infor each...in のモデルに基づいて、オブジェクトのプロパティを yield します。もしあなたがカスタマイズしたイテレータを提供したいならば、__iterator__ メソッドをあなたのカスタマイズしたイテレータのインスタンスを返すように上書きしてください。スクリプトからオブジェクトのイテレータを得るには、直接 __iterator__ プロパティにアクセスせず Iterator(obj) を使ってください。後者は配列 (Array) に対しても使えますが、前者は使えません。

- -

一度イテレータを手に入れれば、そのイテレータの next() メソッドを呼び出すことで簡単にオブジェクトの次の項目を取得することができます。もしデータが残っていない場合は、StopIteration 例外が投げられます。

- -

ここに直接的なイテレータ操作の単純な例を示します:

- -
var obj = {name:"Jack Bauer", username:"JackB", id:12345, agency:"CTU", region:"Los Angeles"};
-
-var it = Iterator(obj);
-
-try {
-  while (true) {
-    print(it.next() + "\n");
-  }
-} catch (err if err instanceof StopIteration) {
-  print("レコードの終わり。\n");
-} catch (err) {
-  print("不明なエラー: " + err.description + "\n");
-}
- -

このプログラムの出力は次のようになります:

- -
name,Jack Bauer
-username,JackB
-id,12345
-agency,CTU
-region,Los Angeles
-レコードの終わり。
- -

イテレータを生成する際、オプションとして 2 つ目の引数を指定することができます。この引数は真偽値で、next() メソッドを呼び出すごとにキーの方だけを返してほしいかどうかを示します。このパラメータはユーザー定義の__iterator__ 関数に唯一の引数として渡されます。上のサンプルで var it = Iterator(obj);var it = Iterator(obj, true); に変えると、以下のような出力になります:

- -
name
-username
-id
-agency
-region
-レコードの終わり。
-
- -

どちらの場合でも、データが返ってくる実際の順番はその実装によって変わります。データの順番は無保証です。

- -

イテレータは、その中にあなたが気づいていないデータが含まれているかもしれないオブジェクトも含め、オブジェクト中のデータをスキャンする手軽な方法です。これは特に、アプリケーションが予想していないデータを保存する必要がある場合に便利です。

- -

配列内包

- -

{{ 原語併記("配列内包", "array comprehensions") }} は、配列のパワフルな初期化を実行する簡便な方法を提供するジェネレータの使い方です。例えば:

- -
function range(begin, end) {
-  for (let i = begin; i < end; ++i) {
-    yield i;
-  }
-}
- -

range()begin から end までのすべての数値を返すジェネレータです。このように定義すると、私たちはこれを次のように使うことができます:

- -
var ten_squares = [i * i for each (i in range(0, 10))];
- -

これは新しい配列 ten_squares を、0..9 の範囲にある値の平方を含むようあらかじめ初期化します。

- -

あなたは配列を初期化する際、任意の条件文を使うことができます。もしある配列を 0 と 20 の間にある偶数が含まれるように初期化したいならば、次のコードを使うことができます:

- -
var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)];
- -

JavaScript 1.7 以前では、これは次のようにコーディングしなければならないでしょう:

- -
var evens = [];
-
-for (var i = 0; i <= 20; i++) {
-  if (i % 2 == 0)
-    evens.push(i);
-}
- -

配列内包はより一層コンパクトであるだけでなく、一度そのコンセプトに精通してしまえば、実際のところ読みやすいものです。

- -

スコープの規則

- -

配列内包は暗黙的な let 宣言と同様に、角カッコの内側にあるすべてを含んだその周りに暗黙的なブロックを持ちます。

- -

Add details.

- -

let を使ったブロックスコープ

- -

データや関数のブロックスコープを管理する let を使うにはいくつかの方法があります:

- - - -

let

- -

let 文は変数に対するローカルスコープを提供します。let 文はコードのある 1 つのブロックのレキシカルスコープに 0 以上の変数を結びつけることによって働き、それ以外はブロック文と全く同じです。特に、let 文の内側で var を使って定義された変数のスコープは、let 文の外側でそれが定義された場合と同じであり、そのような変数は従来通り関数スコープを持つことに注意してください。

- -

例えば:

- -
var x = 5;
-var y = 0;
-
-let ( x = x + 10, y = 12 ) {
-  print(x+y + "\n");
-}
-
-print( (x + y) + "\n" );
- -

このプログラムからの出力は次のようになるでしょう:

- -
27
-5
- -

コードブロックに関するルールは JavaScript の他のコードブロックと同じです。let 宣言を使って確立されたブロック自身のローカル変数を持っているかもしれません。

- -
注: let 文の構文を使う時、let の後の丸カッコは必須です。これを入れないと構文エラーとなります。
- -
{{ 英語版章題("Scoping rules 2") }}
- -

スコープの規則

- -

let を使って定義された変数のスコープは、let ブロック自身とその内部に含まれるすべてのブロックです。ただしそれらのブロックが同じ名前で変数を定義している場合を除きます。

- -

let

- -

let を使ってある 1 つの式だけに対してスコープを持つ変数を確立することができます:

- -
var x = 5;
-var y = 0;
-
-document.write( let(x = x + 10, y = 12) x + y  + "<br>\n");
-document.write( x + y + "<br>\n" );
- -

結果として出力されるのは:

- -
27
-5
- -

この場合、変数 xy のそれぞれ x+1012 との結び付きは、式 x+y に対してのみスコープを持ちます。

- -

スコープの規則

- -

以下の let 式があったとすると:

- -
let (decls) expr
- -

expr の周りに暗黙的なブロックが生成されます。

- -

let 定義

- -

let キーワードはブロック内で変数を定義するのにも使うことができます。

- -
注: もしあなたがより興味深い let 定義の使用例を知っているならば、どうぞここに追加することを検討してみてください。
- -
if (x > y) {
-  let gamma = 12.7 + y;
-  i = gamma * x;
-}
- -

let 文・式・定義はしばしば、内部関数が使われる際にコードを簡潔にさせることがあります。

- -
var list = document.getElementById("list");
-for (var i = 1; i <= 5; i++) {
-  var item = document.createElement("LI");
-
-  item.appendChild( document.createTextNode("Item " + i) );
-  let j = i;
-
-  item.onclick = function (ev) {
-    alert("Item " + j + " is clicked.");
-  };
-
-  list.appendChild(item);
-}
- -

上の例は、内部の無名関数の 5 つのインスタンスがそれぞれ変数 j の異なる 5 つのインスタンスを参照しているために、意図通りに動きます。もしこれで letvar に置き換えたり、変数 j を削除して単純に i を内部関数で使うと、これは意図通りには動かないことに注意してください。

- -

スコープの規則

- -

let によって宣言された変数は、その定義があったブロックと、その変数が再定義されていないすべてのサブブロックにスコープを持ちます。この場合、letvar に非常によく似た働きをします。おもな違いは var 変数のスコープがそれを囲む関数全体であることです:

- -
function varTest() {
-    var x = 31;
-    if (true) {
-        var x = 71;  // 同じ変数!
-        alert(x);  // 71
-    }
-    alert(x);  // 71
-}
-
-function letTest() {
-    let x = 31;
-
-    if (true) {
-        let x = 71;  // 違う変数
-        alert(x);  // 71
-    }
-    alert(x);  // 31
-}
- -

= の右辺の式はブロックの内側になります。これは let 式や let 文のスコープの仕方と異なります:

- -
function letTests() {
-    let x = 10;
-
-    // let 文
-    let (x = x + 20) {
-        alert(x);  // 30
-    }
-
-    // let 式
-    alert(let (x = x + 20) x);  // 30
-
-    // let 定義
-    {
-        let x = x + 20;  // ここでの x は undefined と評価される
-        alert(x);  // undefined + 20 ==> NaN
-    }
-}
- -

プログラムやクラス内では、letvar がするようにグローバルオブジェクトのプロパティを生成したりはせず、代わりにその文脈で文を評価する際に生成される暗黙的なブロックにプロパティを生成します。これが本質的に意味するのは、let はそれ以前に var を使って定義された変数を上書きできないということです。例えば:

- -
// FF 2.0 b1 ではうまく動きません。"global" ではなく "42" を返してしまいます。
-var x = 'global';
-let x = 42;
-document.write( this.x + "<br>\n" );
- -

このコードによって表示される出力は "42" ではなく、"global" です。

- -

{{ 原語併記("暗黙的なブロック", "implicit block") }} とは、波カッコで囲まれていないブロックのことで、JavaScript エンジンによって暗黙的に生成されます。

- -

関数内で eval() によって実行された let は、var がするように variable object (activation object or innermost binding rib) にプロパティを生成しません。その代りに、そのプログラムで文を評価する際に生成される暗黙的なブロックにプロパティを生成します。これは eval() がプログラムに作用する性質と前述のルールによる結果です。

- -

別の言い方をすれば、コードを実行するのに eval() を使う際、そのコードは独立したプログラムとみなされ、そのコードの周りに暗黙的なブロックを持つのです。

- -

for ループ中での let スコープ変数

- -

let キーワードは単に var でやるようにして、for ループのスコープ内で局所的に変数を結びつけることにも使うことができます。

- -
// obj を追加する
-var i = 0;
-
-for ( let i = i; i < 10; i++ )
-    document.write(i + "<br>\n");
-
-    for ( let [name,value] in obj )
-        document.write("名前: " + name + ", 値: " + value + "<br>\n");
- -

スコープの規則

- -
for (let expr1; expr2; expr3) statement
- -

この例で、expr2expr3statement は、let expr1 によって宣言されたブロックローカルな変数を含む暗黙的なブロックに囲まれます。これは上の 1 つ目のループで実証しています。

- -
for (let expr1 in expr2) statement
-for each(let expr1 in expr2) statement
- -

これら両方の場合では、それぞれ statement を含む暗黙的なブロックができます。1 つ目の方は上の 2 つ目のループで示しています。

- -

分割代入

- -

{{ 原語併記("分割代入", "destructuring assignment") }} は、配列やオブジェクトのリテラルの構造とそっくりの構文を使って、配列やオブジェクトからデータを抽出することを可能にします。

- -

配列やオブジェクトのリテラル式は、データのアドホックな (その場限りの) 詰め合わせを作る簡単な方法を提供します。一度そのようなデータの詰め合わせを作ってしまえば、あなたはそれを使いたいように使うことができます。関数から返すことさえできます。

- -

分割代入を使うと、次の節の例で示すようなさまざまな興味深いことができるようになりますが、特に便利なのは、一つの文によって全体の構造を読み込むことができるという点です。

- -

この能力は Perl や Python などの言語に存在する機能に似ています。

- -

- -

分割代入は使用例を通じて説明するのが一番なので、ここではあなたが通読して学ぶためのいくつかの例を紹介します。

- -

一時変数の使用を避ける

- -

分割代入を使えば、例えば値を交換することができます:

- -
var a = 1;
-var b = 3;
-
-[a, b] = [b, a];
- -

このコードを実行後、 b は 1 に、a は 3 になります。分割代入がなければ、2 つの値の交換には一時変数 (あるいは一部の低級言語では XOR 交換のトリック) が必要になります。

- -

同様に、3 つ以上の変数を順に交換することにも使えます。

- -
var a = 'o';
-var b = "<span style='color:green;'>o</span>";
-var c = 'o';
-var d = 'o';
-var e = 'o';
-var f = "<span style='color:blue;'>o</span>";
-var g = 'o';
-var h = 'o';
-
-for (lp = 0; lp < 40; lp++) {
-    [a, b, c, d, e, f, g, h] = [b, c, d, e, f, g, h, a];
-    document.write( a + '' + b + '' + c + '' + d + '' + e + '' + f + '' + g + '' + h + '' + "<br />");
-}
- -

このコードを実行すると、変数が循環する様子をカラフルな視覚情報として見ることができます。

- -

上で出てきたフィボナッチ数のジェネレータの例に戻ってみると、"i" と "j" の新しい値を単一のグループ代入文で計算することによって、一時変数 "t" を除去することができます。

- -
function fib() {
-    var i = 0, j = 1;
-    while (true) {
-        yield i;
-        [i, j] = [j, i + j];
-    }
-}
-
-var g = fib();
-
-for (let i = 0; i < 10; i++)
-  print(g.next());
- -

複数の値を返す

- -

分割代入のおかげで、関数は複数の値を返すことができます。関数から配列を返すこと自体はいつでもできたものの、分割代入はさらなる柔軟性を提供します。

- -
function f() {
-    return [1, 2];
-}
- -

見ての通り、すべての返り値を角カッコで囲んだ、配列に似た構文を使ってその結果を返します。この方法で任意の数の返り値を返すことができます。この例では、f() はその出力として {{ mediawiki.external('1, 2') }} を返します。

- -
var a, b;
-[a, b] = f();
-document.write ("A is " + a + " B is " + b + "<br>\n");
- -

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

- -

また、返り値を配列として受け取ることもできます。

- -
var a = f();
-document.write ( "A is " + a );
- -

この場合、a は値 1 と 2 を含む配列です。

- -

オブジェクトを横断してループする

- -

オブジェクトからデータを取り出すために、分割代入を使うこともできます:

- -
let obj = { width: 3, length: 1.5, color: "orange" };
-
-for (let[name, value] in Iterator(obj)) {
-    document.write ( "Name: " + name + ", Value: " + value + "<br>\n" );
-}
- -

これは、オブジェクト obj の全てのキー/値の組についてループされ、それらの名前と値を表示します。この場合、出力は以下のようになります:

- -
Name: width, Value: 3
-Name: length, Value: 1.5
-Name: color, Value: orange
- -

obj を囲む Iterator() は、JavaScript 1.7 では必須ではありません。しかし、JavaScript 1.8 では必須になるでしょう。これは配列での分割代入を可能にするためです({{ Bug(366941) }} を参照)。

- -

オブジェクトの配列を横断してループする

- -

それぞれのオブジェクトから興味のあるフィールドだけを取り出しながら、オブジェクトの配列を横断してループすることもできます。

- -
var people = [
-  {
-    name: "Mike Smith",
-    family: {
-      mother: "Jane Smith",
-      father: "Harry Smith",
-      sister: "Samantha Smith"
-    },
-    age: 35
-  }, {
-    name: "Tom Jones",
-    family: {
-      mother: "Norah Jones",
-      father: "Richard Jones",
-      brother: "Howard Jones"
-    },
-    age: 25
-  }
-];
-
-for each (let {name: n, family: { father: f } } in people) {
-  document.write ( "Name: " + n + ", Father: " + f + "<br>\n" );
-}
- -

これは、name フィールドを n に、family.father フィールドを f に抜き出し、それを出力しています。これは people 配列のそれぞれのオブジェクトに対し行われます。出力はこのようになります:

- -
Name: Mike Smith, Father: Harry Smith
-Name: Tom Jones, Father: Richard Jones
- -

一部の返り値を無視する

- -

あなたはまた、興味のない返り値を無視することもできます:

- -
function f() {
-  return [1, 2, 3];
-}
-
-var [a, , b] = f();
-document.write ( "A is " + a + " B is " + b + "<br>\n" );
- -

このコードを実行後、a は 1 になり、b は 3になります。値 2 は無視されます。あなたはこの方法で任意の(あるいは全ての)返り値を無視することができます。例えば:

- -
[,,,] = f();
- -

正規表現のマッチから値を取り出す

- -

正規表現の exec() メソッドがマッチを見つけると、正規表現の全体にマッチした部分文字列を 1 つ目の要素に格納し、続いて正規表現内で括弧に囲まれたグループにマッチした部分文字列を順に格納した配列を返します。分割代入を使うと、全体のマッチを使う必要が無ければそれを無視して、配列の一部分のみを取り出すことが簡単にできるようになります。

- -
// http / https / ftp 形式の URL にマッチする単純な正規表現
-var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
-if (!parsedURL) return null;
-
-var [, protocol, fullhost, fullpath] = parsedURL;
diff --git a/files/ja/web/javascript/new_in_javascript/1.8.1/index.html b/files/ja/web/javascript/new_in_javascript/1.8.1/index.html deleted file mode 100644 index d42b06d30e..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.8.1/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: JavaScript 1.8.1 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.8.1 -tags: - - Firefox 3.5 - - Gecko 1.9.1 - - JavaScript - - JavaScript 1.8.1 -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.1 ---- -
{{jsSidebar("New_in_JS")}}
- -

JavaScript 1.8.1 は JavaScript の構文的な部分に関してはほんのわずかな更新しかありません。しかし、このリリースでの主な変更は、パフォーマンスを改善する Tracemonkey just-in-time コンパイラ の追加です。

- -

branch callback を削除して operation callback に置き換えるという注目すべき API の変更があります。詳細はこのニュースグループの投稿を参照してください

- -

言語に関する追加

- -
-
Object.getPrototypeOf()
-
この新しいメソッドは指定されたオブジェクトのプロトタイプを返します。
-
Using native JSON
-
Firefox 3.5 は JSON をネイティブでサポートします。.
-
String オブジェクトの新しい trim メソッド
-
String オブジェクトが trim()trimLeft()、そして trimRight() メソッドが定義されました。
-
- -

他の改善

- - - -

 

diff --git a/files/ja/web/javascript/new_in_javascript/1.8.5/index.html b/files/ja/web/javascript/new_in_javascript/1.8.5/index.html deleted file mode 100644 index 5cc0deb9dc..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.8.5/index.html +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: JavaScript 1.8.5 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.8.5 -tags: - - ECMAScript5 - - Firefox 4 - - JavaScript - - JavaScript 1.8.5 - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.5 ---- -
-
{{jsSidebar("New_in_JS")}}
-
- -

JavaScript 1.8.5 は、Firefox4 に含まれる JavaScript のバージョンです。

- -

新たな機能

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
機能特徴
Object.create指定されたプロトタイプオブジェクトおよびプロパティに基づくオブジェクトを生成します。{{bug("492840")}}
Object.defineProperty指定された記述に基づいた名称のプロパティを、オブジェクトに追加します。
Object.defineProperties指定された記述に基づく複数のプロパティを、オブジェクトに追加します。
Object.getOwnPropertyDescriptorオブジェクトの指定された名前のプロパティの詳細を返します。{{bug("505587")}}
Object.keysオブジェクトのすべての列挙可能 (enumerable )なプロパティを配列の形式で返します。 {{bug("307791")}}
Object.getOwnPropertyNames オブジェクトのすべてのプロパティを列挙可能の如何に関わらず (enumerable and non-enumerable)配列として返します。 {{bug("518663")}}
Object.preventExtensionsオブジェクトのいかなる拡張 (extensions)も禁止します。{{bug("492849")}}
Object.isExtensible -

オブジェクトが拡張可能かどうかを判断します。{{bug("492849")}}

-
Object.sealオブジェクトのプロパティが他のコードにより削除されるのを禁止(封印 (seal))します。{{bug("492845")}}
Object.isSealedオブジェクトが封印されている (sealed)かどうかを判断します。{{bug("492845")}}
Object.freezeオブジェクトを凍結 (Freeze)します。これにより、いかなるコードも凍結されたオブジェクトのプロパティの削除または変更ができなくなります。{{bug("492844")}}
Object.isFrozenオブジェクトが凍結されているかどうかを判断します。{{bug("492844")}}
Array.isArray 与えられた変数が配列であるかどうかを調べます。{{bug("510537")}}
Date.toJSONDateオブジェクトを、JSON形式の文字列として返します。
Function.prototype.bindこのメソッドが呼び出された際に与えられたコンテクスト(および引数)で、このメソッドを呼び出した関数自体を呼び出す、新しい関数を作成します。{{bug("429507")}}
- -

ECMAScript5 における新たな特徴

- - - -

その他の標準化作業

- -

ゲッターおよびセッターを定義する、複数の非標準な構文削除されました。ECMAScript 5で定義された構文は変更されていません。非常に難解かつ使用されているケースは稀な構文です。万が一、影響を被る場合、詳細はこのブログポストを参照してください。

- -

新たなオブジェクト

- - - - - - - - - - - - - - -
オブジェクト詳細
ProxyJavaScript でのメタプログラミングを可能する、Object および Function のプロキシの作成のサポートが提供されます。
- -

グローバルオブジェクトの変更

- -
-
Date オブジェクトの ISO 8061 のサポート
-
Date オブジェクトの parse() メソッドは、シンプルなISO 8601形式の日付文字列をサポートします。
-
グローバルオブジェクトが読み取り専用となる
-
NaNInfinity 、および undefined グローバルオブジェクトはECMAScript 5仕様に基づき、読み取り専用となりました。
-
- -

さらなる変更

- - - -

JavaScript (SpiderMonkey) API の変更

- -
註: JSLocaleCallbacks 構造体において規定されているロケールコールバックは、渡されたメモリバッファを解放しません。このバッファは SpiderMonkey ランタイムによって管理されます。
- -

JS_NewString() 関数は SpiderMonkey 1.8.5 で削除されました。代わりに JS_NewStringCopyN() を使用してください。

diff --git a/files/ja/web/javascript/new_in_javascript/1.8/index.html b/files/ja/web/javascript/new_in_javascript/1.8/index.html deleted file mode 100644 index f26879ece3..0000000000 --- a/files/ja/web/javascript/new_in_javascript/1.8/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: JavaScript 1.8 の新機能 -slug: Web/JavaScript/New_in_JavaScript/1.8 -tags: - - JavaScript - - JavaScript_version_overviews -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8 ---- -
-
{{jsSidebar("New_in_JS")}}
-
- -

JavaScript 1.8 は(Firefox 3 に組み込まれている) Gecko 1.9 の一部分です。これは JavaScript 1.7 よりは大きな更新ではありませんが、ECMAScript 4/JavaScript 2 の進歩に追随するための更新がいくつか含まれています。このリリースは JavaScript 1.6 および JavaScript 1.7 で仕様化された新機能の全てを含んでいます。

- -

JavaScript 1.8 の開発状況を追うためには、{{Bug(380236)}} を参照してください。この文書の地位については {{Bug(421027)}} を参照してください。

- -

JavaScript 1.8 の使用

- -

JavaScript 1.8 のいくつかの新機能を HTML で使用するためには、以下のようにしてください:

- -
<script type="application/javascript;version=1.8"> ... あなたのコード ... </script>
- -

もう 1 つの(推奨されない)方法として、<script> の非推奨の language 属性を使い、"JavaScript1.8" と定義することでもできます。

- -

JavaScript shell や JavaScript XPCOM コンポーネント、XUL の <script> 要素を使うときは、JS の最新バージョン(Mozilla 1.9 では JS1.8)が自動的に使われます({{Bug(381031)}}, {{Bug(385159)}})。

- -

新たなキーワードである "yield" と "let" を使う必要がある機能は、バージョン 1.7 以上を指定しなければなりません。 なぜなら、既存のコードがそれらのキーワードを変数や関数の名前として使っているかもしれないからです。新しいキーワードを導入していない機能(例えばジェネレータ式)は、JavaScript のバージョンを指定することなく使うことができます。

- -

式クロージャ

- -

この追加機能は、典型的な ラムダ記法日本語版)に似た表現を与える、単純な関数を書くための簡略表現に過ぎません。

- -

JavaScript 1.7 以前:

- -
function(x) { return x * x; }
- -

JavaScript 1.8:

- -
function(x) x * x
- -

この構文を使うことによって、中括弧と 'return' 文を省くことができます(それらは暗黙的に補われます)。この方式でコードを書くことには、コードを構文的に短くするメリットしかありません。

- -

例:

- -

イベントリスナーを渡す簡略表現:

- -
document.addEventListener("click", function() false, true);
- -

JavaScript 1.6 からの array のメソッドである some とともにこの記法を使うと:

- -
elems.some(function(elem) elem.type == "text");
- -

ジェネレータ式

- -

この追加により、ジェネレータ(JavaScript 1.7 で導入されたものです)を簡単に作成することが可能になります。ジェネレータを生成するには、通常は内部に yield を含むカスタム関数を作成しなければなりませんでしたが、この追加により、配列内包に似た構文を使って同じ性質のジェネレータ文を作成することができるようになります。

- -

JavaScript 1.7 では、あるオブジェクトのためのカスタムジェネレータを作成するために、以下のようなものを書くことでしょう:

- -
function add3(obj) {
-  for ( let i in obj )
-    yield i + 3;
-}
-
-let it = add3(someObj);
-
-try {
-  while (true) {
-    document.write(it.next() + "<br>\n");
-  }
-} catch (err if err instanceof StopIteration) {
-  document.write("End of record.<br>\n");
-}
-
- -

JavaScript 1.8 では、ジェネレータ式を代わりに使うことで、カスタムジェネレータ関数を作成する必要性が無くなります:

- -
let it = (i + 3 for (i in someObj));
-
-try {
-  while (true) {
-    document.write(it.next() + "<br>\n");
-  }
-} catch (err if err instanceof StopIteration) {
-  document.write("End of record.<br>\n");
-}
-
- -

ジェネレータ式は、関数に値として渡すこともできます。これは配列があらかじめ生成される典型的な配列内包の場合と違って、本当に必要とされるまでジェネレータが実行されないので、特に注目に値します。その違いの例を挙げます:

- -

JavaScript 1.7 の配列内包を使った場合

- -
handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
-
-function handleResults( results ) {
-  for ( let i in results )
-    // ...
-}
-
- -

JavaScript 1.8 のジェネレータ式を使った場合

- -
handleResults( i for ( i in obj ) if ( i > 3 ) );
-
-function handleResults( results ) {
-  for ( let i in results )
-    // ...
-}
-
- -

この 2 つの例の大きな違いは、配列内包を使った場合には配列を内包するときと繰り返し処理を行うときの 2 度 "obj" 構造に対してループが実行されるのに対して、ジェネレータ式を使った場合には 1 度しかループが実行されずに済むという点です。

- -

さらなる Array の拡張

- -

JavaScript 1.8 では、 Array オブジェクトに 2 つの新しい繰り返しのメソッドが導入されました:

- - - -

for..in の分配方法の変更

- -

JavaScript 1.8 のリリースで生じた変更に、JavaScript 1.7 で導入された配列のキー/値の組への分割代入に関連するバグ修正があります。これまでは for ( var [key, value] in array ) を使うことで、配列のキー/値の組を分割代入することができました。しかしこのせいで、配列の配列において値を分割代入することが不可能になっていました。現在この問題は解決しています。({{Bug("366941")}})

diff --git a/files/ja/web/javascript/new_in_javascript/index.html b/files/ja/web/javascript/new_in_javascript/index.html deleted file mode 100644 index db95fd3afe..0000000000 --- a/files/ja/web/javascript/new_in_javascript/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: JavaScript の新機能 -slug: Web/JavaScript/New_in_JavaScript -translation_of: Archive/Web/JavaScript/New_in_JavaScript ---- -
{{jsSidebar("New_in_JS")}}
- -

このページはJavaScriptバージョン履歴の情報とFirefoxのようなMozilla/SpiderMonkeyベースのJavaScriptアプリケーションの実装状況を表示します。

- -

ECMAScript versions

- -
-
Language resources
-
JavaScript言語の標準になっている、ECMAScript standardsを学ぶことが出来ます。
-
ECMAScript 5 support
-
Mozillaベースのエンジン(RhinoやSpidermonkeyなど)や製品におけるECMA-262 Edition 5.1の実装状況を表します。
-
ECMAScript 6 support
-
Mozillaベースのエンジン(RhinoやSpidermonkeyなど)や製品におけるECMA-262 Edition 6の実装状況を表します。
-
ECMAScript 7 support
-
Mozillaベースのエンジン(RhinoやSpidermonkeyなど)や製品におけるECMA-262 Edition 7の実装状況を表します。
-
- -

JavaScript リリースノート

- -
-
Firefox JavaScript changelog
-
Firefox5とそれ以降のJavaScriptのチェンジログについてはこの項目を参照してください。
-
 
-
Chrome JavaScript changelog
-
(TODO). See this changelog for JavaScript features implemented in Chrome releases.
-
- -

JavaScript versions

- -

Deprecated ({{deprecated_inline()}}). The explicit versioning and opt-in of language features was Mozilla-specific and is in process of being removed. Firefox 4 was the last version which referred to an JavaScript version (1.8.5). With new ECMA standards, JavaScript language features are now often mentioned with their initial definition in ECMA-262 Editions such as Edition 6 (ES6).

- -

JavaScript was released as version 1.0 in March 1996 in Netscape Navigator 2.0 and Internet Explorer 2.0.

- -
-
JavaScript 1.1
-
Version shipped in Netscape Navigator 3.0. Released on August 19, 1996.
-
JavaScript 1.2
-
Version shipped in Netscape Navigator 4.0-4.05. Released on June 11, 1997.
-
JavaScript 1.3
-
Version shipped in Netscape Navigator 4.06-4.7x. Released on October 19, 1998.
- Standardization work to be compliant with ECMA-262 1st and 2nd Edition.
-
JavaScript 1.4
-
Version shipped in Netscape's server side JavaScript. Released in 1999.
-
JavaScript 1.5
-
Version shipped in Netscape Navigator 6.0 and Firefox 1.0. Release on November 14, 2000.
- 標準化団体の ECMA-262 3rd Editionに準拠しています。
-
JavaScript 1.6
-
Version shipped in Firefox 1.5. Released in November 2005.
- ECMAScript for XML (E4X)やnew Array methods plus String and Array generics.
-
JavaScript 1.7
-
Version shipped in Firefox 2. Released in October 2006.
- Includes generators, iterators, array comprehensions, let expressions, and destructuring assignment.
-
JavaScript 1.8
-
Version shipped in Firefox 3. Released in June 2008.
- Includes expression closures, generator expressions and Array.reduce()
-
JavaScript 1.8.1
-
Version shipped in Firefox 3.5. Released on June 30, 2009.
- Includes the TraceMonkey JIT and supports native JSON.
-
JavaScript 1.8.2
-
Version shipped in Firefox 3.6. Released June 22, 2009.
- Includes only minor changes.
-
JavaScript 1.8.5
-
Version shipped in Firefox 4. Released July 27, 2010.
- Includes many new features for ECMA-262 Edition 5 compliance.
- This is the last JavaScript version.
-
- -

Features still requiring version opt-in

- -
-
let statement
-
The let statement requires the JavaScript version 1.7 (or higher) opt-in. See {{bug(932517)}} and {{bug(932513)}}.
-
diff --git a/files/ja/web/javascript/reference/functions/arguments/caller/index.html b/files/ja/web/javascript/reference/functions/arguments/caller/index.html deleted file mode 100644 index 3626d7644b..0000000000 --- a/files/ja/web/javascript/reference/functions/arguments/caller/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: caller -slug: Web/JavaScript/Reference/Functions/arguments/caller -translation_of: Archive/Web/JavaScript/arguments.caller ---- -

 

- -

{{ Obsolete_header() }}

- -

{{ 英語版章題("Summary") }}

- -

概要

- -

現在実行している関数を呼び出した関数を示します。

- - - - - - - - - - - -
arguments のプロパティ
実装されたバージョン:JavaScript 1.1, NES 2.0 -

JavaScript 1.3: 非推奨とする。JavaScript ??: Removed

-
- -

{{ 英語版章題("Description") }}

- -

説明

- -

arguments.caller はもはや使用されていません。 代わりに関数オブジェクトの非標準の {{jsxref("Function.caller")}} プロパティが使えます。詳細はその説明を参照してください。

- -

arguments.caller プロパティは関数本体の中でのみ利用可能です。

- -

{{ 英語版章題("Examples") }}

- -

- -

次のコードは、関数の中で arguments.caller の値をチェックします。

- -
function myFunc() {
-   if (arguments.caller == null) {
-      return ("The function was called from the top!");
-   } else
-      return ("This function's caller was " + arguments.caller);
-}
-
- -

 

- -

 

- -

{{ languages( { "en": "en/JavaScript/Reference/Functions_and_function_scope/arguments/caller", "fr": "fr/R\u00e9f\u00e9rence_de_JavaScript_1.5_Core/Fonctions/arguments/caller", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Funkcje/arguments/caller" } ) }}

diff --git a/files/ja/web/javascript/reference/global_objects/array/observe/index.html b/files/ja/web/javascript/reference/global_objects/array/observe/index.html deleted file mode 100644 index e480baf2e3..0000000000 --- a/files/ja/web/javascript/reference/global_objects/array/observe/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Array.observe() -slug: Web/JavaScript/Reference/Global_Objects/Array/observe -tags: - - Array - - JavaScript - - Method - - Obsolete -translation_of: Archive/Web/JavaScript/Array.observe ---- -
{{JSRef}} {{obsolete_header}}
- -

Array.observe() メソッドは、配列への変更を非同期で監視するために使用されました。オブジェクト用の {{jsxref("Object.observe()")}} と似ています。変更内容は、発生した順番に時系列で提供されます。accept type list ["add", "update", "delete", "splice"] で呼び出された Object.observe() と同等です。しかしながら、この API の使用は非推奨となり、ブラウザから削除されています。代わりに、一般的な {{jsxref("Proxy")}} オブジェクトを使用してください。

- -

構文

- -
Array.observe(arr, callback)
- -

引数

- -
-
arr
-
監視される配列。
-
callback
-
変更されるたびに毎回呼び出される関数。次の引数を持ちます: -
-
changes
-
変更されたオブジェクトの配列。変更オブジェクトのプロパティは次の通り: -
    -
  • name: 変更されたプロパティの名前。
  • -
  • object: 変更後の配列。
  • -
  • type: 変更の種類を示す文字列。 "add", "update", "delete", "splice" のいずれか一つ。
  • -
  • oldValue: "update", "delete" の場合のみ、変更前の値。
  • -
  • index: "splice" の場合のみ。変更が発生したインデックス。
  • -
  • removed: "splice" の場合のみ。取り除かれた要素の配列。
  • -
  • addedCount: "splice" の場合のみ。追加された要素の数。
  • -
-
-
-
-
- -

説明

- -

callback 関数は、arr に変更が発生する度に呼ばれます。すべての変更が発生した順に配列として渡されます。

- -
-

Array.prototype.pop() など、Array メソッド経由の変更は、"splice" 変更として報告されます。配列の長さが変更されないインデックスの割り当て変更は、"update" 変更として報告されます。

-
- -

- -

異なる変更のログを取る

- -
var arr = ['a', 'b', 'c'];
-
-Array.observe(arr, function(changes) {
-  console.log(changes);
-});
-
-arr[1] = 'B';
-// [{type: 'update', object: , name: '1', oldValue: 'b'}]
-
-arr[3] = 'd';
-// [{type: 'splice', object: , index: 3, removed: [], addedCount: 1}]
-
-arr.splice(1, 2, 'beta', 'gamma', 'delta');
-// [{type: 'splice', object: , index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]
-
- -

仕様

- -

Strawman proposal specification.

- -

ブラウザ実装状況

- -
-

{{Compat("javascript.builtins.Array.observe")}}

-
- -

 

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html b/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html deleted file mode 100644 index 1eafff5efa..0000000000 --- a/files/ja/web/javascript/reference/global_objects/array/unobserve/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Array.unobserve -slug: Web/JavaScript/Reference/Global_Objects/Array/unobserve -tags: - - Array - - JavaScript - - Method - - Obsolete -translation_of: Archive/Web/JavaScript/Array.unobserve ---- -
{{JSRef}} {{obsolete_header}}
- -

Array.unobserve()メソッドは、{{jsxref("Array.observe()")}} で設定された監視を削除するために使われていましたが、非推奨となりブラウザから削除されました。代わりに、一般的な {{jsxref("Proxy")}} オブジェクトを使用してください。

- -

構文

- -
Array.unobserve(arr, callback)
- -

引数

- -
-
arr
-
監視を停止する配列。
-
callback
-
arr 配列の変更時に毎回呼び出されるのを停止するための、オブザーバへの参照。
-
- -

説明

- -

配列からオブザーバを削除するため、Array.unobserve() は {{jsxref("Array.observe()")}} の後に呼び出される必要があります。

- -

callback は関数への参照とすべきであり、匿名関数ではいけません。なぜなら、この参照は以前のオブザーバを解除するために使用されるからです。callback として匿名関数を使った Array.unobserve() の呼び出しは、オブザーバを削除できないので無意味です。

- -

- -

配列の監視を削除

- -
var arr = [1, 2, 3];
-
-var observer = function(changes) {
-  console.log(changes);
-}
-
-Array.observe(arr, observer);
-​
-arr.push(4);
-// [{type: "splice", object: <arr>, index: 3, removed:[], addedCount: 1}]
-
-Array.unobserve(arr, observer);
-
-arr.pop();
-// callback は呼び出されなかった。
- -

匿名関数の使用

- -
var persons = ['Khalid', 'Ahmed', 'Mohammed'];
-
-Array.observe(persons, function (changes) {
-  console.log(changes);
-});
-
-persons.shift();
-// [{type: "splice", object: <arr>, index: 0, removed: [ "Khalid" ], addedCount: 0 }]
-
-Array.unobserve(persons, function (changes) {
-  console.log(changes);
-});
-
-persons.push('Abdullah');
-// [{type: "splice", object: <arr>, index: 2, removed: [], addedCount: 1 }]
-// callback は常に呼び出される。
-
- -

ブラウザ実装状況

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
機能ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポート{{CompatChrome("36")}} [1]{{CompatNo}}{{CompatNo}}{{CompatOpera("23")}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
機能AndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
基本サポート{{CompatNo}}{{CompatChrome("36")}} [1]{{CompatNo}}{{CompatNo}}{{CompatOpera("23")}}{{CompatNo}}
-
- -

[1] Chrome 49 で非推奨になりました。

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html deleted file mode 100644 index 2070e902a4..0000000000 --- a/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: ArrayBuffer.transfer() -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/transfer -tags: - - ArrayBuffer - - ECMAScript7 - - Experimental - - Expérimental(2) - - JavaScript - - Method - - Reference - - Référence(2) - - TypedArrays -translation_of: Archive/Web/JavaScript/ArrayBuffer.transfer ---- -
{{JSRef}} {{SeeCompatTable}}
- -

静的な ArrayBuffer.transfer() メソッドは、oldBuffer のデータから得られる内容の新しい ArrayBuffer を返し、newByteLength によって切断されるかゼロ拡張されます。newByteLengthundefined なら、oldBufferbyteLength が使われます。この操作により oldBuffer はデタッチ状態のままになります。

- -

構文

- -
ArrayBuffer.transfer(oldBuffer [, newByteLength]);
- -

引数

- -
-
oldBuffer
-
転送するための {{jsxref("ArrayBuffer")}} オブジェクト
-
newByteLength
-
新しい ArrayBuffer オブジェクトのバイト長
-
- -

戻り値

- -

新しい ArrayBuffer オブジェクト。

- -

説明

- -

ArrayBuffer.transfer() メソッドによって、ArrayBuffer オブジェクトを成長し、デタッチできます。コピーなしで ArrayBuffer を成長される能力は大規模バッファに対してもっと早くなる利点を持っています。ArrayBuffer をデタッチする機能によって、基底メモリがリリースされるときを開発者が明示的に制御できます。これにより、すべての参照を削除し、ガベージコレクションを待たずに済みます。

- -

- -
var buf1 = new ArrayBuffer(40);
-new Int32Array(buf1)[0] = 42;
-
-var buf2 = ArrayBuffer.transfer(buf1, 80);
-buf1.byteLength; // 0
-buf2.byteLength; // 80
-new Int32Array(buf2)[0]; // 42
-
-var buf3 = ArrayBuffer.transfer(buf2, 0);
-buf2.byteLength; // 0
-buf3.byteLength; // 0
-
- -

ポリフィル

- -

次のコードをスクリプトの先頭に挿入することで、transfer() の機能の大部分をネイティブにサポートしていない環境でも対処できるようになります。これはこの API と完全に同じではありませんが、この関数はある ArrayBuffer からそのほかの ArrayBuffer にデータを変換します。

- -
if (!ArrayBuffer.transfer) {
-    ArrayBuffer.transfer = function(source, length) {
-        source = Object(source);
-        var dest = new ArrayBuffer(length);
-        if (!(source instanceof ArrayBuffer) || !(dest instanceof ArrayBuffer)) {
-            throw new TypeError('Source and destination must be ArrayBuffer instances');
-        }
-        if (dest.byteLength >= source.byteLength) {
-            var nextOffset = 0;
-            var leftBytes = source.byteLength;
-            var wordSizes = [8, 4, 2, 1];
-            wordSizes.forEach(function(_wordSize_) {
-                if (leftBytes >= _wordSize_) {
-                    var done = transferWith(_wordSize_, source, dest, nextOffset, leftBytes);
-                    nextOffset = done.nextOffset;
-                    leftBytes = done.leftBytes;
-                }
-            });
-        }
-        return dest;
-        function transferWith(wordSize, source, dest, nextOffset, leftBytes) {
-            var ViewClass = Uint8Array;
-            switch (wordSize) {
-                case 8:
-                    ViewClass = Float64Array;
-                    break;
-                case 4:
-                    ViewClass = Float32Array;
-                    break;
-                case 2:
-                    ViewClass = Uint16Array;
-                    break;
-                case 1:
-                    ViewClass = Uint8Array;
-                    break;
-                default:
-                    ViewClass = Uint8Array;
-                    break;
-            }
-            var view_source = new ViewClass(source, nextOffset, Math.trunc(leftBytes / wordSize));
-            var view_dest = new ViewClass(dest, nextOffset, Math.trunc(leftBytes / wordSize));
-            for (var i = 0; i < view_dest.length; i++) {
-                view_dest[i] = view_source[i];
-            }
-            return {
-                nextOffset : view_source.byteOffset + view_source.byteLength,
-                leftBytes : source.byteLength - (view_source.byteOffset + view_source.byteLength)
-            }
-        }
-    };
-}
- -

仕様

- -

いづれの現行仕様のドラフトにも含まれていませんが、ECMA-262 エディションの機能として提案されました

- -

ブラウザ実装状況

- - - -

{{Compat("javascript.builtins.ArrayBuffer.transfer")}}

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/iterator/index.html b/files/ja/web/javascript/reference/global_objects/iterator/index.html deleted file mode 100644 index 3a641ff7d9..0000000000 --- a/files/ja/web/javascript/reference/global_objects/iterator/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Iterator -slug: Web/JavaScript/Reference/Global_Objects/Iterator -tags: - - Deprecated - - JavaScript - - Legacy Iterator - - Reference -translation_of: Archive/Web/Iterator ---- -
{{jsSidebar("Objects")}}
- -
非標準。 Iterator 関数は SpiderMonkey固有の機能で、ある時点で削除されます。将来向きの用途に対して、for..ofループとiterator protocolを使用することを検討してください。
- -

概要

- -

レガシーイテレータプロトコルを実装し、オブジェクトの列挙可能なプロパティに対して反復するオブジェクトを返します。

- -

構文

- -
Iterator(object, [keyOnly])
- -

引数

- -
-
object
-
プロパティを反復処理するオブジェクト。
-
keyOnly
-
keyOnly が truthy な値である場合は、Iterator.prototype.nextproperty_name のみ返します。
-
- -

説明

- -

使用方法の概要がIterators and Generatorsページで提供されています。

- -

メソッド

- -
-
Iterator.prototype.next
-
[property_name, property_value]フォーマットで次のアイテムを返します。それ以上のアイテムが存在しない場合、StopIterationをスローします。
-
- -

- -

オブジェクトのプロパティを反復処理する

- -
var a = {
-  x: 10,
-  y: 20,
-};
-var iter = Iterator(a);
-console.log(iter.next()); // ["x", 10]
-console.log(iter.next()); // ["y", 20]
-console.log(iter.next()); // throws StopIteration
-
- -

レガシーデストラクタfor-in文を使用してオブジェクトのプロパティを反復処理する

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-for (var [name, value] in Iterator(a)) {
-  console.log(name, value);   // x 10
-                              // y 20
-}
-
- -

for-ofとともにイテレータを使用する

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-for (var [name, value] of Iterator(a)) {  // @@iterator is used
-  console.log(name, value);   // x 10
-                              // y 20
-}
- -

仕様

- -

非標準。すべての現在の仕様書でサポートされていません。

- -

ブラウザ実装状況

- -

サポートされていません。バージョン 57 より前の Firefox でサポートしていました。

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/object/count/index.html b/files/ja/web/javascript/reference/global_objects/object/count/index.html deleted file mode 100644 index 62975242b6..0000000000 --- a/files/ja/web/javascript/reference/global_objects/object/count/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Object.prototype.__count__ -slug: Web/JavaScript/Reference/Global_Objects/Object/count -tags: - - JavaScript - - Object - - Obsolute - - Property - - Prototype -translation_of: Archive/Web/JavaScript/Object.count ---- -
{{JSRef}}{{Non-standard_Header}}{{obsolete_header("gecko2")}}
- -

__count__ プロパティはオブジェクトの列挙可能なプロパティの数を保存するために使用されていましたが、削除されました。

- -

構文

- -
obj.__count__
- -

- -
{ 1: 1 }.__count__              // 1
-[].__count__                    // 0
-[1].__count__                   // 1
-[1, /* hole */, 2, 3].__count__ // 3
-
- -

仕様書

- -

どの仕様書でも定義されていません。

- -

ブラウザーの対応

- -
- - -

{{Compat("javascript.builtins.Object.count")}}

-
- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/parallelarray/index.html b/files/ja/web/javascript/reference/global_objects/parallelarray/index.html deleted file mode 100644 index 192b09e3f4..0000000000 --- a/files/ja/web/javascript/reference/global_objects/parallelarray/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: ParallelArray -slug: Web/JavaScript/Reference/Global_Objects/ParallelArray -tags: - - JavaScript - - Obsolete - - ParallelArray -translation_of: Archive/Web/ParallelArray ---- -
-
{{jsSidebar("Objects")}}{{obsolete_header}}
-
- -
p>ノート: このオブジェクトは Firefox 17 で実装され {{ Gecko(29) }} から削除されました。現在は Nightly チャネルでのみ ParallelJS (PJS) を使用可能です ({{ bug(944074) }})。
- -

ParallelArray の目標は、ウェブアプリケーション上でデータ並列性を実現することです。ParallelArray 上で利用可能な高階関数は並列的に実行されます(ただし、並列的に実行できない場合は必要に応じて直列実行にフォールバックします)。並列実行性を保証したい場合には、Javascript の機能のうち、Firefox がサポートする並列可能なサブセットのみを利用するようにすることが推奨されています。

- -

構文

- -
new ParallelArray()
-new ParallelArray([element0, element1, ...])
-new ParallelArray(arrayLength, elementalFunction)
- -

ParallelArray インスタンス

- -

プロパティ

- -
-
length
-
ParallelArrayの要素の数
-
- -

メソッド

- -
-
map
-
reduce
-
scan
-
scatter
-
filter
-
flatten
-
partition
-
get
-
- -

- -

例: 並列的に map 処理を行う

- -
var p = new ParallelArray([0, 1, 2, 3, 4]);
-var m = p.map(function (v) {
-  return v + 1;
-});
- -

参考文献

- - diff --git a/files/ja/web/javascript/reference/global_objects/stopiteration/index.html b/files/ja/web/javascript/reference/global_objects/stopiteration/index.html deleted file mode 100644 index 79972224a8..0000000000 --- a/files/ja/web/javascript/reference/global_objects/stopiteration/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: StopIteration -slug: Web/JavaScript/Reference/Global_Objects/StopIteration -tags: - - JavaScript - - Legacy Iterator - - Non-standard - - Reference - - StopItaration -translation_of: Archive/Web/StopIteration ---- -
{{jsSidebar("Objects")}}
- -
非標準。 StopIteration オブジェクトはSpiderMonkey特有の機能です。将来向きの用途に対して、for..of ループとiterator protocolを使用することを検討してください。
- -

概要

- -

StopIteration オブジェクトはレガシーイテレータプロトコルにおける反復の終了を通知するために使用します。

- -

構文

- -
StopIteration
- -

説明

- -

使用法の概要は、Iterators and Generators ページ上で利用可能です

- -

- -

StopIterationIteratorによってスローされます。

- -
var a = {
-  x: 10,
-  y: 20,
-};
-var iter = Iterator(a);
-console.log(iter.next()); // ["x", 10]
-console.log(iter.next()); // ["y", 20]
-console.log(iter.next()); // throws StopIteration
-
- -

StopIterationをスローする。

- -
function f() {
-  yield 1;
-  yield 2;
-  throw StopIteration;
-  yield 3; // this is not executed.
-}
-
-for (var n in f()) {
-  console.log(n);   // 1
-                    // 2
-}
-
- -

仕様

- -

非標準。すべての現在の標準仕様でサポートされていません。

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/global_objects/string/quote/index.html b/files/ja/web/javascript/reference/global_objects/string/quote/index.html deleted file mode 100644 index 2a074faf32..0000000000 --- a/files/ja/web/javascript/reference/global_objects/string/quote/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: String.prototype.quote() -slug: Web/JavaScript/Reference/Global_Objects/String/quote -tags: - - String - - String Methods -translation_of: Archive/Web/JavaScript/String.quote ---- -
{{JSRef}} {{obsolete_header("37")}} {{non-standard_header}}
- -

特殊文字をエスケープシーケンスで置換しダブル・クォーテーション(")でラップした文字列のコピーを返します。

- -

構文

- -
str.quote()
- -

Return value

- -

A new string representing the original string wrapped in double-quotes, with any special characters escaped.

- -

- -

In the table below thequote()method replaces any special characters and wraps the strings in double-quotes. Also note the third column where a wrapped {{jsxref("Global_Objects/eval", "eval()")}} evaluates the escape sequences again.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
strstr.quote()eval( str.quote() )
Hello world!"Hello world!"Hello world!
Hello
-         world!
"Hello\n\tworld!"Hello
-         world!
" \ — '"\" \\ \u2014 '"" \ — '
- -

仕様

- -

Not part of any standard. Implemented in JavaScript 1.3.

- -

ポリフィル

- -
if (!String.prototype.quote)
-    String.prototype.quote = function(){
-        return JSON.stringify( this ); // since IE8
-    }
- -

ブラウザ互換性情報

- - - -

{{Compat("javascript.builtins.String.quote")}}

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/operators/array_comprehensions/index.html b/files/ja/web/javascript/reference/operators/array_comprehensions/index.html deleted file mode 100644 index 814bdd9eb7..0000000000 --- a/files/ja/web/javascript/reference/operators/array_comprehensions/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: 配列内包表記 -slug: Web/JavaScript/Reference/Operators/Array_comprehensions -tags: - - JavaScript - - Non-standard - - Operator - - Reference -translation_of: Archive/Web/JavaScript/Array_comprehensions ---- -
非標準。使用しないでください!
-配列内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には、{{jsxref("Array.prototype.map")}}、{{jsxref("Array.prototype.filter")}}、{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}、{{jsxref("Operators/Spread_operator", "スプレッド構文", "", 1)}} の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

array comprehension 構文は、既存のものに基づいている新しい配列をすばやく組み立てることができるJavaScriptの式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!

- -

構文

- -
[for (x of iterable) x]
-[for (x of iterable) if (condition) x]
-[for (x of iterable) for (y of iterable) x + y]
-
- -

説明

- -

配列の内包表記内で、下記の二種類のコンポーネントが許されています。:

- - - -

for-of イテレーションは常に最初のコンポーネントです。複数のfor-of イテレーションは、ステートメントが許可されている場合。

- -

配列内包は以前、ECMAScript 2016 で標準化を提案されていました。これは別のものに基づいて新たな配列を構成するための手っ取り早い方法を提供します。配列内包は一般に、{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} を呼び出す代わりとして、あるいはそれら 2 つを結合する手段として用いることができます。

- -

次の配列内包は数値の配列を取り込んで、その各数値を 2 倍した値による新しい配列を作成します。

- -
var numbers = [1, 2, 3, 4];
-var doubled = [for (i of numbers) i * 2];
-console.log(doubled); // logs 2,4,6,8
-
- -

これは以下の {{jsxref("Array.prototype.map", "map()")}} による操作と同等です:

- -
var doubled = numbers.map(i => i * 2);
-
- -

配列内包は、特定の式にマッチするアイテムの選択に用いることもできます。以下は、偶数だけを選択する内包です:

- -
var numbers = [1, 2, 3, 21, 22, 30];
-var evens = [for (i of numbers) if (i % 2 === 0) i];
-console.log(evens); // logs 2,22,30
-
- -

同じ目的で {{jsxref("Array.prototype.filter", "filter()")}} を用いることができます:

- -
var evens = numbers.filter(i => i % 2 === 0);
-
- -

{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} 方式の操作を、ひとつの配列内包に統合することができます。以下は偶数だけをフィルタリングして、それらを 2 倍した値を含む配列を作成します:

- -
var numbers = [1, 2, 3, 21, 22, 30];
-var doubledEvens = [for (i of numbers) if (i % 2 === 0) i * 2];
-console.log(doubledEvens); // logs 4,44,60
-
- -

配列内包の角括弧は、スコープ目的の暗黙的なブロックをもたらします。新しい変数 (上記の例における i ) は、{{jsxref("Statements/let","let")}} を用いて宣言されたかのように扱われます。つまり、それらの変数は配列内包の外部で使用できません。

- -

配列内包の入力自体は、配列である必要はありません。イテレータおよびジェネレータ も使用できます。

- -

文字列を入力とすることもできます。(配列状のオブジェクトにおいて) 前出の filter や map の動作を実現するには以下のようにします:

- -
var str = 'abcdef';
-var consonantsOnlyStr = [for (c of str) if (!(/[aeiouAEIOU]/).test(c)) c].join(''); // 'bcdf'
-var interpolatedZeros = [for (c of str) c + '0' ].join(''); // 'a0b0c0d0e0f0'
-
- -

繰り返しになりますが入力データの形式は維持されませんので、文字列へ戻すために {{jsxref("Array.prototype.join", "join()")}} を使用しなければなりません。

- -

- -

簡単な配列の内包表記

- -
[for (i of [ 1, 2, 3 ]) i*i ];
-// [ 1, 4, 9 ]
-
-var abc = [ "A", "B", "C" ];
-[for (letters of abc) letters.toLowerCase()];
-// [ "a", "b", "c" ]
- -

if文で配列の内包表記

- -
var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
-[for (year of years) if (year > 2000) year];
-// [ 2006, 2010, 2014 ]
-[for (year of years) if (year > 2000) if(year < 2010) year];
-// [ 2006], the same as below:
-[for (year of years) if (year > 2000 && year < 2010) year];
-// [ 2006]
-
- -

mapfilterを比較する配列の内包表記

- -

配列の内包表記構文を理解する簡単な方法は、Array {{jsxref("Array.map", "map")}}や{{jsxref("Array.filter", "filter")}}メソッドと比較することです。:

- -
var numbers = [ 1, 2, 3 ];
-
-numbers.map(function (i) { return i * i });
-numbers.map(i => i*i);
-[for (i of numbers) i*i ];
-// all are [ 1, 4, 9 ]
-
-numbers.filter(function (i) { return i < 3 });
-numbers.filter(i => i < 3);
-[for (i of numbers) if (i < 3) i];
-// all are [ 1, 2 ]
-
- -

二つの配列の内包表記

- -

二つの配列で動作させるために二つのfor-ofイテレーションを使用する:

- -
var numbers = [ 1, 2, 3 ];
-var letters = [ "a", "b", "c" ];
-
-var cross = [for (i of numbers) for (j of letters) i+j];
-// [ "1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c" ]
-
-var grid = [for (i of numbers) [for (j of letters) i+j]];
-// [
-//  ["1a", "1b", "1c"],
-//  ["2a", "2b", "2c"],
-//  ["3a", "3b", "3c"]
-// ]
-
-[for (i of numbers) if (i > 1) for (j of letters) if(j > "a") i+j]
-// ["2b", "2c", "3b", "3c"], the same as below:
-
-[for (i of numbers) for (j of letters) if (i > 1) if(j > "a") i+j]
-// ["2b", "2c", "3b", "3c"]
-
-[for (i of numbers) if (i > 1) [for (j of letters) if(j > "a") i+j]]
-// [["2b", "2c"], ["3b", "3c"]], not the same as below:
-
-[for (i of numbers) [for (j of letters) if (i > 1) if(j > "a") i+j]]
-// [[], ["2b", "2c"], ["3b", "3c"]]
-
- -

仕様

- -

最初は ECMAScript 2015 のドラフトでしたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスのために ES2015 の古いリビジョンを参照してください。

- -

ブラウザー実装状況

- - - -

{{Compat("javascript.operators.array_comprehensions")}}

- -

古い JS1.7/JS1.8 の内包表記との違い

- -
JS1.7/JS1.8 の内包表記は、バージョン 46 で Gecko から削除しました ({{bug(1220564)}})。
- -

古い内包表記の構文 (使用しないでください!):

- -
[X for (Y in Z)]
-[X for each (Y in Z)]
-[X for (Y of Z)]
-
- -

違い:

- - - -

コード更新の提案について、Bug 1220564 のコメント 42 をご覧ください。

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/operators/expression_closures/index.html b/files/ja/web/javascript/reference/operators/expression_closures/index.html deleted file mode 100644 index 6b0df0f858..0000000000 --- a/files/ja/web/javascript/reference/operators/expression_closures/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 式クロージャ -slug: Web/JavaScript/Reference/Operators/Expression_closures -tags: - - Functions - - JavaScript - - Reference -translation_of: Archive/Web/JavaScript/Expression_closures ---- -
非標準。使用しないでください!
-式クロージャの構文は、非推奨とされた Firefox 固有の機能であり、Firefox Firefox 60 で削除されました。将来向きの用途には、アロー関数 の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

式クロージャは、単純な関数を書くための短縮された関数構文です。

- -

構文

- -
function [name]([param1[, param2[, ..., paramN]]])
-   expression
-
- -

引数

- -
-
name
-
関数名。関数が 匿名 の場合、省略できます。名前は関数本体だけのローカルです。
-
paramN
-
関数に渡される引数の名前。関数は、最大 255 個の引数を持つことができます。
-
expression
-
関数本体を構成する式。
-
- -

説明

- -

これは、単純な関数を書くための短縮された関数構文にすぎません。典型的な Lambda 表記 に似た言語で書くためのものです。

- -

JavaScript 1.7 およびそれ以前:

- -
function(x) { return x * x; }
- -

JavaScript 1.8:

- -
function(x) x * x
- -

この構文により、中括弧と 'return' 文をなくします (それらは暗黙的に宣言されています)。構文が短くなること以外に、このようにコードを書くことへの付加的な利点はありません。

- -

- -

イベントリスナをバインドする短縮表現:

- -
document.addEventListener("click", function() false, true);
-
- -

JavaScript 1.6 から、配列関数の一部でこの表記法を用います:

- -
elems.some(function(elem) elem.type == "text");
-
- -

ブラウザの実装状況

- - - -

{{Compat("javascript.operators.expression_closures")}}

- -

関連情報

- - diff --git a/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html b/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html deleted file mode 100644 index 250b8fad05..0000000000 --- a/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: ジェネレータ内包表記 -slug: Web/JavaScript/Reference/Operators/Generator_comprehensions -tags: - - Iterator - - JavaScript - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Generator_comprehensions ---- -
非標準。使用しないでください!
-ジェネレーター内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には {{jsxref("Statements/function*", "ジェネレーター", "", 1)}} の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

generator comprehension 構文はすぐに既存の反復可能なオブジェクトに基づいて新たなジェネレーター関数を組み立てることができる JavaScript の式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!

- -

構文

- -
(for (x of iterable) x)
-(for (x of iterable) if (condition) x)
-(for (x of iterable) for (y of iterable) x + y)
-
- -

説明

- -

ジェネレータ内包表記の中では、この2種類のコンポーネントが許可されています。:

- - - -

for-ofイテレーションは常に最初のコンポーネントです。複数のfor-of イテレーションまたはif文が許可されています。

- -

{{jsxref("Operators/Array_comprehensions","配列内包","","true")}} の重大な欠点は、メモリー内に新しい配列全体を構築してしまうことです。配列内包への入力自体が小さい配列であるときのオーバーヘッドは小さいのですが、入力が大きな配列や処理の多い (あるいは本当に無限の) ジェネレーターであるときの配列の新規作成は問題になる場合があります。

- -

ジェネレーターはアイテムを必要なときに要求に応じて算出するため、一連のデータの計算処理を軽減します。ジェネレーター内包は構文的に、配列内包とほとんど同じです。こちらは中括弧の代わりに丸括弧を使用して、配列を構築する代わりに、すぐには実行されないジェネレーターを作成します。これらは、ジェネレーター作成を簡略化した構文と考えることができます。

- -

整数の大規模な数列に対して反復処理を行うイテレーター it を想定します。数列の値を 2 倍にする反復処理を行う、新たなイテレーターを作成したいとします。配列内包では、2 倍の値を含むのに十分な配列をメモリー内に作成します:

- -
var doubles = [for (i in it) i * 2];
-
- -

一方ジェネレーター内包は、必要なときに要求に応じて 2 倍の値を生成するイテレーターを作成します:

- -
var it2 = (for (i in it) i * 2);
-console.log(it2.next()); // The first value from it, doubled
-console.log(it2.next()); // The second value from it, doubled
-
- -

ジェネレーター内包が関数の引数として使用されるときは、関数の呼び出しで使用される丸括弧によりジェネレーター内包の外側の丸括弧を省略できます:

- -
var result = doSomething(for (i in it) i * 2);
-
- -

2 つの例の大きな違いは、ジェネレーター内包を使用すると 'obj' 構造を合計 1 回しかループする必要がないのと対照的に、配列内包ではイテレートの際に再びループすることです。

- -

- -

簡単なジェネレータ内包表記

- -
(for (i of [ 1, 2, 3 ]) i*i );
-// generator function which yields 1, 4, and 9
-
-[...(for (i of [ 1, 2, 3 ]) i*i )];
-// [1, 4, 9]
-
-var abc = [ "A", "B", "C" ];
-(for (letters of abc) letters.toLowerCase());
-// generator function which yields "a", "b", and "c"
-
- -

if文と用いたジェネレータ内包表記

- -
var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
-
-(for (year of years) if (year > 2000) year);
-// generator function which yields 2006, 2010, and 2014
-
-(for (year of years) if (year > 2000) if(year < 2010) year);
-// generator function which yields 2006, the same as below:
-
-(for (year of years) if (year > 2000 && year < 2010) year);
-// generator function which yields 2006
-
- -

ジェネレータ関数と比較したジェネレータ内包表記

- -

ジェネレータ内包表記構文を理解する簡単な方法はジェネレータ関数と比較することです。

- -

例 1: 簡単なジェネレータ

- -
var numbers = [ 1, 2, 3 ];
-
-// Generator function
-(function*() {
-  for (let i of numbers) {
-    yield i * i;
-  }
-})()
-
-// Generator comprehension
-(for (i of numbers) i*i );
-
-// Result: both return a generator which yields [ 1, 4, 9 ]
-
- -

例 2: ジェネレータ内でifを使用する

- -
var numbers = [ 1, 2, 3 ];
-
-// Generator function
-(function*() {
-  for (let i of numbers) {
-    if (i < 3) {
-      yield i * 1;
-    }
-  }
-})()
-
-// Generator comprehension
-(for (i of numbers) if (i < 3) i);
-
-// Result: both return a generator which yields [ 1, 2 ]
- -

仕様

- -

ジェネレーター内包は、ECMAScript 2015 で初期化されましたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスについて、ES2015 の古いリビジョンをご覧ください。

- -

ブラウザー実装状況

- - - -

{{Compat("javascript.operators.generator_comprehensions")}}

- -

古い JS1.7/JS1.8 の内包表記との違い

- -
JS1.7/JS1.8 の内包表記は、バージョン 46 で削除しました ({{bug(1220564)}})。
- -

古い内包表記の構文 (使用しないでください!):

- -
(X for (Y in Z))
-(X for each (Y in Z))
-(X for (Y of Z))
-
- -

違い:

- - - -

関連情報

- - diff --git a/files/ja/web/javascript/reference/statements/for_each...in/index.html b/files/ja/web/javascript/reference/statements/for_each...in/index.html deleted file mode 100644 index 72df003bfb..0000000000 --- a/files/ja/web/javascript/reference/statements/for_each...in/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: for each...in -slug: Web/JavaScript/Reference/Statements/for_each...in -tags: - - Deprecated - - E4X - - JavaScript - - Obsolete - - Statement -translation_of: Archive/Web/JavaScript/for_each...in ---- -
{{jsSidebar("Statements")}}
- -
-

for each...in 文は ECMA-357 (E4X) の一部として廃止されました。E4X のサポートは削除されました。代替として、for...of 文が推奨されます。
-
- Firefox は for each...in の使用に対して警告を表示します。また、Firefox 57 以降では動作しません。
- 移行のためのヘルプとして Warning: JavaScript 1.6's for-each-in loops are deprecated をご覧ください。

-
- -

for each...inは指定された変数を、オブジェクトの全プロパティの値に対して反復します。異なるそれぞれのプロパティに対し、指定された文が実行されます。

- -

構文

- -
for each (variable in object) {
-  statement
-}
- -
-
variable
-
任意で var キーワードを用いて宣言された、プロパティの値に対して反復する変数。この変数はループにではなく、関数にローカルです。
-
- -
-
object
-
プロパティが反復されるオブジェクト。
-
- -
-
statement
-
各プロパティに対して実行する文。ループ内で複数の文を実行するには、それらの文をグループ化するために ブロック 文 ({ ... }) を使ってください。
-
- -

説明

- -

ある組み込みプロパティに対しては反復されません。これらには、たとえば StringindexOf メソッドといった、オブジェクトのすべての組み込みメソッドが含まれます。しかしながら、すべてのユーザー定義プロパパティに対しては反復されます。

- -

- -

例: for each...in を使う

- -

警告: このようなループを決して配列に使わないでください。オブジェクトにだけ使ってください。詳しくは for...in をご覧ください。

- -

次のスニペットはオブジェクトのプロパティに対して反復し、それらの合計を計算します:

- -
var sum = 0;
-var obj = {prop1: 5, prop2: 13, prop3: 8};
-
-for each (var item in obj) {
-  sum += item;
-}
-
-console.log(sum); // logs "26", which is 5+13+8
- -

仕様

- -

現行の ECMA-262 仕様には含まれていません。JavaScript 1.6 で実装され、非推奨になりました。

- -

ブラウザー実装状況

- - - -

{{Compat("javascript.statements.for_each_in")}}

- -

参照

- - diff --git a/files/ja/web/javascript/server-side_javascript/index.html b/files/ja/web/javascript/server-side_javascript/index.html deleted file mode 100644 index e56ee2e096..0000000000 --- a/files/ja/web/javascript/server-side_javascript/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Server-Side JavaScript -slug: Web/JavaScript/Server-Side_JavaScript -tags: - - backend - - serverside javascript -translation_of: Archive/Web/Server-Side_JavaScript ---- -

Here's a radical idea: Use one language to write entire Web apps -- and have that language be the one that billions of web pages every day already use.

-

Sounds obvious doesn't it, but for at least the first twelve years of the Web's evolution, developers have pretty much had to use different languages on the server than what they use in the browser which leads to segregated teams, disaprate know-how, and at times plenty of server-side gymnastics with string manipulation to generate HTML or Ajax pages. Of course the simplicity of using JavaScript on the server was part of Netscape's original vision back in the day with Netscape LiveWire. But that was when 350 MHz servers were the best thing you could buy and long before Mozilla emerged from the Netscape organization to continue to advance the state of Web technologies. Today with computing cycles having increased more than 10-fold and Mozilla's work on Rhino (JavaScript interpreter in Java) and SpiderMonkey (JavaScript interpreter in C) and JavaScript itself, we have very solid foundations for JavaScript to become extraordinarily useful and applicable on the server-side again -- this time with performance in the same range as with other popular server-side environments like PHP and Ruby on Rails. And with TraceMonkey to be available soon, JavaScript (both client side and server-side) could see 20x to 40x speed improvements according to Brendan Eich, Mozilla CTO and creator of JavaScript. Server-Side JavaScript is another way that, as this article quotes Brendan, "that Mozilla wants to 'get people thinking about JavaScript as a more general-purpose language' and show them that 'it really is a platform for writing full applications.'"

-

Many vendors today are embedding Mozilla Rhino or Mozilla SpiderMonkey into Web server environments. And some like Aptana with the open source Jaxer server actually embed the entire Mozilla Firefox browser engine (which includes SpiderMonkey) within a Web server to enable server-side Ajax and server-side DOM access in addition to server-side execution of JavaScript.

-- cgit v1.2.3-54-g00ecf