何が変わったか(個別機能)
これから、jQuery 3.0で変わったところを、個別に解説していきましょう。jQuery 3.0では、変更の度合いを次のように分類してます。個々の機能について、どの程度の変更なのかも、併せて紹介することにします。
破壊的な変更(Breaking change)
API仕様が変更され、既存のコードに影響を及ぼす可能性のある変更です。
新機能(Feature)
機能の追加であり、 ほとんどのケースで既存のコードへの影響がない変更です。
非推奨(Deprecated)
jQuery 3.0のうちは存在するものの非推奨となったAPIです。将来の大きなバージョンアップでは削除される可能性があります。
コア機能(1)
コア機能では、破壊的な変更(大きな仕様変更)が6つ、新機能の追加が2つ、非推奨が3つあります。
破壊的な変更
1. Strict Modeのサポート
jQuery3.0は、Strict(厳格)モードでも動作するようになりました。jQuery内のコードで、use strictが宣言されています。Strictモードとは、より厳格にエラーチェックが行われるモードで、従来ではエラーにならなかったような、あいまいな実装でもエラーとして検知することが可能となっています。
ただし、jQuery3.0を利用する側のコードでは、Strictモードが必須ではなく、Strictモードではない従来どおりのコードで問題ありません。
2. document-readyハンドラの非同期化
document-readyハンドラとは、DOMの読み込み完了後に呼び出されるハンドラです。このハンドラには、DOM解析が完了した時点で実行したい処理を記述します。
従来は、document-readyハンドラが追加された時点で、すでにDOM解析が完了してready状態のときは、同期的に処理が実行されていました。jQuery 3.0からは、ready状態にかかわらず、非同期で処理を行うようになります。その結果、処理の順序の一貫性が保証されます。
たとえば、次のような処理では、従来は、必ずしも"outside ready"、"ready"の順に出力されませんでした。jQuery 3.0からは、必ず"outside ready"、"ready"の順になります。
$(function(){ console.log("ready"); }); console.log("outside ready");
また、document-readyハンドラが複数あった場合、非同期処理のため、どこかのハンドラでエラーがあったとしても、他のハンドラは影響を受けずに実行されることになります。
3. $.isNumericの処理変更
数値かどうかを判定する$.isNumericメソッドは、数値と数値に変換できる文字列だけに適用され、独自にtoStringメソッドを実装したオブジェクトには適用できなくなりました。
var obj = new Object(); obj.toString = function() { return "123"; }; console.log( $.isNumeric(obj) ); // false(従来はtrue)
4. 非推奨の.contextと.selectorを削除
バージョン1.9から非推奨になっていたcontext、selectorプロパティが削除されました。
5. ドキュメントにない内部メソッドの無効化
内部メソッドにする予定でドキュメントに記載していなかった次のメソッドは、外部から利用できなくなりました。
- $.swap
- $.buildFragment
- $.domManip
6. 空のコレクションに対するメソッドの戻り値の変更
空のjQueryコレクションに対して、次のメソッドを呼んだ場合、従来は戻り値がnullとなっていましたが、undefinedになりました。
- .width()
- .height()
- .innerWidth()
- .innerHeight()
- .outerWitdh()
- .outerHeight()
- .offsetTop()
- .offsetLeft()