为什么“密钥”没有在代码中定义,而是在控制台上?

时间:2016-12-13 11:56:27

标签: javascript google-chrome-devtools

我有以下代码将JSON字符串解析为一些变量:

ws.onmessage = function (event) {
  var data = JSON.parse(event.data);
  vm[keys(data)[0]] = values(data)[0];
}

传入的字符串将始终采用

的形式
{
  "somename": something
}

something可以是值或数组。

我的目的是获取第一个(也是唯一的)键和第一个(也是唯一的)值,并使用它们来更新另一个变量(vm)。

在Chrome开发者工具中调试代码时,它会停在keys

infoscreen.js:33 Uncaught ReferenceError: keys is not defined
    at WebSocket.ws.onmessage (infoscreen.js:33)
ws.onmessage @ infoscreen.js:33

然而,在我所拥有的控制台上

> keys(data)[0]
< "calendar"

为什么keys在运行时未定义但在控制台上可用(并返回预期结果)?

1 个答案:

答案 0 :(得分:3)

Chrome开发工具是一个命令行,可以提供简单的javascript访问,但也提供了一系列便利功能,用于执行常见任务。

keys function是其中之一(它提供与Object.keys相同的输出),但您也可以使用多种功能。

在您的代码中,您应该使用Object.keys代替:

ws.onmessage = function (event) {
  var data = JSON.parse(event.data);
  vm[Object.keys(data)[0]] = values(data)[0];
}

这是完整的命令行参考:
https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference

这是对Object.keys函数的引用:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys