arguments参数
说明:在js中的函数中,有两个隐藏的参数分别是this和arguments
arguments 是一个类似数组的结构,可以通过下标来操作函数的参数,但并非数组类型的。
在函数调用的时候,会将函数的所有参数都传入arguments对象中保存,因此我们可以通过操作arguments属性来操作参数
形参的数量大于实参的数量,则依次传入,未传入的设置为undefined
形参的数量小于实参的数量,则arguments中保存实际的值
length
函数内部的arguments数组拥有length属性,可以通过该属性获取用户调用时传入的实参的个数
函数本身有一个length属性,可以通过该属性来获取形式参数的个数
callee方法
函数内部的arguments对象中,有一个callee方法,该方法指向函数自身,常用于匿名函数的递归调用。
代码示例
function func() {
console.log(arguments);
console.log(arguments.length); //调用函数时实际传入的参数数量
}
func(1,2,3,4,5);
console.log(func.length); //预期的参数数量 —— 函数的形参数量
function func02(a,b) {
console.log(a, b);
console.log(arguments);
}
func02(1,2,3); //实参的数量 > 形参的数量 则arguments保存实参的值
func02(1); //实参的数量 < 形参的数量 则不足的补undefined
//匿名函数调用
(function () {
//如果需要在该函数中调用自身,则可以使用arguments.callee方法
arguments.callee();
})();
Function的应用
01 数组去重
var func = new Function("arr",`
var array = [];
for(var i = 0 ; i<arr.length; i++)
{
if(array.indexOf(arr[i]) == -1)
{
array.push(arr[i]);
}
}
return array;
console.log(func([1, 2, 3, 4, 5, 3, 4, 2]));;
02 返回传入函数中所有数据的最大值
var func = function () {
var maxNumber = arguments[0];
for(var i = 0;i<arguments.length;i++)
{
if (maxNumber < arguments[i])
{
maxNumber = arguments[i];
}
}
return maxNumber;
}
console.log(func(1, 2, 3, 45, 5, 6, 7, 8, 30, 21));
eval 的基本使用
eval函数用来讲字符串转换为JS的代码,并执行
eval 处理JSON数据代码示例
var jsonData = '{"name":"张三","age":18}';
//把json的数据转换为对象
var obj = JSON.parse(jsonData);
console.log(obj);
var jsonData = '{"name":"张三","age":18}';
//var obj = eval(jsonData); //注意:如果直接这样写代码则会报错
//正确的处理方式
//方式一
eval("var obj = " + jsonData);
console.log(obj);
//方式二
//说明:使用eval来解析json格式字符串的时候,会将{}解析为代码块,而不是字面量
// 在使用的时候为了避免这种错误,需要在JSO的最外面加上(),如此则会把大括号当做一条语句来解析
var o = eval("("+jsonData+")");
console.log(o);
eval 注意事项
- eval函数本身功能强大,但它的特性也为程序带来了很大的不确定性,因此在开发中并不推荐使用。
- eval函数是动态的执行代码,因此其效率不如直接执行静态脚本高。
eval和Function比较
- 相同点:都能够把字符串转换为Javascript的代码
- 不同点:eval转换为js的代码之后马上就执行,而Function需要先创建函数,调用函数之后才会执行。
网友评论