7

簡単な質問です。説明の仕方がよくわからないので、これに関連するものは何も見つかりません...しかし、&&を使用して2つのブール値を組み合わせて別の変数を作成するとどうなりますか?

var is_enabled = isEnabled() && isSupported();

isEnabled()がfalseで、isSupported()がtrueの場合、falseと等しくなりますか?

4

12 に答える 12

32

Javascriptでは、&&and||演算子は少し奇妙です。値が「偽」(ゼロ、、、undefinednullの文字列、NaN)であるか、真(空の配列を含むその他)であるかによって異なります。

最初の値が「偽」の&&場合、操作の結果は最初の値になり、そうでない場合は2番目の値になります。最初の値が「偽」の||場合、操作の結果は2番目の値になります。それ以外の場合は、最初の値になります。

例:

var a = 5 && 3; // a will be 3
var a = 0 && 7; // a will be 0

var a = 1 || 2; // a will be 1
var a = 0 || 2; // a will be 2

これを置き換える場合、これは非常に便利です。

if (x == null){
  x = 5;
}

と:

x = x || 5;

つまり、が真実である場合isEnabled()is_enabled、何isSupported()が返されるかに設定されます。isEnabled()が偽物である場合、is_enabledその偽物の値が何であれに設定されます。

また、ロバートが指摘したように、短絡があります:

var x = 5 || infinite_loop();
var x = false && infinite_loop();

どちらの場合も、infinite_loop()2つの操作が短絡しているため、呼び出しは発生しません。最初の値が真の場合は2番目の値を評価せず、最初の||&&が偽の場合は2番目の値を評価しません。

于 2012-07-18T16:08:42.263 に答える
4

の結果はfalse && trueですfalse

于 2012-07-18T16:04:31.703 に答える
2

isEnabled()がfalseで、&&を使用すると、評価が短絡するため、isSupported()が呼び出されることはありません。

于 2012-07-18T16:04:41.260 に答える
1

&&演算子のいずれかのオペランドが偽(、0 、、、、、)の場合、最初の偽の値が割り当てられます。falsenullundefinedNaN""is_enabled

演算子のすべてのオペランドが偽物&&でない場合、最後のオペランドがに割り当てられます。is_enabled

于 2012-07-18T16:04:57.353 に答える
1

is_enabledは、isEnabledとisSupportedの両方がtrueの場合にのみtrueに設定されます。したがって、isEnabledがfalseで、isSupportedがtrueの場合、is_enabledはfalseになります。

于 2012-07-18T16:05:00.817 に答える
1

はい:

<script type="text/javascript">
function isEnabled() {
    return false;
}

function isSupported() {
    return true;
}

var is_enabled = isEnabled() && isSupported();

alert(is_enabled);  // = 'false'
</script>
于 2012-07-18T16:05:03.860 に答える
1

両方の関数がtrueまたはfalseのみを返す場合、ブール値を使用した通常の&&として機能します。

1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
于 2012-07-18T16:05:42.010 に答える
1

まず、&&が真になるのは、両方の式が真である場合のみです。

質問に戻りますが、true && falseはfalseに等しいので、そうです。

また、firebugまたはchrome開発ツールのコンソール関数を使用して、これらの式を自分でテストすることもできます。

于 2012-07-18T16:06:44.190 に答える
0

できることは、1つを追加し、それらのブール値に演算を&適用することです。これにより、両方がtrueの場合、trueになります。ANDis_enabled

var is_enabled = isEnabled() & isSupported();

編集 私の構文が間違っていることを指摘してくれたPointyに感謝します。これはC言語に適用されるはずです、私は混乱したと思います

于 2012-07-18T16:03:31.743 に答える
0

ここでは、テストの可能なケースを確認できます。

var str='My dummy string';
var str2='My other dummy string';
var falsy1= 1==2;
var truthy1= true;
var truthy2= true;
var falsy2= false;

それから:

console.log('Both bool true:', truthy1 && truthy2); // <== Both bool true: true
console.log('Bool true and string:', truthy1 && str); // <== Bool true and string: My dummy string
console.log('String and bool true:', str && truthy1); // <== String and bool true: true
console.log('Falsy operation and string:', falsy1 && str); // <== Falsy operation and string: false
console.log('Bool false and string:', falsy2 && str); // <== Bool false and string: false
console.log('Both bool false and true:', falsy1 && truthy1); // <== Both bool false and true: false
console.log('Both bool true and false:', truthy1 && falsy1); // <== Both bool true and false: false
console.log('Operation false and bool true:', falsy2 && truthy1); // <== Operation false and bool true: false
console.log('Operation false and bool false:', falsy2 && falsy1); // <== Operation false and bool false: false
console.log('Both strings:', str2 && str); // <== Both strings: My dummy string
console.log('Both strings:', str && str2); // <== Both strings: My other dummy string   
console.log('String and bool false:',  str && falsy1); // <== String and bool false: false  
console.log('String and 2 bool false and true:',  str && falsy1  && truthy1); // <== String and 2 bool false and true: false
console.log('3 bool false and true and true:',  falsy1 && truthy1 && truthy2); // <== 3 bool false and true and true: false
console.log('3 bool false and false and true:',  falsy1 && falsy1 && truthy1); // <== 3 bool false and false and true: false
console.log('Bool false and operation false and bool true:',  falsy1 && falsy2 && truthy1); // <== Bool false and operation false and bool true: false
console.log('3 bool true and true and false:',  truthy2 && truthy1 && falsy1); // <== 3 bool true and true and false: false
console.log('String and 2 bool false and true:',  str && falsy1 && truthy1); // <== String and 2 bool false and true: false
console.log('String and 2 bool true and false:',  str && truthy1 && falsy1); // <== String and 2 bool true and false: false
console.log('2 bool false and true and string:',   falsy1 && truthy1 && str); // <== 2 bool false and true and string: false
console.log('2 bool true and false string:',  truthy1 && falsy1 && str); // <== 2 bool true and false string: false
console.log('Bool true and string and bool false:',  truthy1 && str && falsy1); // <== Bool true and string and bool false: false
console.log('Bool false and string and bool true:',  falsy1 && str && truthy1); // <== Bool false and string and bool true: false

そしてボーナス:

console.log('The existence of a string:',  !!str); // <== The existence of a string: true
于 2018-02-02T12:45:27.080 に答える
0

簡単な答え: 最初が偽物でない場合は2番目、そうでない場合は最初。

例: isEnabled()がfalseを返す場合、falseは結果です。

それ以外の場合、isEnabled()がtrueの場合、isSupported()が返すものはすべて結果になります。

現在falsetrue答えを単純化するために使用されていましたが、falseは任意のの値である可能性があります。

真実と偽の値の例:

var string = ""; //<-偽物

varfilledString="ここにある文字列"; //<-真実

var zero = 0; //<-偽物

var numberGreaterThanZero//<-真実

var emptyArray = []; // <-正直なところ、これについては次で詳しく説明します

var emptyObject = {}; //<-真実

于 2019-08-08T09:22:58.000 に答える
-3

「&&」などのブール演算が成功すると、ブール値になります。そのため、の結果はisEnabled() && isSupported()ブール値になり、is_enabledに割り当てられます。

于 2012-07-18T16:06:28.930 に答える