Javascript 为什么Firefox控制台只引用一些对象键?

Javascript 为什么Firefox控制台只引用一些对象键?,javascript,html,css,Javascript,Html,Css,我正在学习JavaScript中的计算属性。我列出了我最喜欢的棒球队的球员名单,并尝试使用对象文字。有些位置显示为字符串,有些则不是?有人对此有解释吗?我唯一的猜测是它与Mozilla控制台有关 const position1 = "Pitcher"; const position2 = "Catcher"; const position3 = "First Base"; const position4 = "Second B

我正在学习JavaScript中的计算属性。我列出了我最喜欢的棒球队的球员名单,并尝试使用对象文字。有些位置显示为字符串,有些则不是?有人对此有解释吗?我唯一的猜测是它与Mozilla控制台有关

const position1 = "Pitcher";
const position2 = "Catcher";
const position3 = "First Base";
const position4 = "Second Base";
const position5 = "Third Base";
const position6 = "Shortstop";
const position7 = "Left Field";
const position8 = "Center Field";
const position9 = "Right Field";

const player1 = "Jacob deGrom";
const player2 = "Wilson Ramos";
const player3 = "Pete Alonso";
const player4 = "Robinson Cano";
const player5 = "Jeff Mcneil";
const player6 = "Amed Rosario";
const player7 = "JD Davis";
const player8 = "Brandon Nimmo";
const player9 = "Michael Conforto";


const team = {
  [position1]: player1,
  [position2]: player2,
  [position3]: player3,
  [position4]: player4,
  [position5]: player5,
  [position6]: player6,
  [position7]: player7,
  [position8]: player8,
  [position9]: player9,
};
控制台输出如下:

Catcher: "Wilson Ramos"
​
"Center Field": "Brandon Nimmo"
​
"First Base": "Pete Alonso"
​
"Left Field": "JD Davis"
​
Pitcher: "Jacob deGrom"
​
"Right Field": "Michael Conforto"
​
"Second Base": "Robinson Cano"
​
Shortstop: "Amed Rosario"
​
"Third Base": "Jeff Mcneil"
​
<prototype>: Object { … }
捕手:“威尔逊·拉莫斯” ​ “中心场”:“布兰登·尼莫” ​ “一垒”:“皮特·阿隆索” ​ “左字段”:“JD Davis” ​ 投手:“雅各布·德格罗姆” ​ “右栏”:“迈克尔·康弗托” ​ “二垒”:“罗宾逊·卡诺” ​ 游击手:“阿迈德·罗萨里奥” ​ “三垒”:“杰夫·麦克尼尔” ​ :对象{…}

引号中显示的所有属性名称都是使用点表示法无效的属性名称,在您的示例中,这些属性名称都带有空格

例如,
obj.Catcher=“something”
是有效的,但
obj.Center Field
会产生语法错误,并且只能使用方括号设置或访问此类属性,即
obj[“Center Field”]


另请参见:

引号中显示的所有属性名称都是使用点表示法无效的属性名称,在您的示例中,这些属性名称都带有空格

例如,
obj.Catcher=“something”
是有效的,但
obj.Center Field
会产生语法错误,并且只能使用方括号设置或访问此类属性,即
obj[“Center Field”]


另请参见:

这只是一个实现细节。Firefox模仿了实际的文本对象语法,其中需要引用无效标识符的键:

var o={
一:一,,
“和二”:2
};

控制台日志(o)这只是一个实现细节。Firefox模仿了实际的文本对象语法,其中需要引用无效标识符的键:

var o={
一:一,,
“和二”:2
};

控制台日志(o)建立在hev1编写的基础上。在Javascript中,字符串根据其编写方式以不同的方式进行计算。传递给对象的变量将作为字符串计算。如果您向它传递一个数字,它也将作为字符串计算,除非它是布尔值、NaN值或空值。不能在字符串上使用.notation,也不能有空格。我确信这就是为什么camelCase是一个重要的命名约定。如果您想使用一个约定来访问团队对象中的值,请考虑将“第一个基础”写入“FrasBASE”或“FrestStBASE”。
console.log(Object.getPrototypeOf(team[“First Base”])console.log(Object.getPrototypeOf(team.Catcher))

希望这能有所帮助?

以hev1所写的内容为基础。在Javascript中,字符串根据其编写方式以不同的方式进行计算。传递给对象的变量将作为字符串计算。如果您向它传递一个数字,它也将作为字符串计算,除非它是布尔值、NaN值或空值。不能在字符串上使用.notation,也不能有空格。我确信这就是为什么camelCase是一个重要的命名约定。如果您想使用一个约定来访问团队对象中的值,请考虑将“第一个基础”写入“FrasBASE”或“FrestStBASE”。
console.log(Object.getPrototypeOf(team[“First Base”])console.log(Object.getPrototypeOf(team.Catcher))

希望这有帮助?

这正是控制台的工作方式。所有属性名称始终为字符串。控制台使用引号字符显示它们,以明确它们不是有效标识符,即使它们是有效的属性名称。(更正:现在属性名称也可以是符号实例,但这显然与此问题无关。)您注意到引号中的有空格,而其他的没有。这里有许多控制台实现。如果你创建一个可运行的代码段,你会看到堆栈溢出引用了所有键。这就是控制台的工作方式。所有属性名称始终为字符串。控制台使用引号字符显示它们,以明确它们不是有效标识符,即使它们是有效的属性名称。(更正:现在属性名称也可以是符号实例,但这显然与此问题无关。)您注意到引号中的有空格,而其他的没有。这里有许多控制台实现。如果您创建一个可运行的代码段,您将看到堆栈溢出的引号所有键。谢谢!完美的解释我都没听清楚空格谢谢!完美的解释我甚至没听清楚空格。