0

我有以下简单的 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中看到它。

请解释..

4

7 回答 7

6

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

于 2013-05-23T11:59:25.990 回答
5

这个:

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

应该:

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

(无需使用typeof

于 2013-05-23T11:59:42.177 回答
3

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

于 2013-05-23T12:00:40.643 回答
1

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

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

for(var i in input){
    if(typeof input[i+1] == "undefined"){
        console.log("i is last");
    }
}
于 2013-05-23T12:05:14.897 回答
0

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

利用

if(typeof input[i+1] === "undefined"){
于 2013-05-23T12:00:56.827 回答
0

javascripttypeof运算符总是返回字符串,所以你应该'undefined'像这样比较:

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

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

于 2013-05-23T12:01:19.293 回答
0

原来的类型i是字符串,所以要使代码正常工作,您需要将其转换为整数:

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

更新了小提琴

于 2013-05-23T12:05:32.413 回答