前端设计

javaScript argument 学习笔记

2019-11-22

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