将Coffeescript中的true和false分别转换为1和-1


if x < change.pageX # pageX is cross-browser normalized by jQuery
            val = Number(elem.text())
            return elem.text(o.max) if val + o.step > o.max
            return elem.text(o.min) if val + o.step < o.min
            elem.text(val + o.step)
else x > change.pageX
  # same thing, only - instead of +

(咖啡脚本,但你明白的意思)。我正在寻找一个技巧,采取布尔值,并将其转换为1(真)或-1(假)。这样我就可以选择val + converted_bool * o.step并保存if

你可以这样做…

+x||-1

  • x===true, +x1, -1短路

  • 如果x===false,则+x0,返回-1


还有一种方法…

[-1,1][+x]
  • 如果x===true, [+x]将抓取数组的索引1

  • 如果x===false, [+x]将抓取数组的索引0

听起来像是条件(三元)运算符的工作

if true then 1 else -1
1
if false then 1 else -1
-1

我想这样就行了:

b2i = (x) -> if x then 1 else -1
b2i(true)  # => 1
b2i(false) # => -1

这个函数定义的结果是(不是很令人兴奋)JavaScript:

var b2i;
b2i = function(x) {
  if (x) {
    return 1;
  } else {
    return -1;
  }
};

注意 CoffeeScript ?是存在运算符,所以

x ? 1 : -1

将转换为SMTH,这有点出乎意料,因为

if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};

(~true)+3和(~false)将得到1和- 1:)

啊哈!

2 * (!!expression) - 1

您还在寻找其他内容吗?

boolVal ? 1 : -1

或者,以函数形式:

function convertBool(boolVal) {
    return(boolVal ? 1 : -1);
}

涉及布尔值的直接数学运算将true转换为1,将false转换为0:

var x,y;
x = false;
y = 2;
alert(y + x);  // alerts 2
x = true;
y = 2;
alert(y + x);  // alerts 3

如果对性能感兴趣,下面是对这里提供的四种方法的jsperf测试。在Chrome中,三元制的解决方案要快7倍以上。

你也可以在coffeescript中输入javascript:

foo = `bar ? 1 : -1`

相关内容

  • 没有找到相关文章

最新更新