这是我从w3schools复制过的代码,我有不同的代码,但我在这个简化的编码中仍然遇到了问题。
<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to create an array, then display it's length</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var foods = ["steak","pizza","bread","fruits"];
var x=document.getElementById("demo");
var y=foods[3];
x.innerHTML= y.length;
}
</script>
</body>
</html>
当我x.innerHTML= fruits.length;
时,我得到了4
,这就是我想要的。
但是当我打电话时
var y=foods[3];
x.innerHTML= y.length;
我得6
这是单词"fruits"
的长度,但我想要数组fruits
的长度。
我该怎么做?
我正在使用jQuery,不知道这是否会影响任何事情。我是否必须在某处添加括号或括号?
答案 0 :(得分:3)
如果(且仅当)变量(myVar
)包含另一个对象(myObj
)的属性名称,您可以使用:
myObj[myVar]
访问该属性。
在这种情况下,你的fruits
数组只是一个普通的局部变量,所以没有办法(没有皱眉的eval
函数)间接访问它。
您当然可以使用fruits.length
直接查找其长度。
更好的解决方案是食物的嵌套对象,而不是数组:
var foods = {
fruits: [ "Banana", "Orange", "Apple", "Mango" ],
steak: [ ... ],
pizza: [ ... ],
bread: [ ... ]
};
此时您可以使用上面的语法并写:
var myType = 'fruits';
var count = foods[myType].length;
答案 1 :(得分:2)
也许你想要的是
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var foods = ["steak","pizza","bread", fruits];
这样您的代码就可以运行,因为我们已经在fruits
内部存储了对数组foods
的引用,而不是字符串"fruits"
。
答案 2 :(得分:2)
您似乎对变量标识符fruits
与字符串"fruits"
之间的差异存在巨大误解。
让我们一起描述你的代码,这样你就可以很好地理解你在做什么了。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
您有一个名为fruits
的变量,用于标识包含四个元素的数组,所有字符串。您可以使用该数组执行以下操作:
alert(fruits.length); // 4
alert(fruits[0]); // Banana
alert(fruits[3]); // Mango
alert(fruits); // Banana, Orange, Apple, Mango
var foods = ["steak","pizza","bread","fruits"];
您有一个名为foods
的变量,它同样标识了四个元素的数组:所有字符串。您可以再次执行以下操作:
alert(foods.length); // 4
alert(foods[0]); // steak
alert(foods[3]); // fruits
alert(foods); // steak, pizza, bread, fruits
foods[3].length
您应该注意到,当我们alert(fruits)
时,它会显示Banana, Orange, Apple, Mango
。当我们alert(foods[3])
时,它显示fruits
。这应该给你一个提示:你命名为fruits
的数组和字符串"fruits"
是两个不同的东西!
这就是foods[3].length
为6的原因,因为"fruits"
的长度是6。
<强>解决方案强>
编辑:检查Altiniak的答案。我留下余下的帖子进行长期有效的解释。使用window
的想法几乎比使用eval()
...
答案 3 :(得分:1)
以下内容:
var y=foods[3];
x.innerHTML= y.length;"
您正在将foods
数组中的第4个元素分配给y
变量,即字符串“fruits”。如果你想要数组的长度,只需这样做:
x.innerHTML = foods.length;
编辑:我假设你只想要食物数组的长度而不是将水果数组存储在食物变量中(如果你需要,Gaby的回答可以给你那个)
答案 4 :(得分:0)
希望我得到你想要的东西。你有“水果”这个词,你想要获取名为fruits
的var的内容,对吧?
可以使用eval
完成。
var fruitlen = eval('fruits').length;
这是你想要的吗?