手写算法-实现JSON.stringify()

文章提供了一个JavaScript函数`stringify()`,用于模拟JSON.stringify()的功能,处理不同数据类型,包括字符串、数字、布尔值、对象、数组、函数、正则表达式、日期以及null。示例数据包含嵌套的对象和数组,函数被转换为其字符串表示形式,而正则和日期也得到适当地处理。
摘要由CSDN通过智能技术生成

 解析:该题目考察我们对数据类型的认识

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JSON.stringify实现</title>
	</head>
	<body>

	</body>
</html>
<script type="text/javascript">
	function stringify(value) {
		const typeMap = {
			'string': true,
			'number': true,
			'boolean': true,
			'object': value instanceof RegExp || value instanceof Date || value === null
		};

		const type = typeof value;

		if (typeMap[type]) {
			return String(value);
		} else if (typeof value == 'function') {
			return value.toString()
		} else if (Array.isArray(value)) {
			return '[' + value.map(item => stringify(item)).join(',') + ']';
		} else if (type === 'object') {
			let properties = Object.keys(value).map(key => '"' + key + '":' + stringify(value[key]));
			return '{' + properties.join(',') + '}';
		} else {
			return undefined;
		}
	}

	// 示例数据
	let data = {
		name: 'Alice',
		age: 30,
		isStudent: true,
		hobbies: ['reading', 'coding', {
			sayHello: function() {
				console.log('Hello!');
			},
			regex: /pattern/g,
			date: new Date(),
		}],
		address: {
			city: 'Shanghai',
			country: 'China'
		},
		sayHello: function() {
			console.log('Hello!');
		},
		regex: /pattern/g,
		date: new Date(),
		unrf: undefined,
		emptyValue: null
	};

	// 序列化为 JSON 字符串
	let jsonString = stringify(data);

	console.log(jsonString); 
	// {"name":Alice,"age":30,"isStudent":true,"hobbies":[reading,coding,{"sayHello":function() {
	// 				console.log('Hello!');
	// 			},"regex":/pattern/g,"date":Tue Jul 11 2023 10:04:56 GMT+0800 (中国标准时间)}],"address":{"city":Shanghai,"country":China},"sayHello":function() {
	// 			console.log('Hello!');
	// 		},"regex":/pattern/g,"date":Tue Jul 11 2023 10:04:56 GMT+0800 (中国标准时间),"unrf":undefined,"emptyValue":null}
</script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`JSON.stringify()` 和 `JSON.parse()` 都是 JavaScript 中处理 JSON 数据的方法。 它们的异同如下: 1. 相同点: - 都是用来处理 JSON 数据的方法。 - 都是内置于 JavaScript 中的,无需额外引入。 2. 不同点: - `JSON.stringify()` 方法是将 JavaScript 对象或值转换为 JSON 字符串的方法,而 `JSON.parse()` 方法是将 JSON 字符串转换为 JavaScript 对象或值的方法。 - `JSON.stringify()` 方法可以接受第二个参数,用于控制序列化过程,比如可以传入一个数组来定义需要序列化的属性;而 `JSON.parse()` 方法只接受一个参数,即要解析的 JSON 字符串。 - `JSON.stringify()` 方法序列化 JavaScript 中的 undefined、function、symbol 类型的值会被忽略,而 `JSON.parse()` 方法不会忽略这些值,会抛出异常。 示例: ```javascript const obj = { name: 'Alice', age: 18 }; const jsonStr = '{"name":"Bob","age":20}'; // 使用 JSON.stringify() 方法将对象转换为 JSON 字符串 const str = JSON.stringify(obj); console.log(str); // 输出:{"name":"Alice","age":18} // 使用 JSON.parse() 方法将 JSON 字符串转换为对象 const obj2 = JSON.parse(jsonStr); console.log(obj2); // 输出:{name: "Bob", age: 20} ``` 注意:`JSON.stringify()` 和 `JSON.parse()` 方法都只能处理纯 JSON 数据,如果 JSON 数据中包含 JavaScript 中不支持的数据类型,就会抛出异常。比如,JSON 数据中不能包含函数、日期对象等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值