- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究一个 CodeWars 问题(智商测试)的解决方案,其中给你一串数字,除了 1 之外的所有数字要么是偶数,要么是奇数。您需要返回与其他数字不同的数字位置的索引加 1。
我对下面发布的解决方案中显示 & 1 的行感到困惑。该代码在使用 && 或删除 & 1 时不起作用。
function iqTest(numbers){
numbers = numbers.split(' ')
var evens = []
var odds = []
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] & 1) { //PLEASE EXPLAIN THIS LINE!
odds.push(i + 1)
} else {
evens.push(i + 1)
}
}
return evens.length === 1 ? evens[0] : odds[0]
}
此外,您是否认为使用 &1 是最佳实践,还是它只是“聪明”的代码?
最佳答案
单个&
是'bitwise' operator 。此特定运算符 (&
) 是按位 AND 运算符 - 它在两个操作数的相应位均为 1 的每个位位置返回 1。
这里使用它的方式是测试numbers[i]
是偶数还是奇数。由于 i
从 0
循环到 numbers.length
,对于第一次迭代,if
语句计算 0 & 1
其计算结果为 0
或 false
。在循环的下一次迭代中,语句将为 1 & 1
,其计算结果为 1
或 true
。
结果 - 当 numbers[i] & 1
计算结果为 0
或 false
时,则 numbers[i]
被推送到 odd
数组。如果 numbers[i] & 1
的计算结果为 1
或 true
,则 numbers[i]
被推送到even
数组。
测试偶数和奇数的 &
运算符的替代方法是使用 modulo operator 。 numbers[i] % 2
会产生相同的输出。也就是说,1 % 2
结果为 1
或 true
,就像任何奇数一样,因为奇数除以 2 会得到余数1。任何偶数,例如 2 % 2
都会导致 0
或 false
,因为偶数除以 2 会得到余数0.
至于你的第二个问题,它是“聪明还是好?”。这绝对是聪明的。它是否好取决于你问的是谁以及你的目标是什么。许多人会说它比使用 num % 2
更不逻辑且更难阅读。
关于javascript - & 1 JavaScript。它是如何工作的?聪明还是善良?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298808/
我是一名优秀的程序员,十分优秀!