javascript中[]表示法中的对象文字

时间:2016-09-06 10:11:01

标签: javascript javascript-objects

我有两个例子。在第一个例子中:

a. 
    1. var object = {1 : "value"};

       alert(object[1]);

    2. var object = {1 : "value"};

       alert(object["1"]);

在两个示例中,输出都是“值”。我在书中读到 object [1] 会找到变量1并用该值替换值。      由于1不能在javascript (var 1="some var" //not allowed)中声明为变量名,因此只是alert(object[1])尝试查找声明的字符串 var object = {1 : "value"};并提醒“value”。

因为,1和2之间没有区别。示例警报会产生相同的结果。

b.
   1. 
    var object = {a : "value"};

    alert(object["a"]);

        The above example is pretty much clear that it is finding out string "a".

    2. 
    var object = {a : "value"};

    alert(object[a]);

上面的例子是一个错误,因为我们没有声明

var a = "some";

我只是想知道 a之间的区别。 1和a.2 以及这些例子我的理解是否正确?

2 个答案:

答案 0 :(得分:3)

  

在两个示例中,输出都是“值”。我在书中读到,对象[1]将找到一个变量1并用该值替换该值。

没有。它需要一个字符串。

如果您传递一个数字文字,它会将数字转换为字符串。

如果你传递一个字符串文字,它会使用字符串文字作为字符串。

如果你传递一个变量,那么它获取该变量的值并将其转换为字符串(如果它不是一个字符串)。

1不是变量名。 JavaScript的语法要求将其视为数字文字。

  

我只是想知道a之间的区别。 1和2

在案例1中,您传递了一个数字文字。在案例2中,您传递的是未声明的变量。当您尝试从未声明的变量中获取值时,会出现ReferenceError。

您在使用某个值进行操作的任何其他上下文中都会获得相同的效果。

var foo = 1; // Assigns 1
var foo = bar; // Throws a reference error because bar is undeclared

答案 1 :(得分:1)

正在发生两件事。

首先,对象键始终是字符串,但在不会导致语法问题的情况下,您可以在没有引号的情况下编写它们。

{1: "value"}
{a: "value"}

这些是其他写作方式

{"1": "value"}
{"a": "value"}

即使a碰巧是一个变量,当在对象文字中使用时,它只是意味着字符串"a"并且与变量无关。

var key = "hmm";
var object = {key: "value"}; // object is now {"key": "value"}

如果要将变量的值作为属性,可以在现代浏览器中使用以下ES6语法:

object = {[key]: "value"}; // object is now {"hmm": "value"}

另一件事是昆汀所说的;当您使用对象[ x ]查找属性的值时, x 将被转换为字符串。