我有这个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
测试通过?
答案 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
为布尔值而没有类型强制时。