JavaScript - синтаксический беспредел

Jun 22, 2012 16:48

По сравнению с остальными curly-braced languages, JavaScript имеет в синтаксисе ряд вольностей в духе Питона. Сегодня это вылилось для меня в нешуточные вилы:

вот этот код работал очевидно неправильно

243     return
244         (true && this.ops.length>0 &&
245         this.lastSavedIdx
246         this.ops[this.ops.length-1].isMergeable());
...а этот очевидно правильно

243     var ret =
244         (true && this.ops.length>0 &&
245         this.lastSavedIdx
246         this.ops[this.ops.length-1].isMergeable());
247    return ret;
Строки 244-246 идентичны.
Спрашивается, на что влияет предварительное укладывание возвращаемого значения в переменную?

Ответ: в JavaScript переводы строк значимы, ";" можно пропускать. Это синтаксическое подмигивание тупорылым быдлокодерам выливается в неочевидные вилы: в первом случае перевод строки значим и возвращается undefined, во втором - открытое присваивание делает перевод строки незначимым, и возвращается что нужно.

Суки.
Previous post
Up