You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS数组添加自定义属性后,console.log与JSON.stringify结果为何不一致?

数组自定义属性在控制台与JSON序列化中的差异解析

先看你给出的代码:

let test = [];
test.someProp = "haha";
console.log(test); // 输出:  [ someProp: 'haha' ]
console.log(JSON.stringify(test)); // 输出: []
console.log(test.someProp); // 输出: haha
console.log(JSON.stringify(test)); // 输出: []

原因拆解:

  • 数组是特殊的对象
    JavaScript里数组本质是继承自Object的特殊对象,所以支持像普通对象一样添加任意自定义属性。控制台的console.log会完整展示这个对象的所有成员——包括数组的索引元素和你手动添加的自定义属性,因此会显示带someProp的类对象形式。

  • JSON.stringify对数组的序列化规则
    JSON规范里的数组仅指按索引排序的有序元素集合,JSON.stringify处理数组时,只会遍历键为非负整数的元素(也就是传统意义上的数组项),直接忽略所有字符串键的自定义属性。因为你的test数组没有任何索引式元素,所以序列化后得到空数组[]。

  • 自定义属性并未消失
    从console.log(test.someProp)输出haha可以确认,这个自定义属性一直保存在数组对象上,只是JSON.stringify不把它纳入数组的序列化范围而已。

内容的提问来源于stack exchange,提问作者Lenny4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:12:04