22

重複
の可能性:||は何ですか オペレーターはしますか?

誰かがより良いコードスニペットを提供できるかもしれませんが||、次の意味は何ですか?:

var time =  $(el).data('start') || new Date();

それはor演算子ですか?もしそうなら、変数が2つの異なる値を持つことができることはどのように意味がありますか?

4

5 に答える 5

44

これはORオペレーターです。理解する必要があるのは次のとおりです。

  • 非ブール値は、論理演算子で使用されるとブール値に変換されます。変換される値falseは「偽」と呼ばれ、変換される値は「真実」とtrue呼ばれます。偽の値には、、、などが含ま0れます。詳細については、JavaScriptで「真実と偽り:すべてが等しくない場合」を参照してください。undefinednull

  • OR演算子は短絡します:それがであることがわかるまで式を評価し続けtrue、それから停止します。

つまり、 「要素のデータにvar time = $(el).data('start') || new Date();設定timeするか、それが偽の場合は現在の時刻を使用する」という意味です。startel

于 2012-05-05T15:04:01.377 に答える
7
exp1 || exp2 

exp1を評価します。exp1が真の場合、exp2は評価されません(短絡評価と呼ばれます)。exp1がfalseを返す場合、exp2が評価されます。exp1またはexp2がtrueの場合、(exp1 || exp2)はtrueと評価されます。

ただし、Javascriptでは、演算子を使用して値を設定できます。

a = something

if (prop)

a = prop

次のように書き直すことができます

a = prop || something
于 2012-05-05T15:06:27.540 に答える
5

'または'を意味します。この場合、の値を$(el).data('start')変数に割り当てます。それtimeが存在しないか、代わりにを返す場合はfalse、代わりにから返された値を割り当てますnew Date()。または、Malovolioがより明確に指摘しているように、コメントで:

...if$(el).data('start')が"false"(つまり、undefined、null、0、false、空の文字列、またはNaN)の場合、new Date()評価されてに割り当てられtimeます。

論理演算子の重要な側面:

論理演算子は通常、ブール(論理)値で使用されます。そうである場合、ブール値を返します。ただし、&&と|| 演算子は実際には指定されたオペランドの1つの値を返すため、これらの演算子を非ブール値で使用すると、非ブール値を返す場合があります。

参照:

于 2012-05-05T15:01:04.507 に答える
1

オペレーターのやり方|| 評価されるのは、最初の部分が真っぽい場合、それを返したということです。最初の部分が偽物である場合、2番目の部分を返します。したがって、上記の式は次の式と同等です。

if ($(el).data('start')) {
  time = $(el).data('start');
} else {
  time = new Date();
}
于 2012-05-05T15:06:14.153 に答える
0

それはを意味しlogical sumます。または値がある場合はvar time = $(el).data('start') || new Date();、関数からの値があります。$(el).data('start')undefinedfalsetimenew Date

于 2012-05-05T15:01:29.353 に答える