一提到length,相信大家能想到的第一个就是数组或字符串了,但并不只有这两个才有length,那么下面,我们就开始讲解了(如有问题,可以私信或评论)。
重点在第一个标题的第三点和第二个标题哦
一、拥有length的数据有哪些
首先我们先总结一下哪些数据才有length
1.数组/字符串
这两个想必也不用多说了,直接上代码展示了
const arr = [1,2,3]
const str = '123'
console.log(arr.length)//3
console.log(str.length)//3
2.函数的内置对象arguments
在我们函数中(除箭头函数)都有内置对象arguments,我们先看看arguments中都有哪些数据
function a() {
console.log(arguments)
}
a()
打印结果如下:
从图片中我们也可以看出内置对象是包含length这个属性的(其它属性在本次便不多讲了)
那么什么数据才能修改内置对象的length呢,是函数的实参个数
以下进行代码展示以及输出结果
function a(c) {
console.log(arguments.length)
}
a(1, 2, 4)//3
a(1, 2, [1, 2, 3, 9])//3
a(1, 2, { name: 1, age: 19 })//3
a(1, 2, '123')//3
以上是我所能想到能传输的数据,但通过结果也可以看出:
实参中的数据与length无关,函数内置对象的length只与实参的个数有关
3.函数的length
第二个也许很比较冷门,那么函数就更冷门了
function a() {}
console.dir(a)//dir是详细打印某个数据
打印结果如下
在函数中同时拥有length这个属性,那么这个属性是随什么改变呢?
二、函数中的length
上面我们有讲过在函数中是有length的,那么现在我们就去讲以下length是随什么改变的
首先,这是mdn对此的解释
那么通过以上的阅读,相信大家也有所了解了,下面我们开始进入正题
面试可能会遇到
function fn1(a,b) {}
function fn2(a,b = 2) {}
function fn3(a = 2,b) {}
function fn4(a, ...arr) {}
console.log(fn1.length)
console.log(fn2.length)
console.log(fn3.length)
console.log(fn4.length)
大家可以根据上面mdn的解释先思考一下会是什么结果。
.
.
.
.
.
.
结果如下
console.log(fn1.length)//2
console.log(fn2.length)//1
console.log(fn3.length)//0
console.log(fn4.length)//1
第一个
结果为2想必不出大家的以外了;
第二个
结果主要根据函数中的length只包括在第一个具有默认值的参数之前的参数;
第三个
结果同上上面的加粗,大家也能分析除原因了
第四个
结果的主要根据则是函数中的length不包括剩余参数
以上便是本次的主要内容了