javascript的奇怪之处;“未定义”;

javascript的奇怪之处;“未定义”;,javascript,for-loop,Javascript,For Loop,我有以下简单的Javascript代码 var input = [ 'one', 'two' ]; for(var i in input){ if(typeof input[i+1] == undefined){ console.log("i is the last index"); } } 我不知道我是否做错了什么,但是console.log()部分永远不会执行。这意味着它永远不会进入if条件,而最后一个索引之外的索引显然是未定义的 你可以在

我有以下简单的Javascript代码

var input = [
    'one',
    'two'
];

for(var i in input){
    if(typeof input[i+1] == undefined){
        console.log("i is the last index");
    }
}
我不知道我是否做错了什么,但是
console.log()
部分永远不会执行。这意味着它永远不会进入
if
条件,而最后一个索引之外的索引显然是未定义的

你可以在这张照片上看到

请解释..

如果(输入类型[i+1]=='undefined'){…}
这:

if(typeof input[i+1] == undefined){
应该是:

if(input[i+1] === undefined){

(无需使用
typeof

未定义应为字符串,
未定义“
,工作小提琴:

typeof
返回字符串。您正在将其与
未定义的值进行比较

使用


javascript
typeof
运算符始终返回字符串,因此您应该与
的“未定义”进行比较,如下所示:

if(typeof input[i+1] === 'undefined')

这里有一个更新的fiddle-

,这是因为typeof操作符返回一个字符串。您需要与字符串“undefined”进行比较,如下所示:


事实证明,
i
的类型是string,因此要使代码正常工作,需要将其转换为整数:

for(var i in input){
    if(typeof input[parseInt(i, 10) + 1] === "undefined") {
        console.log(i + " is the last index");
    }
}

.

typeof
返回一个字符串<代码>未定义
是。。。未定义。另一个例子说明了为什么人们不应该使用
typeof foo==“undefined”
来检查
undefined
值。它导致的bug远远多于它“解决”的bug。只需简单地测试
输入[i+1]==未定义的
,忽略FUD人群传播。他们通常没有认真考虑问题……无论如何,您对最后一个索引的测试可能会失败,因为定义的索引可能有
未定义的
值。我真的不知道你为什么要用
来做这样的in
,但是为了测试最后一个索引,你应该把
I+1
输入进行比较。length
。好吧,否决票意味着我很笨,但有人能解释为什么吗?这是正确的(我在Chrome中仔细检查过)。你说得对,我想最愚蠢的人都否决了这篇帖子对不起,我肯定你写了
if(输入类型[i+1]==未定义)
我的错误。我也冒昧地编辑了你的帖子,这样我就可以纠正我的错误。@ShadowWizard-谢谢。我可能应该先说清楚我犯了和暗影巫师一样的错误。把我的downvote@asim-ishaq它在Chrome上对我来说很好。。从控制台,从上面链接的小提琴,甚至是本地服务器上的快速页面。。你用铬合金做的小提琴不行吗?我很想知道为什么。。
var input = [
    'one',
    'two'
];

for(var i in input){
    if(typeof input[i+1] == "undefined"){
        console.log("i is last");
    }
}
for(var i in input){
    if(typeof input[parseInt(i, 10) + 1] === "undefined") {
        console.log(i + " is the last index");
    }
}