javascript - 为什么以这种方式交换字符有效的 JavaScript?
问题描述
我对这段代码的工作原理感到困惑。我认为这A
需要'A'
为了这两个字符交换,但它有效。另外,这有什么名字吗?从表面上看,我认为它正在解构,但我不确定。
var translations = {
A : 'U'
};
console.log(translations['A']); //returns U
我会假设你需要这样写:
var translations = {
'A' : 'U'
};
console.log(translations['A']); //also returns U
解决方案
对象或属性键可以是标识符名称(即标识符 + 保留字)、字符串文字或数字文字。无论您调用它还是以访问它的方式都A
无关紧要。https://ecma-international.org/ecma-262/6.0/#sec-object-initializer'A'
属性名称
属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象,包括数字,都通过 toString 方法类型转换为字符串。
var object = {};
object['1'] = 'value';
console.log(object[1]);
这输出“值”,因为 1 被类型转换为“1”。
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);
这也输出“值”,因为 foo 和 bar 都被转换为相同的字符串。在 SpiderMonkey JavaScript 引擎中,这个字符串是“['object Object']”。
此外,您所做的基本上是创建一个Object。我没有看到你在任何地方摧毁它。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
创建对象
但是,文字或初始化符号的优点是,您可以快速创建具有大括号内属性的对象。您只需记下以逗号分隔的键列表:值对。下面的代码创建了一个具有三个属性的对象,键是“foo”、“age”和“baz”。这些键的值是字符串“bar”、数字 42 和另一个对象。
var object = {
foo: 'bar',
age: 42,
baz: {myProp: 12}
}
访问属性
创建对象后,您可能想要读取或更改它们。可以使用点表示法或方括号表示法访问对象属性。有关详细信息,请参阅属性访问器。
object.foo; // "bar"
object['age']; // 42
object.foo = 'baz';
可以将对象视为关联数组(又名映射、字典、哈希、查找表)。此数组中的键是对象属性的名称。在谈到对象的属性时,通常会区分属性和方法。但是,属性/方法的区别只不过是一种约定。方法只是一个可以调用的属性,例如,如果它具有对 Function 实例的引用作为其值。
推荐阅读
- java - 创建名为“userController”的 bean 时出错:通过字段“userService”表达的不满足的依赖关系
- python - 读取文件时的Python UnicodeEncodeError
- node.js - Websocket 431 错误:意外的服务器响应
- python - Pygame 参数 2 必须是 pygame.surface 而不是 str
- python - Python docker 容器使用 print()
- laravel - 路由参数传递错误:Laravel+Vue
- paypal - 访问此贝宝 API“https://api.sandbox.paypal.com/v1/payments/payouts”时获得 Http 响应代码 403
- phoenix-framework - Phoenix Presence:如何将“presence_diff”重命名为更具体的域?
- python - 如何在 Altair-python 中取消堆叠分组条形图?
- html - 我希望输入框中的文本正确对齐并在填充后开始新行