JavaScript:浏览器控制台如何显示对象键值

JavaScript: How browser consoles displays the object key values

从 Chrome 控制台:

> myParam = {"test": "test value"}    
> myFunc = function(x) { myParam[x] = x; }

> myFunc("func value")
> myParam
{test: "test value", func value: "func value"} // (a) question

> myFunc(2)
> myParam
{2: 2, test: "test value", func value: "func value"}

> myFunc()
> myParam
{2: 2, test: "test value", func value: "func value", undefined: undefined} // (b) question

这是Chrome今天的最新版本(69.0.3497.100)
请解释如何,在 JavaScript

a) 可以创建一个包含空格的对象成员("myParam.func value")
b) 可以创建一个"undefined"对象成员("myParam.undefined")
c) 对于 (b) 情况,"undefined" 是真的 "undefined" 还是只是一个字符串 "undefined" ?


PS. 感谢@ryanpcmcquen 的评论,以下PS


PPS. 你能证实我的假设,这是一个 Google Chrome v(69.0.3497.100) 控制台显示错误 如果 字符串不像字符串 、"between brackets" 和红色那样显示?


PPS.
只有 Firefox 似乎能正确显示字符串键:

Chrome, 歌剧

Firefox

边缘

MS IE

c "undefined" 的答案通常朝向 "null" 值,您可以 console.log(null) 并且可以找到未定义的

正在考虑对象 foo

var foo = {};

a) 可以创建一个包含空格的对象成员("myParam.func value")

// You have to use square bracket notation when
// declaring properties with spaces.
foo['func value'] = 'Whatever you want.';

b) 可以创建一个"undefined"对象成员("myParam.undefined")

// Keyword undefined:
foo[undefined] = undefined;
// String 'undefined':
foo['undefined'] = 'undefined';

c) 对于 (b) 情况,"undefined" 真的是 "undefined" 还是只是一个字符串 "undefined"?

看你怎么定义。在您的屏幕截图中,属性 值是关键字 undefined,键是字符串 'undefined'

要验证对象内部的类型,您可以 运行:

Object.keys(foo).map(key => typeof key);
Object.values(foo).map(value => typeof value);

这是JavaScript的美女之一。

a) 我们可以用空格创建对象键,因为对象键可以是字符串。当您想查看其键为 String 的对象的值时,您需要按以下方式执行此操作

var a = {
  'my key': 'my key'
  yourKey: 'your key'
}
a['my key'];
a.yourKey

b) 在JavaScript中,undefined是一种数据类型,因此拥有值为undefined的变量是完全合法的

c) 它确实是未定义的。在此处查看更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

让我们回答您的问题。

a)可以创建一个对象成员包含spaces ("myParam.func value")

const myParam = {}
myParam["func value"] = 'serge';
console.log(myParam)

,但是 属性 名称带有 space 或连字符,或者以数字开头的名称只能使用方块访问括号表示法

b) 可以创建一个 "undefined" 对象成员 ("myParam.undefined")

。对象 属性 名称可以是任何有效的 JavaScript 字符串,或任何可以转换为字符串的内容,包括空字符串

const myParam = {};
myParam.undefiend = 'serge';
console.log(myParam)

c) 对于 (b) 情况,"undefined" 真的是 "undefined" 还是只是一个字符串 "undefined" ?

我猜是字符串 "undefined"