Вопросы об условных результатах Coffeescript / Javascript - PullRequest
0 голосов
/ 28 августа 2011

У меня есть этот 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) возвращает false, когда index равно 1?(index > 0) возвращает true для 1, так почему бы (index is not 0)?

Вопрос 2) Почему тест unless index is 0 проходит, когда index равен 0?

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Почему (index is not 0) возвращает false, когда index равно 1? (index > 0) возвращает true для 1, так почему бы (index is not 0)?

CoffeeScript не использует is not для неравенства, он использует != и isnt. Глядя на скомпилированный код, мы видим, что он на самом деле интерпретирует (index is not 0) как (index is (not 0)).

Почему тест unless index is 0 проходит, когда index равен 0?

Когда Я сам попробовал Тест не прошел. Такое поведение, вероятно, вызвано тем, что в тестовом коде вы не включили в свой пост.

1 голос
/ 28 августа 2011

Это смехотворно:

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

Он обрабатывается так же, как:

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

0 является константой Фолси, поэтому вы можете заменить (!0) на true. Тогда реальный код:

console.log(index === true);

Таким образом, он будет регистрировать «true» только тогда, когда index имеет логическое значение true без приведения типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...