第25章 ECMAScript 5の新機能
目次
本書のご購入
(広告です。表示を妨げないでください。)

第25章 ECMAScript 5の新機能

この章では、ECMAScript 5でのみ利用可能な機能をリストアップしています。古いJavaScriptエンジンを使用する必要がある場合は、これらの機能を避けるか、ライブラリを使用して一部の機能を有効にする必要があります(その方法は後述します)。通常、本書ではECMAScript 5を完全にサポートする最新のエンジンを使用していることを前提としています。

ECMAScript 5仕様書には、その範囲に関する以下の記述があります。

ECMAScript第5版(ECMA-262 第5版として公開)

  • は、ブラウザの実装間で一般的になっている言語仕様の事実上の解釈を公式化し、
  • 第3版の公開以降に登場した新機能のサポートを追加しています。そのような機能には、

    • アクセサプロパティ、
    • オブジェクトの反射的な作成と検査、
    • プロパティ属性のプログラムによる制御、
    • 追加の配列操作関数、
    • JSONオブジェクトエンコーディング形式のサポート、
    • エラーチェックとプログラムセキュリティを強化する厳格モードが含まれます。

新機能

ECMAScript 5に含まれる新しい機能は以下のとおりです。

厳格モード(厳格モードを参照)

ファイルまたは関数の先頭に以下の行を記述すると、いわゆる厳格モードがオンになり、JavaScriptをよりクリーンな言語にします。これは、いくつかの機能を禁止し、より多くのチェックを行い、より多くの例外をスローすることによって実現されます。

'use strict';
アクセサ(アクセサ(ゲッターとセッター)を参照)

ゲッターとセッターを使用すると、メソッドを介してプロパティの取得と設定を実装できます。たとえば、次のオブジェクトobjには、fooプロパティのゲッターが含まれています。

> var obj = { get foo() { return 'abc' } };
> obj.foo
'abc'

構文上の変更

ECMAScript 5には、以下の構文上の変更が含まれています。

予約語をプロパティキーとして使用

ドット演算子の後、およびオブジェクトリテラル内の引用符なしのプロパティキーとして、予約語(newfunctionなど)を使用できます。

> var obj = { new: 'abc' };
> obj.new
'abc'
末尾のカンマの許可
オブジェクトリテラルと配列リテラルの末尾のカンマは有効です。
複数行の文字列リテラル
文字列リテラルは、行末をバックスラッシュでエスケープすれば、複数行にまたがることができます。

標準ライブラリの新しい機能

ECMAScript 5では、JavaScriptの標準ライブラリにいくつかの追加が行われました。このセクションでは、カテゴリ別にそれらをリストアップします。

メタプログラミング

プロトタイプの取得と設定(プロトタイプの取得と設定を参照)

  • Object.create()
  • Object.getPrototypeOf()

プロパティ記述子を使用したプロパティ属性の管理プロパティ記述子を参照)

  • Object.defineProperty()
  • Object.defineProperties()
  • Object.create()
  • Object.getOwnPropertyDescriptor()

プロパティの列挙プロパティの繰り返し処理と検出を参照)

  • Object.keys()
  • Object.getOwnPropertyNames()

オブジェクトの保護オブジェクトの保護を参照)

  • Object.preventExtensions()
  • Object.isExtensible()
  • Object.seal()
  • Object.isSealed()
  • Object.freeze()
  • Object.isFrozen()

新しいFunctionメソッド(Function.prototype.bind(thisValue, arg1?, ..., argN?)を参照)

  • Function.prototype.bind()

新しいメソッド

文字列(第12章を参照)

新しいArrayメソッド(Arrayプロトタイプメソッドを参照)

  • Array.isArray()
  • Array.prototype.every()
  • Array.prototype.filter()
  • Array.prototype.forEach()
  • Array.prototype.indexOf()
  • Array.prototype.lastIndexOf()
  • Array.prototype.map()
  • Array.prototype.reduce()
  • Array.prototype.some()

新しいDateメソッド(Dateプロトタイプメソッドを参照)

  • Date.now()
  • Date.prototype.toISOString()

JSON

JSONのサポート第22章を参照)

  • JSON.parse()JSON.parse(text, reviver?)を参照)
  • JSON.stringify()JSON.stringify(value, replacer?, space?)を参照)
  • いくつかの組み込みオブジェクトには、特別なtoJSON()メソッドがあります。

    • Boolean.prototype.toJSON()
    • Number.prototype.toJSON()
    • String.prototype.toJSON()
    • Date.prototype.toJSON()

レガシーブラウザでの作業に関するヒント

レガシーブラウザで作業する必要がある場合、次のリソースが役立ちます。

  • Juriy Zaytsev(「kangax」)による互換性表は、さまざまなバージョンのブラウザでECMAScript 5がどの程度サポートされているかを示しています。
  • es5-shimは、ECMAScript 3のみをサポートするブラウザに、ECMAScript 5の機能のほとんど(すべてではありません)を提供します。
次へ:IV. ヒント、ツール、およびライブラリ