关于Coffeescript / Javascript条件结果的问题

时间:2011-08-28 12:44:01

标签: javascript coffeescript

我有这个Coffeescript:

console.log 'TEST'
console.log index
console.log (index is not 0)
console.log (index > 0)
unless index is 0
    console.log "passed test"

这是已编译的Javascript:

console.log('TEST');
console.log(index);
console.log(index === !0);
console.log(index > 0);
_results.push(index !== 0 ? console.log("passed test") : void 0);

这是控制台输出

TEST
0
false
false
passed test
TEST
1
false
true
passed test

问题1)当(index is not 0)为1时,为什么false会返回index(index > 0)会将true返回1,那么为什么不(index is not 0)

问题2)当unless index is 0为0时,为什么index测试通过?

2 个答案:

答案 0 :(得分:3)

  

(index is not 0)为1时,为什么false会返回index(index > 0)会将true返回1,那么为什么不(index is not 0)

CoffeeScript不使用is not来表示不平等,它使用!=isnt。通过查看已编译的代码,我们可以看到它实际上将(index is not 0)解释为(index is (not 0))

  

为什么unless index is 0为0时会传递index测试?

I tried it myself测试没有通过时。此行为可能是由您的测试代码中未包含在帖子中的内容引起的。

答案 1 :(得分:1)

这很繁琐:

console.log(index === !0);

它的处理方式与:

相同
console.log(index === (!0));

0是一个假常数,因此您可以将(!0)替换为true。那么真正的代码是:

console.log(index === true);

所以它只会记录" true"当index为布尔值而没有类型强制时。