1

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

4

5 回答 5

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;
于 2013-01-20T20:20:44.043 回答
2

也许你想要的是

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var foods = ["steak","pizza","bread", fruits];

这样你的代码就可以工作了,因为我们在fruits里面存储了一个对数组的引用foods而不是字符串"fruits"

于 2013-01-20T20:17:21.607 回答
2

fruits您似乎对变量标识符和字符串之间的区别有很大的误解"fruits"

让我们一起描述您的代码,以便您了解自己在做什么。


  • var fruits = ["Banana", "Orange", "Apple", "Mango"];

您有一个名为的变量fruits,它标识一个由四个元素组成的数组,全部为 strings。您可以使用该数组执行以下操作:

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()...

于 2013-01-20T20:33:00.593 回答
1

在下面的:

var y=foods[3];
x.innerHTML= y.length;"

foods您将数组中的第 4 个元素分配给y变量,即字符串“fruits”。如果您想要数组的长度,只需执行以下操作:

x.innerHTML = foods.length;

编辑:我假设你只想要 food 数组的长度而不是将 fruits 数组存储在 foods 变量中(如果你需要,Gaby 的回答可以给你)

于 2013-01-20T20:13:24.643 回答
0

希望我能得到你想要的。你有“fruits”这个词,你想从中获取 var named 的内容fruits,对吧?

这可以使用eval.

var fruitlen = eval('fruits').length;

这是你想要的吗?

于 2013-01-20T20:20:00.670 回答