javascript的奇怪之处;“未定义”;
我有以下简单的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条件,而最后一个索引之外的索引显然是未定义的 你可以在
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
返回字符串。您正在将其与未定义的值进行比较
使用
javascripttypeof
运算符始终返回字符串,因此您应该与的“未定义”进行比较,如下所示:
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");
}
}