Javascript var警告,但何时使用是未定义的
javascript var alerts but when used is undefined
这太奇怪了。看看这个:
for( var i = 0; i <= videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
有3个视频。在FF中,这提醒所有3个视频id然后失败,说视频[i]是未定义的。不知道。
去掉for
循环条件中的=
for( var i = 0; i < videos.length; i ++ ){
...
}
对于<=
,您正在迭代到索引,比Array
的实际索引值大一个,因此您正在迭代一个返回undefined
的无效索引。
如果有array('A','B','C')
,则长度为3
。现在,如果迭代到3 <= i
,并包含0
,就像Javascript中数组的开头一样,您实际上将循环4次,而不是3次。
A
的索引值是0
,而不是1
,所以你需要在i
等于长度之前停止,而不是继续直到i
等于长度,因为0
索引本质上是添加到循环的总长度上,即3+1。在这个数组上进行4次循环会太多,因此是<
而不是<=
。你应该在4之前停止,而不是在4之后停止,而是在5之前停止。
另外,缓存Array
的长度通常是很好的做法,因为有些浏览器没有优化它。
由于您正在执行i <= videos.length
,因此您正在读取videos
数组的末尾。Javascript数组是零索引的,所以你通常会想迭代到长度- 1。
相反,尝试:
for( var i = 0; i < videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
将for循环中的"<="改为"<"。这应该能解决问题。
问题是数组中只有三个元素。首先用0来处理第一项。这意味着2是最后一个有效索引。当代码试图访问索引3时,它失败了。(当警报(…)试图访问不存在的第4个元素(位置3)时,该故障点将在循环的第4次出现。
相关文章:
- 当项目投入使用时,Javascript是未定义的
- Replace()产生“;未捕获的类型错误:未定义的不是函数“;当与零一起使用时
- "TypeError:t.start未定义”;,在fullcalendar.min.js中,同时在我的网站上使
- 用HTML5FileReader填充的Javascript多维数组未定义(但仅在首次使用时!)
- 在将 Pickadate 与 Meteor 一起使用时,未定义不是函数错误
- 如何使此循环工作?它's返回未定义的语言js
- 用于从许多带有“for”循环的URL中获取HTML信息的X射线使对象未定义
- 全局变量在函数中使用时返回未定义
- 使图像库未定义不是一个函数
- Meteor:Session.set,在Router.route()中,在“客户端”页面中使用时是未定义的
- 尝试选择哪个单选按钮以及何时通过代码放置它返回未定义
- 如何使 requirejs 填充模块能够访问未定义的依赖项
- 变量在不同的方法中使用时是“未定义的”
- 在JavaScript控制台中,何时(以及为什么){}未定义
- 如何使templateUrl为null或未定义或空字符串的指令
- 引导程序:'未定义的TypeError不是函数'/'没有方法'选项卡''当使
- 输入字段值何时等于'',null或未定义
- Modernizr / yepno返回“n是未定义的”;在GreaseMonkey中使用时出现错误
- for循环的计数器变量在函数中使用时未定义
- JS返回's未定义何时选中并且我更改所选的选择选项