使用对象时…的javascript
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 ) {
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相矛盾!该引用确实有帮助!