使用对象时…的javascript

使用对象时…的javascript,javascript,Javascript,JavaScript声明: 每次迭代时都会为变量指定不同的属性名称 因此,考虑到这一点,我尝试了以下方法: var cup = new Object(); cup.color = 'red'; cup.design = 'regular'; cup.weight = '2.8lbs.'; cup.material = 'ceramic'; for( property in cup ) {

JavaScript声明:

每次迭代时都会为变量指定不同的属性名称

因此,考虑到这一点,我尝试了以下方法:

var cup = new Object();
        cup.color = 'red';
        cup.design = 'regular';
        cup.weight = '2.8lbs.';
        cup.material = 'ceramic';

        for( property in cup )
        {
            console.log( cup.property );
        }
这将返回未定义的。我知道这将适用于cup[属性]。如果在上面的循环中将属性名分配给cup,为什么我前面的示例不起作用?为什么它只使用括号工作

参考文档会有所帮助。

因为cup.property和cup[property]具有根本不同的含义。有关详细信息,请参阅最近的JS教程。property指的是名为property的属性。cup[property]指的是具有变量属性值给定名称的属性。您正在寻找后者。

cup.property与cup['property']完全相同,并且从未在您的对象上定义名为property的属性。你从来没有分配过它。你只是想在for..in循环中读取它

但是,这将记录对象上的所有值:

for(property in cup) {
    console.log(cup[property]);
}

// red
// regular
// 2.8lbs.
// ceramic 

根据ECMA脚本5.1规范,定义为

或括号符号:

MemberExpression [ Expression ] 
CallExpression [ Expression ]
因此,当您使用时,以下字符串将被视为实际的属性名称。在本例中,您没有名为property的属性。这就是为什么你没有定义

使用括号时,括号内的表达式将被求值以获得实际的属性名称,然后将访问该属性。这就是为什么使用括号表示法时它会起作用。

属性作为字符串返回。在JS中,如果需要,对象是键值对字典的集合。JS对象将属性名称存储为字符串。因此,您可以通过提供属性的字符串值来查找属性

var foo = {}; // this has 0 "own" keys
foo.x = "Hello";
foo["y"] = "World";
// now foo looks like this {"x": "Hello", "y": "World"}

var prop = "y";
console.log( foo.y ); // World
console.log( foo["y"] ); // World
console.log( foo[prop] ); // World
console.log( foo.prop ); // undefined, because it looks for a property named "prop"
var bar = {};
bar["me@mail.com"] = true;
bar["hello world"] = 12;
console.log( bar["me@mail.com"] ); // true
console.log( bar["hello world"] ); // 12
当您使用的键与点表示法不合法时,括号表示法非常有用

var bar = {};
bar["me@mail.com"] = true;
bar["hello world"] = 12;
console.log( bar["me@mail.com"] ); // true
console.log( bar["hello world"] ); // 12
请注意,由于数组是对象,因此上述内容也适用于它们

var arr = ["a", "b", "c"];
console.log( arr["1"] ); // b
console.log( arr["length"] ); // 3

我告诉你,如果你假设定义了cup变量,那么

cup.color   // red
cup.weight  // 2.8lbs
cup.height  // undefined because it is not been defined
由此得出什么结论

如果未定义该属性,则返回undefined

在本例中,当我在google控制台中检查此代码时,您会看到它重新调整了未定义的4次 因为有4个属性。。menas的意思是,属性的名称没有正确分配给变量属性,当您试图检索未知属性时,它返回未定义的属性。但这是错误的


实际上,检索的方法都是错误的。当然,这并不是代码引擎分配错误属性名称的机会。不要像这样检索cupt.property,你应该写cup[property]

你正在寻找一个名为'property'的值,它是未定义的。来吧,我放弃你那么多时间,至少给我的帖子投票吧你在反驳@torazaburoyou说cup.property和cup['property',但他说cup.property和cup完全一样[property]的含义完全不同。@anni cup['property']与cup[property]不同,您混淆了字符串和变量。您与@OlegThanks相矛盾!该引用确实有帮助!