最近,我偷了一些javascript来选择select元素中的一个选项:
var el=document.getElementById('mySelect');
var opts=el.options;
for (var opt, j = 0; opt = opts[j]; j++) {
if (opt.value == 'Apple') {
el.selectedIndex = j;
break;
}
}
它工作得很好,但当我看着它时,我意识到它与我原本要写的东西不同:
var el=document.getElementById('mySelect');
for (var j = 0; j < el.options.length; j++) {
if (el.options[j].value == 'Apple') {
el.selectedIndex = j;
break;
}
}
在查看第一个代码时,如果找不到'Apple‘,什么会停止循环?哪一个“更好”?
发布于 2018-10-13 05:49:13
在这两种情况下,第二个表达式确定循环是应该继续还是应该停止。在你的世界里,
for (var j = 0; j < el.options.length; j++) {}
这很简单,j
会递增,只要j
小于选项的长度,它就是真的,在某个点上它等于长度,然后它就会停止。在另一个中,
for (var opt, j = 0; opt = opts[j]; j++) {}
不同之处在于,它们声明了一个变量opt
,并在第二个表达式中将其设置为(也是递增的)数组索引。在某种程度上,j
超出了数组的界限,而opts[j]
就是undefined
。由于JS中的等式表达式是正确站点的值,因此该表达式也是undefined
,这是错误的,循环将停止。
至于哪一个更好呢?这两种方法都有效。但是,当你不得不挠头并想知道其中的一个时,你有多想依赖更难读的代码呢?
https://stackoverflow.com/questions/52787323
复制相似问题