javascript“undefined”的奇怪之处

时间:2013-05-23 11:57:54

标签: 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条件,而显然超出最后一个索引的索引是未定义的。

您可以在此fiddle中看到它。

请解释..

7 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

此:

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

应该是:

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

(无需使用typeof

答案 2 :(得分:3)

未定义应该是一个字符串,"undefined",工作小提琴:http://jsfiddle.net/asifrc/vRTsE/1/

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

typeof返回一个字符串。您将其与undefined值进行比较。

使用

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

答案 5 :(得分:0)

javascript typeof运算符始终返回字符串,因此您应该像这样对'undefined'进行比较:

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

这是一个更新的小提琴 - http://jsfiddle.net/Pharaon/V7EJZ/

答案 6 :(得分:0)

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

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

Updated fiddle