阵列看起来像这样:
["1", "2", R: "aviv", remove: function] 0: "1" 1: "2" R: "Test" length: 2 __proto__: Array[0]
当我对这个数组使用JSON.stringify()时,我得到:
["1","2"]
这因为数组长度是2,我该如何解决呢? 我需要使用这个数组将ajax发布到php脚本中,并且我丢失了一些nesesarry数据。
谢谢你, 特拉维夫
答案 0 :(得分:2)
["1", "2", R: "aviv", remove: function]
不代表数组 - 它的语法无效。
无论如何,假设代码是为了描绘一个创建为:
的数组arr = ["1", "2"]
arr.R = "aviv"
arr.remove = function () {}
然后 R
或remove
属性都不能用JSON.stringify序列化,因为它将数组映射到JSON-Array。
虽然[JavaScript] Arrays是Objects的特化 - 特别是它们支持“expando属性”,但JSON-Arrays和JSON-Objects是 distinct 数据类型。
因为这样的JSON-Arrays有无法映射键,并且不映射其他属性:实际的实现将迭代数组索引[0,arr.length)
as它将Array映射到JSON-Array。
要将额外的键映射为JSON-Object, start 使用[JavaScript]对象(不是数组),它将映射到JSON-Object:
notArray = { 0: "1", 1: "2", R: "aviv", remove: function () {} }
当然,也许JSON应该有更深层的结构:牢记映射规则。
以下是两种情况的示例输出(请注意function
未映射):
JSON.stringify(arr) // -> ["1","2"]
JSON.stringify(notArray) // -> {"0":"1","1":"2","R":"aviv"}