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

Questions about Coffeescript/Javascript conditional results

本文关键字:结果 问题 条件 Javascript Coffeescript 关于      更新时间:2023-09-26

我有这个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为1时,(index is not 0)返回false ?(index > 0)为1返回true,为什么不返回(index is not 0)呢?

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

为什么index为1,(index is not 0)返回false ?对于1,(index > 0)返回true,那么为什么(index is not 0)不返回呢?

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

为什么index为0时unless index is 0测试通过?

当我自己尝试时,测试没有通过。此行为可能是由您的测试代码中没有包含的某些内容引起的。

这很繁琐:

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

它的处理方式与

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

0是一个假常数,所以你可以用true代替(!0)。真正的代码是:

console.log(index === true);

因此,只有当index为布尔值为true时,它才会记录"true",而不需要类型强制转换。