Цикл do с одинарным знаком равенства в coffeescript - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь кодировать следующий код JS в coffeescript:

x = 0;
if(node.offsetParent) {
  do {
    x += node.offsetLeft;
  } while(node = node.offsetParent);
}       

Вот то, что у меня пока есть, но узел, кажется, возвращается null

if node.offsetParent
  loop
    x += node.offsetLeft
    break if typeof (node = node.offsetParent) == "undefined"
x

1 Ответ

1 голос
/ 23 ноября 2011

Проблема заключается просто в том, что когда элемент DOM node не имеет родителя смещения, node.offsetParent равен null, а не undefined. И typeof null это 'object', а не 'undefined'.

Почему бы не использовать тот же подход, что и в исходном цикле JS, который просто проверял node.offsetParent на ложность? Тогда ваш код может выглядеть примерно так:

x = 0
if node.offsetParent
  loop
    x += node.offsetLeft
    break unless (node = node.offsetParent)
x

Я также хотел бы отметить, что хотя у CoffeeScript нет синтаксиса do..while, в этом случае вы можете просто использовать цикл while, что делает ваш if лишним:

x = 0
while node.offsetParent
  x += node.offsetLeft
  node = node.offsetParent
x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...