Javascript 点方括号表示法

Javascript 点方括号表示法,javascript,syntax,square-bracket,Javascript,Syntax,Square Bracket,我试图理解点和方括号符号之间的区别。在浏览SO和其他一些网站上的各种示例时,我遇到了以下两个简单示例: var obj={abc:hello}; var x=abc; 变量y=obj[x]; 精神病学//输出-hello从JavaScript对象访问/创建属性可以通过两种方式完成 使用点表示法 使用方括号表示法 当某个属性未定义时,即对象中不存在该属性,而您试图访问它时,很明显,您将无法定义该属性,因为它不存在 因此,在第一个示例中,您正在访问一个属性,在第二个示例中,您正在创建一个属性。因此,

我试图理解点和方括号符号之间的区别。在浏览SO和其他一些网站上的各种示例时,我遇到了以下两个简单示例: var obj={abc:hello}; var x=abc; 变量y=obj[x]; 精神病学//输出-hello从JavaScript对象访问/创建属性可以通过两种方式完成

使用点表示法 使用方括号表示法 当某个属性未定义时,即对象中不存在该属性,而您试图访问它时,很明显,您将无法定义该属性,因为它不存在

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

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

使用点表示法 使用方括号表示法 当某个属性未定义时,即对象中不存在该属性,而您试图访问它时,很明显,您将无法定义该属性,因为它不存在


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

在点符号中,点后的名称是被引用属性的名称。因此:

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的值

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

// with dot notation
var obj = { name: "John Doe", age: 30 };
var key = "age";
var value = 60;

obj.key = value; // referencing the literal property "key"
console.log(obj) // = { name: "John Doe", age: 30, key: 60 }


// with square bracket notation
var obj = { name: "John Doe", age: 30 };
var key = "age";
var value = 60;

obj[key] = value; // referencing property by the value of the key variable ("age")
console.log(obj)  // = { name: "John Doe", age: 60 }

在点表示法中,点后的名称是被引用属性的名称。因此:

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的值

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

// with dot notation
var obj = { name: "John Doe", age: 30 };
var key = "age";
var value = 60;

obj.key = value; // referencing the literal property "key"
console.log(obj) // = { name: "John Doe", age: 30, key: 60 }


// with square bracket notation
var obj = { name: "John Doe", age: 30 };
var key = "age";
var value = 60;

obj[key] = value; // referencing property by the value of the key variable ("age")
console.log(obj)  // = { name: "John Doe", age: 60 }

可能重复查看整个对象,而不仅仅是修改的属性。obj.key表示obj的属性键。obj[key]指其密钥存储在obj的变量key中的属性。有明显的区别。使用obj.key会覆盖相同的属性,因此不能同时设置名称和年龄。只需使用console.logobj查看您的对象。姓名和年龄不会改变,您将拥有另一个无意义的属性键,其中包含一些数字或字符串。@Xufox感谢您抽出时间。这行代码确实帮助了我-obj.key是指obj的属性键。obj[key]指其密钥存储在obj的变量key中的属性。有时一个人忽略了非常明显的事情,除非有人以正确的方式引导和指出它们。。。非常感谢,朋友。可能会重复查看整个对象,而不仅仅是您修改的属性。obj.key是指obj的属性键。obj[key]指其密钥存储在obj的变量key中的属性。有明显的区别。使用obj.key会覆盖相同的属性,因此不能同时设置名称和年龄。只需使用console.logobj查看您的对象。姓名和年龄不会改变,您将拥有另一个无意义的属性键,其中包含一些数字或字符串。@Xufox感谢您抽出时间。这行代码确实帮助了我-obj.key是指obj的属性键。obj[key]指其密钥存储在obj的变量key中的属性。有时一个人忽略了非常明显的事情,除非有人以正确的方式引导和指出它们。。。非常感谢,朋友。嘿,Frxstrem,非常感谢你,你的例子和解释消除了我对这个话题的所有疑问,现在真是松了一口气D非常感谢……嘿,Frxstrem,非常感谢你,你的例子和解释消除了我对这个话题的所有疑问,现在真是松了一口气……:D非常感谢…感谢Pratyush花时间。这一行真的帮助了我,每当某个属性未定义,即不存在于对象中,并且您尝试访问它时,您将获得UnfinedThanks Pratyush花时间。这一行真的帮助了我,每当某个属性未定义,即不存在于对象中,并且您尝试访问它时,你会得到未定义的