Дзіўна, што з JavaScript «нявызначаным»

У мяне ёсць наступны просты код 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() частка не выконвае. Гэта азначае, што ніколі не ўваходзіць у , калі ўмова пры гэтым відавочна паказчык за апошні індэкс не вызначаны.

Вы можаце ўбачыць яго ў гэтым скрыпку .

Калі ласка, растлумачце..

0
<�Код> TypeOf вяртае радок. <�Код> не вызначана гэта ... не вызначана.
дададзена аўтар Shadow Wizard, крыніца
<�Код> TypeOf вяртае радок. <�Код> не вызначана гэта ... не вызначана.
дададзена аўтар Shadow Wizard, крыніца
... у любым выпадку, ваш тэст для апошняга індэкса можа не так пэўны індэкс можа мець нявызначаную значэнне. Я сапраўды не ведаю, чаму вы карыстаецеся для ў , як гэта, але для праверкі апошняга індэкса, вы павінны быць параўнанне я + 1 у <�код > input.length .
дададзена аўтар user1106925, крыніца
... у любым выпадку, ваш тэст для апошняга індэкса можа не так пэўны індэкс можа мець нявызначаную значэнне. Я сапраўды не ведаю, чаму вы карыстаецеся для ў , як гэта, але для праверкі апошняга індэкса, вы павінны быць параўнанне я + 1 у <�код > input.length .
дададзена аўтар user1106925, крыніца
Яшчэ адзін прыклад таго, чаму людзі не павінны выкарыстоўваць TypeOf Foo === «нявызначаны» для праверкі нявызначанага значэння. Гэта выклікае значна больш памылак, чым гэта «вырашае». Проста трымаць яго проста і тэст для ўваход [я + 1] == нявызначанымі , і ігнараваць людзей FUD распаўсюджвацца. Яны, як правіла, на самай справе не думаў, што рэчы праз.
дададзена аўтар user1106925, крыніца
Яшчэ адзін прыклад таго, чаму людзі не павінны выкарыстоўваць TypeOf Foo === «нявызначаны» для праверкі нявызначанага значэння. Гэта выклікае значна больш памылак, чым гэта «вырашае». Проста трымаць яго проста і тэст для ўваход [я + 1] == нявызначанымі , і ігнараваць людзей FUD распаўсюджвацца. Яны, як правіла, на самай справе не думаў, што рэчы праз.
дададзена аўтар user1106925, крыніца
Яшчэ адзін прыклад таго, чаму людзі не павінны выкарыстоўваць TypeOf Foo === «нявызначаны» для праверкі нявызначанага значэння. Гэта выклікае значна больш памылак, чым гэта «вырашае». Проста трымаць яго проста і тэст для ўваход [я + 1] == нявызначанымі , і ігнараваць людзей FUD распаўсюджвацца. Яны, як правіла, на самай справе не думаў, што рэчы праз.
дададзена аўтар user1106925, крыніца

9 адказы

<�Код>, калі (TypeOf ўваход [+ 1] === 'не вызначана') {...}

6
дададзена

<�Код>, калі (TypeOf ўваход [+ 1] === 'не вызначана') {...}

6
дададзена

гэта:

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

Павінна быць:

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

(Няма неабходнасці выкарыстоўваць TypeOf )

5
дададзена
Я зрабіў тую ж памылку, ShadowWizard. Выдалілі мой downvote
дададзена аўтар Dancrumb, крыніца
На жаль, быў упэўнены, што вы напісалі , калі (TypeOf ўваход [+ 1] === нявызначаную) мая памылка. Узяў сабе таксама рэдагаваць свой пост, так што я магу адмяніць маю памылку.
дададзена аўтар Shadow Wizard, крыніца
Добра, што downvotes азначае, што я быць нямым, але можа хто-небудзь растлумачыць, чаму? Гэта працуе правільна (я двойчы праверыў гэта ў Chrome). Ці з'яўляецца гэта проста дрэнны стыль?
дададзена аўтар Rob Johnstone, крыніца
Працуе тут: jsfiddle.net/wXw9Q
дададзена аўтар Rob Johnstone, крыніца
@ShadowWizard - Дзякуй. Я, верагодна, павінен быў бы зрабіць яго больш выразным, каб пачаць з
дададзена аўтар Rob Johnstone, крыніца
+1 Вы маеце рацыю, я думаю, недурныя Оны ўніз прагаласаваў гэты пост
дададзена аўтар asim-ishaq, крыніца

гэта:

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

Павінна быць:

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

(Няма неабходнасці выкарыстоўваць TypeOf )

5
дададзена
Я зрабіў тую ж памылку, ShadowWizard. Выдалілі мой downvote
дададзена аўтар Dancrumb, крыніца
На жаль, быў упэўнены, што вы напісалі , калі (TypeOf ўваход [+ 1] === нявызначаную) мая памылка. Узяў сабе таксама рэдагаваць свой пост, так што я магу адмяніць маю памылку.
дададзена аўтар Shadow Wizard, крыніца
Добра, што downvotes азначае, што я быць нямым, але можа хто-небудзь растлумачыць, чаму? Гэта працуе правільна (я двойчы праверыў гэта ў Chrome). Ці з'яўляецца гэта проста дрэнны стыль?
дададзена аўтар Rob Johnstone, крыніца
Працуе тут: jsfiddle.net/wXw9Q
дададзена аўтар Rob Johnstone, крыніца
@ShadowWizard - Дзякуй. Я, верагодна, павінен быў бы зрабіць яго больш выразным, каб пачаць з
дададзена аўтар Rob Johnstone, крыніца
+1 Вы маеце рацыю, я думаю, недурныя Оны ўніз прагаласаваў гэты пост
дададзена аўтар asim-ishaq, крыніца

Undefined should be a string, "undefined", working fiddle: http://jsfiddle.net/asifrc/vRTsE/1/

3
дададзена
@ Асім-Ісхак Ён выдатна працуе для мяне ў Chrome .. з кансолі, з скрыпкі я звязаны вышэй, і нават хуткая старонкі на маім лакальным серверы .. Ці скрыпка не працуе ў Chrome для вас? Мне было б цікава даведацца, чаму ..
дададзена аўтар asifrc, крыніца
+1 Так гэта працуе. Дзякуючы.
дададзена аўтар asim-ishaq, крыніца

Гэта адбываецца таму, што аператар TypeOf вяртае радок. Вам трэба параўнаць са радком «нявызначанай», як так:

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

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

typeof returns a string. You're comparing it to the undefined value.

выкарыстанне

if(typeof input[i+1] === "undefined"){
0
дададзена

Аказваецца, што тып я з'яўляецца радком, таму, каб зрабіць код працаваць правільна, вы павінны кінуць яго ў цэлы лік:

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

Updated fiddle.

0
дададзена

Javascript TypeOf аператар заўсёды вяртае радок, так што вы павінны параўноўвацца «не вызначанае» , як гэта:

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

Here is an updated fiddle - http://jsfiddle.net/Pharaon/V7EJZ/

0
дададзена