除了第一种形式可以使用变量而不仅仅是字符串文字这一显而易见的事实之外,是否有理由使用其中一种而不是另一种,如果是这样,在哪些情况下使用呢?

代码:

// Given:
var foo = {'bar': 'baz'};

// Then
var x = foo['bar'];

// vs. 
var x = foo.bar;

上下文:我已经编写了一个生成这些表达式的代码生成器,我想知道哪个更可取.

推荐答案

(来源于here.)

Square bracket notation allows the use of characters that can't be used with dot notation:

var foo = myForm.foo[]; // incorrect syntax
var foo = myForm["foo[]"]; // correct syntax

包括非ASCII(UTF-8)字符,如myForm["ダ"](more examples).

Secondly, square bracket notation is useful when dealing with property names which vary in a predictable way:

for (var i = 0; i < 10; i++) {
  someFunction(myForm["myControlNumber" + i]);
}

Roundup:

  • 点符号书写速度更快,阅读更清晰.
  • 方括号表示法允许访问包含

另一个不能与点符号一起使用的字符示例是property names that themselves contain a dot.

例如,json响应可以包含一个名为bar.Baz的属性.

var foo = myResponse.bar.Baz; // incorrect syntax
var foo = myResponse["bar.Baz"]; // correct syntax

Javascript相关问答推荐

foreach循环中的Typescript字符串索引

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

如何才能拥有在jQuery终端中执行命令的链接?

MongoDB中的引用

如何在angular中从JSON值添加动态路由保护?

嵌套异步JavaScript(微任务和macrotask队列)

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

为什么当我解析一个promise时,输出处于挂起状态?

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

Mongoose post hook在使用await保存时不返回Postman响应

如何迭代叔父元素的子HTML元素

在浏览器中触发插入事件时检索编码值的能力

当输入字段无效时,我的应用程序不会返回错误

第二次更新文本输入字段后,Reaction崩溃

使用带有HostBinding的Angular 信号来更新样式?

我如何才能获得价值观察家&对象&S的价值?

使用props 将VUE 3组件导入JS文件

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

Node.js的Fetch()调用总是创建新的Express会话