***
7307 ワード
ECMAScript 5.1(またはES 5のみ)は、ECMAScript(JavaScriptの仕様に基づく)規格の最新の修正です.HTML 5仕様プロセスの本質と同様に、ES 5は既存のJavaScriptメソッドに文を追加し、元のECMAScriptオブジェクトを統合することで標準化されています.
ES 5の厳格モード(strict mode)
JSファイルまたは関数の上部(文なし、注釈あり)に
厳格なモードを開くためのいくつかの注意グローバル変数変数明示的に宣言変数名のスペルミスは例外を放出します(通常モードでは新しいグローバル変数が作成され、後でエラーが報告される可能性があります) 通常モードでサイレントに失敗した割り当て操作(書き込み不可属性に値を割り当て、読み取り専用属性(getter-only)に値を割り当て、拡張不可オブジェクトの新しい属性に値を割り当てる)は、例外(通常モードではヒントなし) を放出します.厳格モードでは、削除できない属性を削除しようとすると異常(通常モードではヒントなし) が投げ出す.オブジェクト内のすべての属性名は、オブジェクト内で一意でなければならない(通常モードでは前者を上書きする) . 1 1つの関数内のすべてのパラメータ名は、関数内で一意でなければならない(通常モードで複数の重複するパラメータがある場合はarguments[i]で読み取ることができる) .関数は最上位に宣言する必要があり、非関数のコードブロック内で関数 を宣言することは許されない.厳格モードでは、変数を直接削除することはできません. を削除できるのはconfigurableがtrueに設定されているオブジェクト属性のみです.
JSON
ES 5は、シーケンス化(JSOn.stringify)および逆シーケンス化(JSOn.parse)オブジェクトがJSON形式であるグローバルJSONオブジェクトを提供する. JSON.stringify
ECMAScript値を受け入れてJSON形式の文字列に変換できます.その最も簡単な形式の中で、JSON.stringifyは値を受け入れて文字列を返します.
値文字列化の方法を変更したり、選択したフィルタリングを提供したりする必要がある場合は、replacer関数に渡すことができます.replacerメソッドがundefinedを返す場合、キー値ペアは最終的なJSONに含まれません.
同様にspaceパラメータを渡して、結果を返す可読性の助けを得ることができます.スペースパラメータは、インデントされたJSON文字列または文字列の水平インデント当たりのスペース数を示す数値であってもよい.パラメータが10を超える数値、または10文字を超える文字列の場合、数値10または最初の10文字を切り取ることになります. JSON.parse
テキスト(JSON形式)を受け入れ、ECMAScript値に変換します.オプションのreviverパラメータはkeyとvalueの2つのパラメータを持つ関数で、結果に作用します.フィルタリングと戻り値の変換が可能になります.
解析した値が整数であることを確認するには、reviverメソッドを使用します.
新しい配列メソッド
次の方法はArrayに追加されました.prototypeオブジェクト上(isArrayを除く)
indexOf
類似文字列のindexOf()メソッド
lastIndexOf
indexOf()のような方法(順序が逆)
forEach
ArrayがES 5に追加したメソッドでは、パラメータはすべてfunctionタイプで、デフォルトではパラメータ(遍歴した配列の内容、対応する配列インデックス、配列自体)があります.
forEachメソッド配列要素の遍歴
forEachは、必要なコールバック関数パラメータのほかに、オプションのコンテキストパラメータ(コールバック関数のthisの方向を変更する)(2番目のパラメータ)を受け入れることができます.この2番目のオプションパラメータが指定されていない場合は、グローバルオブジェクトの代わりに(ブラウザではwindow)、厳格なモードではundefinedまで使用します.
map
マッピング(一対一対応).[].map();基本的な使い方はforEachの方法と似ています.
ただしcallbackにはreturn値が必要です(ない場合はundefinedを返すようにします)
filter
フィルタフィルタリング(callbackはここでフィルタの役割を果たし、要素が条件に合致するとフィルタはtrueを返し、filterはフィルタ条件に合致するすべての要素を返します).
インデックスグループfilterの後、フィルタされた新しい配列を返します.使い方はmapに似ています
every
every(callback[,thisObject])配列内の各要素がcallback上でtrueを返すとtrueが返されます.
some(または)
some(callback[,thisObject])は、配列の1つがcallback上でtrueを返す限り、trueを返します.
reduce(左から右への累積)
配列内のすべての要素に対して指定したコールバック関数を呼び出します.コールバック関数の戻り値は累積結果であり、この戻り値は、次回コールバック関数が呼び出されるときにパラメータとして提供されます.
reduceRight(右から左へ加算)
reduceの役割は完全に同じで、唯一の違いは、reduceRightが配列を右から左に遍歴する要素であることです.
ArrayコンストラクタのisArray
Array.isArrayはprototypeオブジェクトではなくArrayコンストラクタに直接書かれています.Array.isArrayは、パラメータの[[Class]]内部属性が「Array」であるか否かに基づいてtrueまたはfalseを返す.
Array.prototype.slice.call
実際の配列にはsliceメソッドがあり、配列を浅いコピー(元の配列に影響を与えない)することができ、返されるのは配列です.類似配列にはlengthプロパティがあり、forループを使用できますが、sliceメソッドを直接使用することはできません.エラーが発生します.でもアリーを通してprototype.slice.callは間違いなく報告され、自身(類似配列)は最初から最後までsliceにコピーされた--真実の配列になった!argumentsなどの配列に似たオブジェクトを実際の配列に変換
bind関数拡張
ES 5の厳格モード(strict mode)
JSファイルまたは関数の上部(文なし、注釈あり)に
"use strict";
を追加すると、厳格モードが有効になります.//
"use strict";
//
function asd(){
"use strict";
//code...
}
厳格なモードを開くためのいくつかの注意
for (i=0; i<5; i++) {code} //
"use strict";
//
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // TypeError
//
var obj2 = { get x() { return 17; } };
obj2.x = 5; // TypeError
//
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // TypeError
"use strict";
delete Object.prototype; // TypeError
JSON
ES 5は、シーケンス化(JSOn.stringify)および逆シーケンス化(JSOn.parse)オブジェクトがJSON形式であるグローバルJSONオブジェクトを提供する.
JSON.stringify(value [, replacer [, space]])
ECMAScript値を受け入れてJSON形式の文字列に変換できます.その最も簡単な形式の中で、JSON.stringifyは値を受け入れて文字列を返します.
var asd = JSON.stringify({a: "1"}) //undefined
typeof asd; //"string"
console.info(asd);// '{"a": "1"}'
値文字列化の方法を変更したり、選択したフィルタリングを提供したりする必要がある場合は、replacer関数に渡すことができます.replacerメソッドがundefinedを返す場合、キー値ペアは最終的なJSONに含まれません.
var asd = { 'a': 1, 's': 2,'d':3}
var as = JSON.stringify(asd, function(key, value){
// 3
if (value == 3) {
return undefined;
} else {
return value;
}
});
console.info(as);
// ' { "a": 1, "s": 2}'
同様にspaceパラメータを渡して、結果を返す可読性の助けを得ることができます.スペースパラメータは、インデントされたJSON文字列または文字列の水平インデント当たりのスペース数を示す数値であってもよい.パラメータが10を超える数値、または10文字を超える文字列の場合、数値10または最初の10文字を切り取ることになります.
var asdf = { "a": 1, "s": 2, "d":3, "f":4'}
var as2 = JSON.stringify(asdf, function(key, value) {
if (value == 3) {
return undefined;
} else {
return value;
}
}, 2);
console.info(as2);
// '{
"a": 1,
"s": 2,
"f":4
}'
JSON.parse(text [, reviver])
テキスト(JSON形式)を受け入れ、ECMAScript値に変換します.オプションのreviverパラメータはkeyとvalueの2つのパラメータを持つ関数で、結果に作用します.フィルタリングと戻り値の変換が可能になります.
var result = JSON.parse('{"a": 1, "b": "2"}');//Object
result.b//"2"
解析した値が整数であることを確認するには、reviverメソッドを使用します.
var result = JSON.parse('{"a": 1, "b": "2"}', function(key, value){
if (typeof value == 'string'){
return parseInt(value);
} else {
return value;
}
});
result.b //2
新しい配列メソッド
次の方法はArrayに追加されました.prototypeオブジェクト上(isArrayを除く)
indexOf
類似文字列のindexOf()メソッド
stringObject.indexOf(searchvalue,fromindex)
var data = [2, 5, 7, 3, 5];
console.log(data.indexOf(5, "x")); // 1 ("x" )
console.log(data.indexOf(5, "3")); // 4 ( 3 )
console.log(data.indexOf(4)); // -1 ( )
console.log(data.indexOf("5")); // -1 ( , 5 !== "5")
lastIndexOf
indexOf()のような方法(順序が逆)
forEach
ArrayがES 5に追加したメソッドでは、パラメータはすべてfunctionタイプで、デフォルトではパラメータ(遍歴した配列の内容、対応する配列インデックス、配列自体)があります.
[].forEach(function(value, index, array) {
// ...
});
forEachメソッド配列要素の遍歴
var colors = ['red', 'green', 'blue'];
colors.forEach(function(color) {
console.log(color);
});
forEachは、必要なコールバック関数パラメータのほかに、オプションのコンテキストパラメータ(コールバック関数のthisの方向を変更する)(2番目のパラメータ)を受け入れることができます.この2番目のオプションパラメータが指定されていない場合は、グローバルオブジェクトの代わりに(ブラウザではwindow)、厳格なモードではundefinedまで使用します.
array.forEach(callback,[ thisObject])
map
マッピング(一対一対応).[].map();基本的な使い方はforEachの方法と似ています.
array.map(callback,[ thisObject]);
ただしcallbackにはreturn値が必要です(ない場合はundefinedを返すようにします)
var a1 = ['a', 'b', 'c'];
var a2 = a1.map(function(item) {
return item.toUpperCase();
});
console.log(a2); // logs A,B,C
filter
フィルタフィルタリング(callbackはここでフィルタの役割を果たし、要素が条件に合致するとフィルタはtrueを返し、filterはフィルタ条件に合致するすべての要素を返します).
array.filter(callback,[ thisObject]);
インデックスグループfilterの後、フィルタされた新しい配列を返します.使い方はmapに似ています
var a1 = ['a', 10, 'b', 20, 'c', 30];
var a2 = a1.filter(function(item) {
return typeof item == 'number';
});
console.log(a2); // logs 10,20,30
every
every(callback[,thisObject])配列内の各要素がcallback上でtrueを返すとtrueが返されます.
function isNumber(value){
return typeof value == 'number';
}
var a1 = [1, 2, 3];
console.log(a1.every(isNumber)); // logs true
var a2 = [1, '2', 3];
console.log(a2.every(isNumber)); // logs false
some(または)
some(callback[,thisObject])は、配列の1つがcallback上でtrueを返す限り、trueを返します.
function isNumber(value){
return typeof value == 'number';
}
var a1 = [1, 2, 3];
console.log(a1.some(isNumber)); // logs true
var a2 = [1, '2', 3];
console.log(a2.some(isNumber)); // logs true
var a3 = ['1', '2', '3'];
console.log(a3.some(isNumber)); // logs false
reduce(左から右への累積)
配列内のすべての要素に対して指定したコールバック関数を呼び出します.コールバック関数の戻り値は累積結果であり、この戻り値は、次回コールバック関数が呼び出されるときにパラメータとして提供されます.
var a = [10, 20, 30];
var total = a.reduce(function(first, second) {
return first + second;
}, 0);
console.log(total) // Prints 60
reduceRight(右から左へ加算)
reduceの役割は完全に同じで、唯一の違いは、reduceRightが配列を右から左に遍歴する要素であることです.
ArrayコンストラクタのisArray
Array.isArrayはprototypeオブジェクトではなくArrayコンストラクタに直接書かれています.Array.isArrayは、パラメータの[[Class]]内部属性が「Array」であるか否かに基づいてtrueまたはfalseを返す.
Array.isArray("NO U")
falseArray.isArray(["NO", "U"])// true
Array.prototype.slice.call
実際の配列にはsliceメソッドがあり、配列を浅いコピー(元の配列に影響を与えない)することができ、返されるのは配列です.類似配列にはlengthプロパティがあり、forループを使用できますが、sliceメソッドを直接使用することはできません.エラーが発生します.でもアリーを通してprototype.slice.callは間違いなく報告され、自身(類似配列)は最初から最後までsliceにコピーされた--真実の配列になった!argumentsなどの配列に似たオブジェクトを実際の配列に変換
Array.prototype.slice.call(arguments)
bind関数拡張