クラスArray
これは、データのセットが含まれており、lengthプロパティを持っていますが、Arrayに方法はありません。クラスオブジェクトの配列の長さの値が自動的に変更することができません。
二引数
引数は配列オブジェクトクラスです。代表は、関数の引数リストに渡されました。
function printArgs() {
console.log(arguments);
}
printArgs("A", "a", 0, { foo: "Hello, arguments" }); //["A", "a", 0, Object]
関数が実行されたときに関数に渡されるすべてのパラメータを表し、表現の引数の内容を見てください。
arguments.lengthをつまり、着信番号
三つの引数の操作
1.arguments転送アレイ
- Array.prototype.slice.call(引数);
- [] .slice.call(引数)。
- Array.from()
2.引数の値を変更します。
厳密モードでは、関数パラメータの引数は変更が別の値を変更しないであろう、接触せずにオブジェクト。非厳密モードでは、2つは互いに影響します。
strictモード:
function foo(a) {
"use strict";
console.log(a, arguments[0]); //1 1
a = 10;
console.log(a, arguments[0]); //10 1
arguments[0] = 20;
console.log(a, arguments[0]); //10 20
}
foo(1);
非strictモード:
function foo(a) {
console.log(a, arguments[0]); //1 1
a = 10;
console.log(a, arguments[0]); //10 10
arguments[0] = 20;
console.log(a, arguments[0]); //20 20
}
foo(1);
もう1つの関数から前記パスパラメータ
function foo() {
bar.apply(this, arguments);
}
function bar(a, b, c) {
// logic
}
4.拡張オペレータ
拡張オペレータは、別のパラメータの引数に展開することができます。
function func() {
console.log(...arguments);
}
func(1, 2, 3); // 1 2 3
デフォルトパラメータ
デフォルトのパラメータは、引数には影響しません
function func(firstArg = 0, secondArg = 1) {
console.log(arguments[0], arguments[1]); // 99 undefined
console.log(firstArg, secondArg); // 99 1
}
func(99);
四つの注意事項
1.JS上書きしません
function add(num1, num2) {
console.log("Method one");
return num1 + num2;
}
function add(num1, num2, num3) {
console.log("Method two");
return num1 + num2 + num3;
}
add(1, 2); // Method two
add(1, 2, 3); // Method two
2.引数は漏れの関数であるか、またはアウト渡すことはできません
漏れの引数は、関数をオブジェクト、最終的な結果は、V8エンジンは、パフォーマンスの大幅な損失で、その結果、最適化をスキップしますです。
次の例は、引数が漏洩しています:
// Leaking arguments example2:
function getArgs() {
const args = [].slice.call(arguments);
return args;
}
私たちは、これを行うことができます:
function getArgs() {
const args = new Array(arguments.length);
for(let i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
return args;
}