【问题标题】:Why is swapping characters this way valid JavaScript?为什么以这种方式交换字符有效的 JavaScript?
【发布时间】:2018-08-04 08:32:02
【问题描述】:

我对这个 sn-p 代码的工作原理感到困惑。我假设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/

【问题讨论】:

标签: javascript object character swap


【解决方案1】:

对象或属性键可以是标识符名称(即标识符 + 保留字)、字符串文字或数字文字。在访问它的方式上,您是否将其称为A'A' 并不重要。 https://ecma-international.org/ecma-262/6.0/#sec-object-initializer

属性名称

属性名称必须是字符串。这意味着非字符串对象 不能用作对象中的键。任何非字符串对象,包括 一个数字,通过 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}
}

访问属性

创建对象后,您可能想要读取或更改 他们。对象属性可以通过使用点符号或 括号符号。有关详细信息,请参阅property accessors

object.foo; // "bar"
object['age']; // 42

object.foo = 'baz';

可以将对象视为关联数组(也称为映射, 字典、哈希、查找表)。此数组中的键是名称 对象的属性。当谈到一个对象的时候,这是典型的 属性来区分属性和方法。 但是,属性/方法的区别只不过是 惯例。方法只是一个可以调用的属性,因为 例如,如果它具有对 Function 实例的引用作为其值。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2020-08-10
  • 2012-05-11
  • 2021-07-19
  • 1970-01-01
  • 2012-02-18
  • 2022-12-03
相关资源
最近更新 更多