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’);
来源:https://www.imooc.com/article/14056