【JS基础】类数组、arguments

本文详细介绍了JavaScript中的类数组对象,包括它们必须具备的length属性以及如何判断一个对象是否为类数组。同时,深入探讨了arguments对象,它是函数内部参数值的实参列表,具有类数组特性。在不同情况下,如严格模式、参数默认值及扩展运算符的使用,形参和arguments之间的关系会发生变化。文章通过示例代码展示了这些变化及其影响。
摘要由CSDN通过智能技术生成

类数组

  • 类数组必须有length属性
  • 类数组继承于Object.prototype。而数组继承于Array.prototype
//《javascript权威指南》上判断是否是类数组的方法
function isArrayLike(o) {
    if (o &&                                // o 不能为null、undefined、 etc.
        typeof o === 'object' &&            // o 是 object
        isFinite(o.length) &&               // o.length 是一个有限数
        o.length >= 0 &&                    // o.length 是一个正数
        o.length===Math.floor(o.length) &&  // o.length 是一个整数
        o.length < 4294967296)              // o.length < 2^32
        return true;                        // 满足条件就是类数组
    else
        return false;                       // 否则就不是类数组
}

示例

var arrLike = {
	'0' : 'a',
	'1' : 'b',
	'2' : 'c',
	'3' : 'd',
	'4' : 'e',
	length : 5
}
console.log(arrLike);

arguments

  • 是function的一个属性
  • 是函数内部的参数值的实参列表,是一个类数组对象,内置的局部变量
  • 非箭头函数有arguments属性
  • 形参和实参有对应关系
function test (a){
	console.log(a);
	//当arguments改变时,a值也跟着改变。两者时对应关系
	arguments[0] = 100;
	console.log(a,arguments[0])
	console.log(Object.prototype.toString.call(arguments))
}
test(10);
//10
//100 100
//[object Arguments]

arguments共享关系的解除

//在严格模式下,形参和arguments之间的共享解除了
function test(a){
	'use strict';
	console.log(a,arguments[0]);
	a = 100;
	console.log(a,arguments[0]);
}
test(10);
//打印值:
//10 10
//100 10

//当参数有默认值的时候,形参和arguments之间的对应关系解除了
function test(a = 1){
	console.log(a);
	arguments[0] = 100;
	console.log(a,arguments[0]);
}
test(10);
//打印值
// 10
// 10 100

//使用扩展运算符传入参数的时候,形参和arguments之间的对应关系解除
function test(...args){
	console.log(args,arguments);
	arguments[0] = 100;
	arguments[1] = 200;
	console.log(args,arguments);
}
test(1, 2);
//打印值
// [1, 2] Arguments(2) [1, 2, callee: (...), Symbol(Symbol.iterator): ƒ]
// [1, 2] Arguments(2) [100, 200, callee: (...), Symbol(Symbol.iterator): ƒ]

//使用结构赋值的时候,形参和arguments之间的对应关系也会被解除
function test({a,b}){
	console.log(a);
	console.log(b);
	console.log(arguments)
	arguments[0] = 100;
	arguments[1] = 200;
	console.log(a);
	console.log(b);
	console.log(arguments);
}
test({a:1,b:2});
//打印值
// 1
// 2
// Arguments [{…}, callee: (...), Symbol(Symbol.iterator): ƒ]
// 1
// 2
// Arguments [100, 1: 200, callee: (...), Symbol(Symbol.iterator): ƒ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值