【问题标题】:javascript: unreachable code in for iteratorjavascript:迭代器中无法访问的代码
【发布时间】:2015-07-31 15:20:22
【问题描述】:

好吧,我觉得这个有点愚蠢。

我正在尝试定义一个函数来检查一个项目是否已经存在于列表框项目集合中(实际上可以是任何集合)

这里是:

<script type="text/javascript">
        function canInsert(listbox, item)
        {
            if (item == null)
                return true;

            var itemCount = listbox.GetItemCount();

            for (var i = 0; i < itemCount; i++)
            {
                var nitem = listbox.GetItem(i);
                if (nitem.value === item.value)
                    return false;
                return true;
            }
        }
    </script>

使用 VS 2015 CE,它说 i++ 是无法访问的代码。如何以及为什么?

【问题讨论】:

  • return true; 移出循环 - 在对canInsert 说“是”之前,您需要检查所有项目,并避免undefined 导致空listbox 的情况
  • i++ 仅在第一个循环完成后进行评估。 return true; 阻止了这种情况的发生。
  • 是的,我在发布此内容后才发现。我多么愚蠢。如果可以的话,我会投反对票。

标签: javascript collections visual-studio-2015


【解决方案1】:

正如 Igor 所说,当你在 for 循环结束时返回 true 时,JS 将立即退出函数并返回值 'true'。

你可以执行你当前拥有的for循环,如果你的if语句条件满足,则返回false并退出函数。在您的 for 循环之后,如果条件从未满足,则将返回 true。您的代码应如下所示:

<script type="text/javascript">
    function canInsert(listbox, item)
    {
        if (item == null)
            return true;

        var itemCount = listbox.GetItemCount();

        for (var i = 0; i < itemCount; i++)
        {
            var nitem = listbox.GetItem(i);
            if (nitem.value === item.value)
                return false;
        }
        return true;
    }
</script>

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多