Javascript逻辑运算符和字符串/数字
我不明白逻辑运算符是如何工作的。我知道它是如何处理布尔值的,但是字符串或数字呢Javascript逻辑运算符和字符串/数字,javascript,logical-operators,Javascript,Logical Operators,我不明白逻辑运算符是如何工作的。我知道它是如何处理布尔值的,但是字符串或数字呢 2 && 7 returns 7 "dog" && "cat" returns "cat" 我明白了,若数字或字符串并没有相同的值,那个么返回第二个值。但是为什么呢?在“真实世界”中我能用它做什么呢?如果左手边是真的,那么它的计算结果就是右手边 如果左侧不为真,则其计算结果为左侧 false&&true计算为LHS。false也是如此 false&&false计算为LHS。fal
2 && 7
returns 7
"dog" && "cat"
returns "cat"
我明白了,若数字或字符串并没有相同的值,那个么返回第二个值。但是为什么呢?在“真实世界”中我能用它做什么呢?如果左手边是真的,那么它的计算结果就是右手边 如果左侧不为真,则其计算结果为左侧
false&&true
计算为LHS。false也是如此
false&&false
计算为LHS。false也是如此
true&&false
的计算结果为右侧。false也是如此
true&&true
计算为RHS。正确吗
2和&7
评估为RHS。7
(这是真的)也是如此
0和&7
计算为LHS。0
(这是错误的)也是如此
“猫”和“狗”
的计算结果为右手侧。“狗”也是如此(这是真的)
|
的工作方式相同,但如果为false,则返回LHS
在“真实世界”中我能用它做什么
使用它的主要方法是计算两个值是否都为真。这是操作员的重点
(它还可以用作缩写if
测试,并用于确定两个值中的哪一个分配到某处)。如果左侧为真,则其计算结果为右侧
如果左侧不为真,则其计算结果为左侧
false&&true
计算为LHS。false也是如此
false&&false
计算为LHS。false也是如此
true&&false
的计算结果为右侧。false也是如此
true&&true
计算为RHS。正确吗
2和&7
评估为RHS。7
(这是真的)也是如此
0和&7
计算为LHS。0
(这是错误的)也是如此
“猫”和“狗”
的计算结果为右手侧。“狗”也是如此(这是真的)
|
的工作方式相同,但如果为false,则返回LHS
在“真实世界”中我能用它做什么
使用它的主要方法是计算两个值是否都为真。这是操作员的重点
(它还可用作缩写if
测试和确定两个值中的哪一个分配到某处)。运算符&&
不返回布尔值,它返回其一个操作数。因为操作数无论如何都是作为布尔值计算的。由于2
是真实的,7
是真实的,因此返回7
与返回true
是相同的,因为结果是真实的。对于0&&7
,它返回0
,因为这是错误的,这是预期的结果
在布尔上下文中,此行为与返回true
或false
相同,但它允许在其他上下文中执行有用的行为。最常遇到的问题是:
foo = foo || 'bar';
如果|
(和&&
)将返回布尔值,则必须编写以下代码:
if (!foo) {
foo = 'bar';
}
或:
&&
运算符不返回布尔值,而是返回其一个操作数。因为操作数无论如何都是作为布尔值计算的。由于2
是真实的,7
是真实的,因此返回7
与返回true
是相同的,因为结果是真实的。对于0&&7
,它返回0
,因为这是错误的,这是预期的结果
在布尔上下文中,此行为与返回true
或false
相同,但它允许在其他上下文中执行有用的行为。最常遇到的问题是:
foo = foo || 'bar';
如果|
(和&&
)将返回布尔值,则必须编写以下代码:
if (!foo) {
foo = 'bar';
}
或:
MDN上很好地解释了逻辑运算符的工作原理
在“现实世界”中我能用它做什么
可以使用| |运算符对多个键上的数组进行排序
例如:
const myArray = [{ age: 25, name: 'Patrick' },
{ age: 22, name: 'Greta' },
{ age: 22, name: 'Fien' }];
myArray.sort((a, b) => (a.age - b.age) || a.name.localeCompare(b.name));
console.log('myArray=', JSON.stringify(myArray));
sort方法通常(不在上面的示例中)返回1、0或-1,因此下面的内容可能有助于使其更容易理解
console.log( 1 || 1); // 1
console.log( 1 || 0); // 1
console.log( 1 ||-1); // 1
console.log( 0 || 1); // 1
console.log( 0 || 0); // 0
console.log( 0 ||-1); //-1
console.log(-1 || 1); //-1
console.log(-1 || 0); //-1
console.log(-1 ||-1); //-1
此外,| |运算符的“短路评估”也是有益的。在MDN上很好地解释了逻辑运算符的工作原理
在“现实世界”中我能用它做什么
可以使用| |运算符对多个键上的数组进行排序
例如:
const myArray = [{ age: 25, name: 'Patrick' },
{ age: 22, name: 'Greta' },
{ age: 22, name: 'Fien' }];
myArray.sort((a, b) => (a.age - b.age) || a.name.localeCompare(b.name));
console.log('myArray=', JSON.stringify(myArray));
sort方法通常(不在上面的示例中)返回1、0或-1,因此下面的内容可能有助于使其更容易理解
console.log( 1 || 1); // 1
console.log( 1 || 0); // 1
console.log( 1 ||-1); // 1
console.log( 0 || 1); // 1
console.log( 0 || 0); // 0
console.log( 0 ||-1); //-1
console.log(-1 || 1); //-1
console.log(-1 || 0); //-1
console.log(-1 ||-1); //-1
此外,对| |运算符的“短路评估”也是有益的。operators@AurA的Mozilla JavaScript文档添加文本链接使用[text](link)
与github上的相同。operators@AurA的Mozilla JavaScript文档添加文本链接使用[text](link)
与github上的相同。也许您列表中的一个不错的补充是“”&&“dog”
。它的计算结果是“
”。也许在您的列表中添加一个很好的选项是”&&“dog”
。其计算结果为“”
。