javaScript argument 学习笔记
1.什么是 argument
argument是类数组对象
例子:
function ex1(){
console.log(arguments)
}
ex1(“a”,”A”,0,{foo:”argument”})
运行看结果:
结果是一个数组,但是不是真正的数组;是一个类数组.
再看看arguments代表的内容,其表示了函数执行时传入函数的所有参数.可以用arguments[n],取得每一个参数.
2.arguments 操作
a)argument length;
arguments 是类数组对象,包含length属性;
例子:
function ex2(){
console.log(arguments.length;)
}
ex2();
ex2(1,2);
ex2(1,2,3);
b)arguments 转数组
Array.prototype.slice.call(arguments)
[].slice.call(arguments)
满足一定条件的对象都能被slice方法转化为数组.
例子:
const aaa={0:’a’,1:’b’,length:2}
const bbb=[].slice.call(aaa);
console.log(Array.isArray(bbb),bbb);
不能将argument对象泄露出去,否则将会造成极大的性能浪费.
例子:
function ex3(){
return arguments;
}
但可以将其转化为数组:
function ex4(){
const arr = new Array(arguments.length)
for(let i=0;i<arr.length;i++){
arr[i]=arguments[i];}
return arr;
}
(let 只对他所在的最内侧块内有效,var的范围最少在一个函数内)
c)修改argument的值
在严格模式与非严格模式,修改函数值输出的结果并不相同:
例子:
function ex5(a){
“use strict”;
console.log(a,arguments[0]);
a=10;
console.log(a,arguments[0]);
arguments[0]=20;
xonsole.log(a,arguments[0]);
}
ex5(1)
例子:
function ex6(a){
console.log(a,arguments[0]);
a=10;
console.log(a,arguments[0]);
arguments[0]=20;
console.log(a,arguments[0]);
}
ex6(a)
d)将参数从一个参数传输到另一个函数
function ex71(){
ex72.apply(this,arguments);
}
function ex72(){}
e)arguments与重载
js没有重载;我们需要使用argument进行模拟
function ex8(aaa,bbb,ccc){
if(argument.length===2){alert(aaa+bbb)}
else if(argument===3){alert(aaa+bbb+ccc)}
}
ex8(111,222);
ex8(111,222,333);
3.ES6中的arguments
a)扩展操作符
function ex9(){
console.log(…arguments);
}
ex9(1,2,3);
b)rest
例子
function ex10(firstArg,…restArg){
console.log(Array.isArray(restArg));
console.log(firstArray,restArray);
}
ex10(1,2,3);
c)默认参数
function ex11(firstArg=0,secondArg=1){
console.log(arguments[0],argument[1]);
console.log(firstArg,secondArg);
}
ex11(99);
d)argument 转数组
Array.form()
4.数组与类数组对象
const obj={0:”a”,1:’b’}
const arr=[“a”,”b”]
对象的键值对
数组的索引
obj的属性是string
srr的索引是 number
创建类数组对象:
例子:(得到Array的所有方法)
function ex12(){}
ex12.prototype=Object.crate(Array.prototype);
const ex121=new ex12();
ex121.push(“a”);
例子:(得到部分方法)
function ex13(){}
ex13.prototype.push=Array.prototype.push;
const ex131=new ex13();
ex131.push(‘a’);
ex131.push(‘b’);