0

我有一个 javascript 对象。

var homeObject=JSON.parse(JSON.stringify(BuildingObject));
var flatNumber=homeObject.flatNo;

那么,有没有什么方法可以直接获取flatNo属性而无需 JSON 转换。

另外,添加进一步说明:

BuildingObject.flatNo如果直接访问,则返回 undefined,无需 JSON 转换

下面列出了 BuildingObject 的 JSON 输出

{

    "flatNo": "34",
    "objectId": "4oRaVl96ZQ",
    "createdAt": "2013-03-01T17:35:27.724Z",
    "updatedAt": "2013-03-01T17:40:45.804Z"
}

还是很惊讶!它打印出来BuildingObject.createdAt并且BuildingObject.updatedAt. 问题在于字符串对象“flatNo”和“objectId”

4

2 回答 2

2

问题可能源于 JSON.stringify() 将首先尝试在对象上调用 toJSON() 的事实,因此 toJSON() 很可能正在添加不是原始对象键的属性。例如

var test = {
    toJSON: function () {
        return {
            foo: "bar"
        };
    }
};

console.log(JSON.stringify(test));
// outputs: {"foo":"bar"} 

console.log(test.foo);
// outputs: undefined

console.log(test.toJSON().foo);
// outputs: bar

因此,在您的情况下,您可以:

a) 检查您的 BuildingObject 是否具有用于 flatNo 的某种访问器函数,例如 BuildingObject.get('flatNo')

或者

b) 使用 BuildingObject.toJSON().flatNo

于 2013-03-06T18:16:23.587 回答
1

如果BuildingObject是一个包含名为flatNo的属性的对象,则可以使用标准 JavaScript 语法读取该属性:

  • BuildingObject.flatNo
  • BuildingObject["flatNo"]

测试代码:

var BuildingObject = {
    flatNo: 314
};
console.log(BuildingObject.flatNo, BuildingObject["flatNo"]);

...按预期打印:

314 314

处理 JavaScript 对象时绝对不需要使用 JSON。尽管普遍认为,JSON 只不过是一种受 JavaScript 语法启发的纯文本数据格式。JSON 不是 JavaScript,也没有“JSON 对象”(您可以在 StackOverflow 上提到 JavaScript 对象的无尽问题中阅读的术语),因为如果它是 JSON,它就是一个字符串。

如果BuildingObject.flatNo为您返回未定义,BuildingObject则不包含您认为的内容,或者您​​的测试在某处存在缺陷。

于 2013-03-06T17:56:21.757 回答