2016-03-24 11 views
0

これは非常に長い返信声明の一部ですが、私は「a!1:void0」が何を意味するのかを理解することにもっと興味がありました。このJavaScript式の意味は次のとおりです。return 0 == a?!1:void 0 == a.x?

javascriptコードに関する限り、どのように機能しているかを調べようとしているウェブページを調べているうちに、私はそれを見つけました。

編集:以下のコメントから、私は正確な質問をうまく書いていないことを集めました。最初は、私は文のその部分について特に混乱していたことを示すために、 "return 0 == a?1:void 0 == ax"を "a?!1:void 0"に単純化しようとしていました。しかし、事実上私は条件付きの意味を変更しているので、これを行うことは理にかなっていません。

また、 "?"最後に、@Amadanが指摘したように英語の疑問符です。

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator – BeardFist

+2

var aがtrueの場合はfalse、そうでない場合はfalseを返します。 – Eihwaz

+0

@RobGはfalseを返します''〜 '1'ではありません – Johan

答えて

0

に等しい

if (a) {//return true if a is truthy 
    return !1;// !1 is always false, !0 is true 
}else{ 
    return void(0);//void(0) is undefined 
} 
+1

これは、 "*が真実であればtrueを返す*"、つまり0以外の数やNaN、空でない文字列、オブジェクトなど、trueに強制する任意の値 – RobG

+0

ありがとうございます。 – Kajal

0

a.xが定義されている場合は、true返します。 falseaがfalsyの場合、またはa.xの場合は未定義です。

if (!a) { // !a === (a == 0) 
    return false; // false === !1 
} else if (a.x == undefined) { // undefined === void 0 
    return false; 
} else { 
    return true; 
} 
+0

'void 0 == a.x?'の後に返されるものはわかりません。 2番目の部分は "a.x == undefined" ... something:何か。何かは分かっていない。 – RobG

+0

@RobG:私は「?」と思う。タイトルの最後にJavaScriptではなく、英語(普通の古い疑問符、演算子ではない)です。 – Amadan

+1

ここには2つの問題があります。よく尋ねられる質問ではなく、コード自体はあまりにも自分の利益のために賢いです。質問の本文はタイトルなしで一人で立つべきです。 '0 == a'にはいくつかの癖があり、' void 0 == a.x'もそうです。代わりに 'a || !a.x'のようなものですが、いくつかの文字を保存しようとするのであれば、それも失敗します。 – RobG

1

操作(0 == a)を分割できますか? !1:(void 0 == a.x) void 0はvoid(0)と考えることができますが、これは未定義です。 a.xが未定義の場合、 !1はfalseに等しくなります。 (void 0 == a.x)はtrueに等しい。 したがって、式は(0 == a)と評価されますか?真偽。

生成されたコードであった可能性があります。ロジックを書くべき理由がわからないことがあります。

関連する問題