点和方括号表示法

时间:2017-06-07 16:01:11

标签: javascript syntax square-bracket

我正在尝试理解Dot和Square Bracket符号之间的区别。在SO和其他一些网站上浏览各种示例时,我遇到了这两个简单的例子:

var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello

var user = {
  name: "John Doe",
  age: 30
};
var key = prompt("Enter the property to modify","name or age");
var value = prompt("Enter new value for " + key);
user[key] = value;
alert("New " + key + ": " + user[key]);

如果在第三行中我将obj[x]替换为obj.x,则第一个示例返回y未定义。为什么不"hello"

但是在第二个例子中,表达式user[key]可以简单地替换为user.key而没有任何异常行为(至少对我来说)。 现在这让我感到困惑,因为我最近了解到如果我们想要通过存储在变量中的名称访问属性,我们使用[]方括号表示法。

2 个答案:

答案 0 :(得分:4)

在点表示法中,点后面的名称是被引用属性的名称。所以:

var str_a="123,124";
var str_b ="125,126";
var str_ab= str_a + str_b;
console.log(str_ab);

但是,在方括号表示法中,被引用的属性的名称是方括号中的任何内容的

var foo = "bar";
var obj = { foo: 1, bar: 2 };

console.log(obj.foo) // = 1, since the "foo" property of obj is 1,
                     //      independent of the variable foo

换句话说,点符号var foo = "bar"; var obj = { foo: 1, bar: 2 }; console.log(obj[foo]) // = 2, since the value of the variable foo is "bar" and // the "bar" property of obj is 2 console.log(obj["foo"]) // = 1, since the value of the literal "foo" is "foo" and // the "foo" property of obj is 1 始终等同于obj.foo,而obj["foo"]则取决于变量obj[foo]的值。

在您的问题的特定情况下,请注意点表示法和方括号表示法之间的区别:

foo

答案 1 :(得分:0)

从JavaScript对象中访问/创建属性可以通过两种方式完成

  1. 使用 Dot 表示法
  2. 使用方括号表示法
  3. 每当某个属性未定义,即对象中不存在,并且您尝试访问它时,您将获得undefined(显然,因为它不存在)。

    因此,在第一个示例中,您访问属性,而在第二个示例中,您创建属性。因此,替换符号不会影响第二个示例中的代码。