javascript(boolean ^ boolean)

时间:2017-12-08 17:15:48

标签: javascript boolean-expression

我正在努力重写一些Javascript代码以在Excel VBA中工作。 由于在这个网站上搜索,我设法翻译了几乎所有的Javascript代码!但是,有一些代码我无法理解它正在做什么。 这是Javascript代码:

var k = x % y;
return (k != 0 && (k > 0 ^ y > 0) && isFinite(y)) ? k + y : k;

第一行对我来说很清楚。 k是x / y的余数。 在第二行中,modulo获得k + y或k的值。这取决于(k!= 0&&(k> 0 ^ y> 0)&& isFinite(y))

有人可以一步一步地向我解释我应该如何阅读此代码?特别是&&(k> 0 ^ y> 0)&&令我困惑的是。

到目前为止,这似乎有多远:

示例1:x = 9且y = 4

k = 9%4 = 9/4=2 with remainder 1    So: k=1
(1!=0&&(1>0^4>0)&&isFinite(4))   (True AND (True^True) AND True)  =  True?

示例1:x = 9且y = 1

k = 9%1 = 9/1=9 with remainder 0    So: k=0
(0!=0&&(0>0^1>0)&&isFinite(1))  (False AND (False^True) AND True)  =  False?

如果我纯粹以数学方式思考,那么我猜想应该读取部分(False ^ True),如(0 ^ 1)= 0 = False。

2 个答案:

答案 0 :(得分:1)

^运算符是XOR或EXCLUSIVE OR,按位运算符。当且仅当一个值为true时,它才返回true。如果两者都为真,或两者都为假,则结果为假

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR

a b a XOR b 0 0 0 0 1 1 1 0 1 1 1 0

至于为什么你的第二个例子返回FALSE,因为你正在使用AND逻辑:

FALSE && (FALSE ^ TRUE) && TRUE会产生FALSE && TRUE && TRUE,相当于FALSE

答案 1 :(得分:0)

按语言评估的关键部分的逐步说明:

(k != 0 && (k > 0 ^ y > 0) && isFinite(y)) ? k + y : k;

  • (k != 0 && (k > 0 ^ y > 0)true当且仅当下面的1.和2. true
    1. k != 0true如果k不在0, '0', 0.0, '0.0'
    2. (k > 0 ^ y > 0)true当且仅当1.和2.中的一个是true
      1. k> 0:true当且仅当kNumber或数字String以上0
      2. y> 0:true当且仅当yNumber或数字String以上0
  • isFinite(y))true如果y不是undefined, Object, Array, Infinity, -Infinity, ...(其他原生对象)或非数字String

  • (k != 0 && (k > 0 ^ y > 0) && isFinite(y))true当且仅当上述两个部分均为true时。如果前置表达式为?,则三元k + y运算符将返回第一个后表达式true,否则返回第二个后置表达式k

更一般地说,外卖课程是:

  • JS中的比较很复杂:String通常转换为Number,不同的函数在本机对象上有不同的行为(isFinite(null) === trueisFinite(undefined) === false)。因此,通常总是更喜欢使用===!==

  • JS在布尔运算符

  • 上使用short-circuiting
  • ^是独家OR又名XOR运算符

  • ?是三元if运算符,等于if ... do ... else do ...