非推奨の機能、廃止された機能

このページのリストは JavaScript で廃止予定(まだ使用できるが削除する予定)とされた、あるいは既に廃止され使用不可となった機能の一覧です。

非推奨の機能

これらの非推奨機能はまだ使用可能かもしれません。しかし将来的には完全に削除されるでしょう。既にコード内でこれらを使用している場合は、代替となるコードに置き換えておく必要があります。

これらの非推奨機能のいくつかは、 ECMAScript 仕様書の付録 B の章に掲載されています。この章は規範的なオプションとして記述されています。つまり、ウェブブラウザーのホストはこれらの機能を実装しなければなりませんが、ウェブ以外のホストは実装しなくても構いません。これらの機能を削除すると後方互換性の問題が発生し、旧形式のウェブサイトが壊れてしまうので、おそらく安定しているのでしょう。(JavaScript で「ウェブを壊すな」という設計目標があります。)それでも、これらはクロスプラットフォームで互換性がなく、すべての解析ツールで対応していないかもしれないので、付録 B の序文にあるように、使用しないことが推奨されます。

... プログラマーは新しい ECMAScript コードを書くときに、これらの機能や振る舞いを使用したり、その存在を想定したりしてはいけません。...

他にも、仕様書本体にあるとはいえ、規範的なオプションとしてマークされているものもあり、依存してはいけません。

HTML コメント

JavaScript のソースは、スクリプトとして解釈された場合、あたかもスクリプトが <script> タグの一部であるかのように、 HTML 風のコメントが利用できます。

以下は、ウェブブラウザー(または Chrome を駆動する V8 エンジンを使用する Node.js)で実行するときに有効な JavaScript です。

js
<!-- コメント
console.log("a"); <!-- その他のコメント
console.log("b");
--> さらにコメント
// Logs "a" and "b"

<!----> はどちらも // のように動作し、行頭のコメントになります。 --> は行頭でのみ有効ですが(後置デクリメントや大なり演算子が続く場合の曖昧さを避けるため)、 <!-- は行のどの位置でも使用することができます。

RegExp

以下のプロパティは非推奨です。これらは置換文字列で使用しても効果がありません。

