ES6 arguments 参数

介绍

本文是在学习ES6时做的一些学习笔记,所有的笔记请查看:ES6 学习笔记

什么是arguments?

它是JS的一个内置对象,常被人们所忽略,但实际上确很重要,JS不像JAVA是显示传递参数,JS传的是形参,可以传也可以不传,若方法里没有写参数却传入了参数,该如何拿到参数呢,答案就是arguments了,在一些插件里通常这样使用。
每一个函数都有一个arguments对象,它包括了函数所要调的参数,通常我们把它当作数组使用,用它的length得到参数数量,但它却不是数组,使用instanceof查看下,若使用push添加数据将报错,代码如下:

(function(){
    console.log([] instanceof Array)
    console.log(arguments instanceof Array)
    if(arguments.push) arguments.push('test')
})()

创建一个灵活的格式化函数
上面说了arguments可以使用函数使用数量不定的参数,下面看看它的一个实际应用:

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });   
};
format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");

这里我借用了别人的一个例子,一个模板字符串,可以使用%1到%9等9个占位符,然后提供9个参数给这些占位符,最后替换生成真正的字符串。
上面的代码返回:“And the papers want to know whose shirt you wear”
把arguments转换成一个真正的数组
有时我们希望将它转换成真正的数组使用,可以使用下面的代码:

var args = Array.prototype.slice.call(arguments);

现在args就是一个标准的js数组了,可以使用数组的标准方法了。

发布了25 篇原创文章 · 获赞 18 · 访问量 1000

猜你喜欢

转载自blog.csdn.net/MoonNight608/article/details/104149528
今日推荐