首页 > 解决方案 > 为什么以这种方式交换字符有效的 JavaScript?

问题描述

我对这段代码的工作原理感到困惑。我认为这A需要'A'为了这两个字符交换,但它有效。另外,这有什么名字吗?从表面上看,我认为它正在解构,但我不确定。

var translations = {
  A : 'U'
};
console.log(translations['A']); //returns U

我会假设你需要这样写:

var translations = {
  'A' : 'U'
};
console.log(translations['A']); //also returns U

https://jsfiddle.net/ud37asp8/14/

标签: javascriptobjectcharacterswap

解决方案


对象或属性键可以是标识符名称(即标识符 + 保留字)、字符串文字或数字文字。无论您调用它还是以访问它的方式都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 实例的引用作为其值。


推荐阅读