从变量调用的js array.length不起作用,为什么?

时间:2013-01-20 20:11:00

标签: javascript jquery

这是我从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,不知道这是否会影响任何事情。我是否必须在某处添加括号或括号?

5 个答案:

答案 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;

这是你想要的吗?