Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于循环选择选项的javascript选项_Javascript - Fatal编程技术网

用于循环选择选项的javascript选项

用于循环选择选项的javascript选项,javascript,Javascript,最近我偷了一些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; }

最近我偷了一些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;
      }
    }
var el=document.getElementById('mySelect');
对于(var j=0;j
在查看第一个代码时,如果找不到“Apple”,什么会停止循环?哪一个更好?

长话短说:

在for循环中,执行一次
var opt
,然后执行后续的
opt=data[i]

这很重要,因为:

var opt,数据=[1,2];//定义一次
console.log(opt=data[0])//1
console.log(opt=data[1])//2
console.log(opt=data[2])//未定义

在for循环中,执行一次
var opt
,然后执行后续的
opt=data[i]

这很重要,因为:

var opt,数据=[1,2];//定义一次
console.log(opt=data[0])//1
console.log(opt=data[1])//2

log(opt=data[2])//undefined
在这两种情况下,第二个表达式确定循环是继续还是停止。在你的

for (var j = 0; j < el.options.length; j++) {}
不同之处在于,它们声明了一个变量
opt
,并在第二个表达式中将其设置为(也是递增的)数组索引。在某些情况下,
j
超出了数组的边界,并且
opts[j]
未定义的。由于JS中的等式表达式是正确站点的值,因此该表达式也是未定义的,即falsy,循环停止


至于哪个更好?两者都有效。但是,当您不得不挠头思考其中一个问题时,您希望在多大程度上依赖于更难阅读的代码?

在这两种情况下,第二个表达式决定循环应该继续还是停止。在你的

for (var j = 0; j < el.options.length; j++) {}
不同之处在于,它们声明了一个变量
opt
,并在第二个表达式中将其设置为(也是递增的)数组索引。在某些情况下,
j
超出了数组的边界,并且
opts[j]
未定义的。由于JS中的等式表达式是正确站点的值,因此该表达式也是未定义的,即falsy,循环停止


至于哪个更好?两者都有效。但是,当你不得不挠头思考其中一个问题时,你希望在多大程度上依赖于更难阅读的代码?

测试是opt=opts[j]
的返回值,即opt。当j达到opts.length时,该值将未定义,这是错误的,因此循环停止。你对“更好”的标准是什么?有很多选择,为了确定“更好”,你需要说明应该如何评估它们(更快、更容易维护、更短等等)。我想当opts用完时,停止它的是opt=opts[j]是错误的,对我来说似乎有点可爱。也许有人可以给它一个理由。测试是opt=opts[j]
的返回值,它是opt。当j达到opts.length时,该值将未定义,这是错误的,因此循环停止。你对“更好”的标准是什么?有很多选择,为了确定“更好”,你需要说明应该如何评估它们(更快、更容易维护、更短等等)。我想当opts用完时,停止它的是opt=opts[j]是错误的,对我来说似乎有点可爱。也许有人可以给它一个理由。这并没有回答“如果‘苹果’没有找到,什么会停止循环?”这个问题,我认为应该这样做。这并没有回答“如果‘苹果’没有找到,什么会停止循环?”这个问题,我认为应该这样做。