2017-08-14 10 views
-1

I次のコードを持ってなぜロジックが含まれていることができない場合は、未定義の

if (users[username]["password"] == password) { 
    console.log("user auth!"); 
} 

ので、パスワードはユーザ名が、それは未定義にusers[username]["password"]を引き起こすだろう存在し、壊れていない何とかならば、それはログインが、一致した場合どのようにコードを停止するのではなく、定義されていないときにfalseステートメントを渡すことができますか?

+1

'場合(ユーザーが[ユーザー名] &&ユーザーが[ユーザー名]みましょう。パスワード===パスワード)' – Li357

+0

は 'ユーザ[ユーザ名]'や 'ユーザーが[ 'ユーザ名']であります'? –

+2

'if(ユーザのユーザ名&&ユーザ[ユーザ名] .password ===パスワード)'のように '? – Ryan

答えて

1
foo = {} 
foo.bar // You will get an undefined. 
foo.bar.baz // You will get a TypeError if there's no bar in foo. 

これは、JavaScriptエンジンが未定義のプロパティを読み取ることができないためです。

そして条件をfoo.bar && foo.bar.bazに置き換えると、問題が解決する場合があります。

foo.barが未定義の場合、エンジンがfoo.barを満たし、undefinedになると、この論理式の値はundefinedに設定されます。エンジンは続かず、foo.bar.bazという値を得ようとします。

しかし、foo.barが定義されている場合は、エンジンが起動し、式の値が正しくfoo.bar.bazに設定されます。

JavaScriptの論理演算子の機能です。ここ
あなたが見つけることができる詳細 Logical Operators - JavaScript | MDN

+0

これは最も縮小コードですか? – Munucial

+0

そうだと思います。それは道具の種類よりも短くて、広く適用されています。 – Cipher

関連する問題