JS - 序列化和arguments

137 阅读2分钟

这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

  1. 什么是对象序列化

    1. 对象的状态转换成字符串
    2. 对象的状态信息转换为可以存储或传输的形式的过程
  2. 为什么会有对象序列化

    1. 希望把对象obj的内容保存在磁盘上 --- 对象obj序列化
    2. 序列化:obj的内容转换成一个字符串的形式,保存在磁盘上 ==存储==
    3. 反序列化:字符串还原成对象 ==传输==
  3. JavaScript中的对象序列化 JSON.stringify() 和 JSON.parse() 规则: 1. 五种原始类型:JSON不支持undefined 2. 不支持函数 3. 除了RegExp、Error对象,JSON语法支持其他所有对象 4. JSON.stringify()只能序列化对象的可枚举的自有属性 5. NaN、Infinity和 -Infinity序列化的结果是null 6. 日期对象序列化的结果是ISO格式的字符串,但JSON.parse()依然保留它们字符串形态,并不会为其还原为日期对象

  4. 完整版JSON.stringify() ==序列化== 序列化原始值、对象、数组 -- ==o替代== JSON.stringify(o[可选参数,数组或函数][,可选参数,数值或字符串])

  5. 完整版JSON.parse() ==反序列化==

类数组对象:arguments

封装实参的对象arguments

为什么要有arguments

JavaScript并没有重载函数的功能,但Arguments对象能够模拟重载。 JavaScript中每个函数都有Arguments对象实例arguments arguments.length 为函数实参个数 arguments.callee 为引用函数自身

arguments特性

==arguments和function生死相依==

使用方法

跟数组一样使用

callee属性,返回正被执行的Function对象

==针对同个方法多处调用并且传递参数个数不一样时进行使用== var sum = function(n) { if (1 == n){ return 1; } else { return n + arguments.callee(n-1); } } alert(sum(6)); // 21

1. 利用arguments实现方法的重载

function add() {
	var len = arguments.length;
	var sum = 0;
	for(;len--;) {
		sum += arguments[len];
	}
	return sum;
}
console.log( add(1, 2, 3) );
console.log( add(1, 3) );

2. 利用callee实现递归

function factorial(num) { if(num <= 1) { return 1; } else { return num + arguments.callee(num-1); } }