Arguments
arguments
arguments的相关知识点
-
arguments是一个对应于传递给函数的参数的类数组对象(伪数组)。可以使用
arguments.length
来获得需要传递的参数的个数。arguments.length`和函数的length属性都可以实现相同的功能。 -
arguments.length是实际传入的参数的个数,而函数的length是形参的个数。实际上就是理想和现实的区别,那这里的理想和显示分别代表的什么(
arguments.lemgth
还是function()).length
) -
arguments转数组使用的方法是:
Array.prototype.slice.call(arguments)
,更加简单的写法:[].slice.call(arguments)
,两者是有本质上的区别的,一个知识简单的调用空数组的slice方法,没有从Arry的原型层面调用。ES6可使用Array.from()
,Array.from()
是个非常推荐的方法,其可以将所有类数组对象转换成数组。 -
修改arguments的值,在严格模式和非严格模式下会是两种不同的情况。举例如下:
严格模式下:
function foo(a) { "use strict"; console.log(a, arguments[0]); a = 10; console.log(a, arguments[0]); arguments[0] = 20; console.log(a, arguments[0]); } foo(1);
输出:
1 1 10 1 10 20
非严格模式下:
function foo(a) { console.log(a, arguments[0]); a = 10; console.log(a, arguments[0]); arguments[0] = 20; console.log(a, arguments[0]); } foo(1);
输出:
1 1 10 10 20 20
结论:在严格模式下,函数中的参数与 arguments 对象没有联系,修改一个值不会改变另一个值。而在非严格模式下,两个会互相影响。
arguments的使用
arguments的创建
例子:
function Foo(){}
function Bar(){}
Foo.prototype = Object.create(Array.prototype) //拥有 Array 的所有方法,但类型不是 Array
Bar.prototype.push = Array.prototype.push //不需要 Array 的所有方法
const foo = new Foo()
const bar = new Bar()
foo.push("A")
bar.push("A")
bar.push("B")
console.log(foo,foo.length)
console.log("is an arry?" + Arry.isArry(foo))
console.log(bar)
输出:
["A"] 1
foo is an array? false
Bar {0: "A", 1: "B", length: 2}
arguments与重载
在JavaScript中没有重载的说法,那怎么办实现重载呢
没有重载时候的情况:
function add(num1,num2){
console.log("result1:")
console.log(num1 + num2)
}
function add(num1,num2,num3){
console.log("result2:")
console.log(num1 + num2 + num3)
}
add(1,2)
add(1,2,3)
输出:
result2:
NaN
result2:
6
可以看出并没有输出result1的内容,原因是后者将前者重写了或者说覆盖了,那怎么办来实现两个都可使用呢,这时候arguments就登场了。
使用arguments来实现重载:
function add(num1,num2,num3){
if(arguments.length===2){
console.log("result1:")
console.log(num1 + num2)
}else if(arguments.length===3){
console.log("result2:")
console.log(num1 + num2 + num3)
}
}
add(1,2)
add(1,2,3)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律