我最近一直在玩Node.js和Websockets。我已经到了那里,但是关于JSON.stringify(客户端)存在一个奇怪的问题。
我喜欢使用JSON.stringify来确定服务器返回的对象属性。
例如,我有以下代码片段:
ws.onmessage = function(param1) {
alert(JSON.stringify(param1));
}
这会显示{"isTrusted" : true}
由于此输出,我认为我的服务器没有向客户端发送消息。出于好奇,我决定将警报功能修改为
alert(param1.data);
预期的消息就在那里!所以我的问题是为什么当JSON.stringify明显存在时,它包含data
个对象?
答案 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代码的当前值。