2012-11-01 64 views
1
var myArray = ['burak', 'mirhan', new Date(), 'ibrahim']; 


for (var i = 0; i <= myArray[i].toString().length; i++) { 
    alert (myArray [i].toString().length); 
} 

ı写上面的代码。有用。但萤火虫警告“myArray [i]未定义”。我无法解决它。你能帮我解决吗?正如你可以理解的,我有点在JavaScript上noob。我正在努力学习,所以谢谢你的帮助。Javascript Arrays

回答

4

当你遍历数组,你应该简单地看阵列的长度,而不是在数组的当前元素是字符串的长度:

for (var i = 0; i < myArray.length; i++) 
+0

也许解释为什么OP的代码不起作用,这是如何不同以及它为什么起作用?我不想偷你的雷霆:) – Ian

1

假设你想遍历数组中的每一个项目,你需要得到数组长度:

var myArray = ['burak', 'mirhan', new Date(), 'ibrahim']; 


for (var i = 0; i < myArray.length; i++) { 
    alert (myArray [i].toString().length); 
} 
+0

请注意'<'是需要的,而不是'<='。 – nnnnnn

+0

确实。更新了我的帖子。谢谢。 –

2
var myArray = ['burak', 'mirhan', new Date(), 'ibrahim']; 


for (var i = 0, len = myArray.length; i < len; i++) { 
    console.log(myArray[i]); 
}; 

如果你是一个JS efficienado :)

2

在JavaScript中,数组索引起始于0,并且数组的.length属性将比当前最高元素索引高一个。因此,对于具有四个相邻元素.length你的阵列将是4和构件指数是0,1,2和3

你需要设置你的循环,从0运行.length - 1,所以使用i < myArray.length而非i <= myArray[i].toString().length

for (var i = 0; i < myArray.length; i++) 

的原因,你虽然你的代码是工作比错误另一种是因为你有i <= myArray[i].toString().length它在阵列中测试i对元素的toString()值的长度,而不是对数组的长度本身。因此,在第一次迭代中,当i为0时,它将测试0是否小于或等于数组中第一个元素的长度,如果i小于第二个元素的长度,则在第二次迭代中测试它​​。向前。由于阵列中的所有项目都有比阵列本身长度大的.toString().length,因此循环会遍历所有元素,但当i到达4时,它试图测试不存在的元素。

+0

+1对于数组的.length属性将比当前最高元素索引高1 –