JSON.stringify没有返回预期的对象

时间:2016-10-10 15:29:28

标签: javascript json websocket

我最近一直在玩Node.js和Websockets。我已经到了那里,但是关于JSON.stringify(客户端)存在一个奇怪的问题。

我喜欢使用JSON.stringify来确定服务器返回的对象属性。

例如,我有以下代码片段:

ws.onmessage = function(param1) {
    alert(JSON.stringify(param1));
}

这会显示{"isTrusted" : true}

的提示框

由于此输出,我认为我的服务器没有向客户端发送消息。出于好奇,我决定将警报功能修改为

alert(param1.data);

预期的消息就在那里!所以我的问题是为什么当JSON.stringify明显存在时,它包含data个对象?

1 个答案:

答案 0 :(得分:6)

JSON.stringify仅包含输出中对象的拥有的,可枚举的属性;这在规范中的抽​​象SerializeJSONObject操作中有所涉及。这意味着遗漏了属性和非可枚举属性。

显然,您邮件中唯一拥有的,可枚举的属性是isTrusted

无偿示例:



function Thingy(name, age) {
  // Save `name` as an own, enumerable property
  this.name = name;
  
  // Save `age` as an own, non-enumerable property
  Object.defineProperty(this, "age", {
    value: age
  });
}

// Define `what` as a property that will be inherited by
// all `Thingy` instances:
Thingy.prototype.what = "evs";

// Create one
var t = new Thingy("foo", 42);

// Get the JSON for it:
console.log(JSON.stringify(t)); // {"name":"foo"}




这里的外卖信息是,2016年alert式调试几乎没有任何地方。而不是在alert的黑暗中磕磕绊绊(或console.log)火炬,打开灯使用浏览器内置的功能强大的全功能调试器:在处理程序的第一个语句上放置一个断点,并在达到断点时,动态检查param1的内容。它将显示自己的属性和继承的属性,可枚举的属性和不可枚举的属性,以及暂停JavaScript代码的当前值。