プロパティ 説明
$1-$9 もしあれば、括弧で囲まれた部分文字列に一致します。
$_ input を参照。
$& lastMatch を参照。
$+ lastParen を参照。
$` leftContext を参照。
$' rightContext を参照。
input 正規表現が一致する対象となる文字列。
lastMatch 最後に一致した文字。
lastParen (もしあれば)最後に括弧で囲まれた部分文字列の一致。
leftContext 一番最近の一致に先行する部分文字列。
rightContext 一番最近の一致の後に続く部分文字列。

警告: これらの静的プロパティは、外部コードと対話する際の問題を発生させる可能性があるため、使用しないようにしましょう。

compile() メソッドは非推奨です。代わりに新しい RegExp のインスタンスを構築してください。

Function

  • 関数の caller プロパティと arguments.callee プロパティは非推奨で、厳格モードでは使用できません。
  • 関数のプロパティとして arguments にアクセスする代わりに、関数クロージャの内部で arguments オブジェクトを使用してください。

Object

String

Date

エスケープシーケンス

  • 文字列内と正規表現リテラル内での、8 進表記のエスケープシーケンス (\ に続く、1 つ、2 つ、もしくは、3 つの 8 進表現の数字) は非推奨です。
  • escapeunescape 関数は非推奨です。特殊文字のためのエスケープシーケンスをエンコードかデコードするためには、encodeURIencodeURIComponentdecodeURIdecodeURIComponent を使用してください。

with 文は非推奨であり、厳格モードでは利用できません。

for...in ループヘッダーの var 宣言での初期化子は非推奨であり、厳格モードでは構文エラーになります。厳格モードでない場合は、黙って無視されます。

廃止された機能

これらの廃止された機能は、 JavaScript から完全に削除され、表示されているバージョンの JavaScript からは使用できなくなりました。

RegExp

以下のプロパティは RegExp インスタンスのものとなり、 RegExp コンストラクターのものではなくなりました。

プロパティ 説明
global 文字列中の使用可能なすべての照合に対して正規表現をテストするか、最初の照合のみに対してテストするかを指定します。
ignoreCase 文字列の照合を試みる際に、大文字と小文字を無視するかどうかを指定します。
lastIndex 次の照合を始める位置のインデックス。
multiline (RegExp.$* でも) 複数行にまたがる文字列を検索するかどうか。
source パターンのテキストです。

valueOf() メソッドは、 RegExp に特化したメソッドではなくなりました。自分自身を返す Object.prototype.valueOf() を使用します。

Function

  • Function の arity プロパティは廃止されました。代わりに length を使用してください。

Object

プロパティ 説明 代替
__count__ ユーザー定義オブジェクトに直接定義された列挙可能なプロパティの数を返します。 Object.keys()
__parent__ オブジェクトのコンテキストを指し示します。 直接の置き換えなし
__iterator__ 旧形式のイテレーターと共に使用 Symbol.iterator および新しい反復処理プロトコル
__noSuchMethod__ 存在しないプロパティがメソッドとして呼ばれたときに呼び出されるメソッド。 Proxy
Object.prototype.eval() 指定したオブジェクトのコンテキスト内の JavaScript コードの文字列を評価します。 直接の置き換えなし
Object.observe() オブジェクトに対する変更を非同期に監視します。 Proxy
Object.unobserve() オブザーバーを削除します。 Proxy
Object.getNotifier() Object.observe() で変更観測を合成的に発生させることができる通知オブジェクトを作成します。 直接の置き換えなし
Object.prototype.watch() プロパティが代入されたときに呼び出されるハンドラーコールバックをプロパティに取り付けます。 Proxy
Object.prototype.unwatch() プロパティの監視ハンドラーを削除します。 Proxy

String

  • 標準外の String の汎用メソッド、たとえば String.slice(myStr, 0, 12), String.replace(myStr, /./g, "!") などは、 Firefox 1.5 (JavaScript 1.6) で導入され、Firefox 53 で非推奨となり、そして Firefox 68 で廃止されました。代わりに String.prototype 上のメソッドを Function.call と共に使用することができます。
  • String.prototype.quote は Firefox 37 で削除されました。
  • 標準外の flags 引数は String.prototype.search, String.prototype.match, String.prototype.replace で廃止されました。

WeakMap

  • WeakMap.prototype.clear() は Firefox 20 で追加され、 Firefox 46 で削除されました。 WeakMap ではすべてのキーを操作することはできません。

Date

Array

  • 標準外の Array の汎用メソッド、例えば Array.slice(myArr, 0, 12), Array.forEach(myArr, myFn) などは、 Firefox 1.5 (JavaScript 1.6) で導入され、Firefox 68 で非推奨となり、Firefox 71 で削除されました。代わりに Array.prototype 上のメソッドを Function.call と共に使用することができます。
プロパティ 説明 代替
Array.observe() 配列に対する変更を非同期に監視します。 Proxy
Array.unobserve() オブザーバーを削除します。 Proxy

Number

  • Number.toInteger() は廃止されました。代わりに Math.floorMath.round、その他のメソッドを使用してください。

Proxy

  • Proxy.create および Proxy.createFunction は非推奨です。代わりに Proxy() コンストラクターを使用してください。
  • 以下のトラップは廃止されました。

ParallelArray

  • ParallelArray は廃止されました。

  • for each...in は廃止されました。代わりに for...of を使用してください。
  • let ブロックと let 式は廃止されました。
  • 式クロージャは廃止されました。代わりに通常の関数またはアロー関数を使用してください。

ソーステキストの取得

配列、数値、文字列などの toSource() メソッドと uneval() グローバル関数は廃止されました。代わりに toString() を使用するか、自分自身でシリアライゼーションメソッドを書いてください。

旧形式のジェネレーターとイテレーター

旧形式のジェネレーター関数文と旧形式のジェネレーター関数式は削除されました。旧形式のジェネレーター関数の構文は function キーワードを再利用しており、本体に 1 つ以上の yield 式があると自動的にジェネレーター関数になります - これは今では構文エラーになっています。代わりに function*function*を使用するようにしてください。

配列内包とジェネレーター内包が削除されました。

// 古い配列内包
[for (x of iterable) x]
[for (x of iterable) if (condition) x]
[for (x of iterable) for (y of iterable) x + y]

// 旧形式のジェネレーターの内包
(for (x of iterable) x)
(for (x of iterable) if (condition) x)
(for (x of iterable) for (y of iterable) x + y)

バージョン 26 以前の Firefox では、標準のイテレータープロトコルに類似した別のイテレータープロトコルを実装していました。オブジェクトが next() メソッドを実装しており、呼び出すたびに値を生成し、反復処理の終わりには StopIteration オブジェクトを投げている場合は、そのオブジェクトは古いイテレーターであると言えます。この古いイテレーターのプロトコルは、標準的なイテレーターのプロトコルとは異なる形をとっています。

  • 値は IteratorResult オブジェクトの value プロパティではなく、 next() 呼び出しの返値として直接返されていました。
  • 反復処理の終了は、IteratorResult オブジェクトの done プロパティを通じてではなく、 StopIteration オブジェクトを投げることで表現されていました。

この機能は、StopIteration グローバルコンストラクタとともに、 Firefox 58+ で削除されました。将来に向けた使用方法としては、for...of ループとイテレータープロトコルを使用することを検討してください。

シャープ変数

シャープ変数は廃止されました。循環構造を作成するには、一時変数を使用してください。