Пробел перед точкой (вызов метода) разрешен в Javascript?

Я хочу использовать следующий синтаксис в Javascript:

var bar = foo.replace(/really long regex/, something)
             .replace(/another really long regex/, something)
             .replace(/yet another really long regex/, something);

так как это (несколько) более читабельно, чем в одной строке.

Это разрешено? Он отлично работает в Firefox, но я нигде не могу найти ссылку на этот синтаксис, и я не хочу потом узнавать, что есть какой-то непонятный браузер, в котором это не работает.


person mscha    schedule 10.02.2011    source источник


Ответы (3)


Да, Javascript игнорирует пробелы.

Хотя, если вы собираетесь игнорировать пробелы, вам нужно быть уверенным и использовать точку с запятой для завершения ваших выражений. Точки с запятой не требуются, но если они не используются, javascript использует возврат каретки для отдельных команд. Что может привести к непоследовательному поведению, если вы этого не ожидаете.

Я делал это много раз в своем коде javascript, так как, когда я пишу красивый код, мне не нравится, чтобы он превышал 80 символов.

Взгляните на стандарт emcascript https://docs.google.com/viewer?url=http%3A%2F%2Fwww.ecma-international.org%2Fpublications%2Ffiles%2FECMA-ST%2FECMA-262.pdf

Терминаторы строк (это то, что вас беспокоит) рассматриваются на странице 25 pdf (страница 15 напечатана на листе). Весь раздел 7 посвящен форматированию, вы, вероятно, найдете там определение того, почему это работает (да, я ленив и не хочу читать весь раздел :)).

Надеюсь, это поможет!

person ehudokai    schedule 10.02.2011
comment
Спасибо, это то, что я думал, хотя я действительно боялся, что вставка точки с запятой может испортить это. Я подожду еще немного более авторитетного ответа, но в остальном я одобрю этот ответ. - person mscha; 10.02.2011
comment
@mscha На самом деле рекомендуется ставить точку с запятой всякий раз, когда вы заканчиваете выражение. Это позволяет позже использовать минимизатор кода, не запутывая интерпретатор javascript. Ваш код легче читать (в целях отладки), но минимизированный код работает быстрее, так как интерпретатору javascript требуется меньше времени для его чтения. - person ehudokai; 10.02.2011
comment
@ehudokai: абсолютно, я всегда ставлю точку с запятой. Возникает вопрос: не вставит ли какой-нибудь малоизвестный синтаксический анализатор Javascript точку с запятой в середине моего выражения? - person mscha; 10.02.2011
comment
@mscha Я так не думаю. По крайней мере, для меня никогда не было. Я предполагаю, что он просматривает следующую строку, чтобы увидеть, является ли она продолжением предыдущего оператора. И с тех пор . не может запустить оператор javascript, он должен предполагать, что он является частью предыдущего выражения. - person ehudokai; 10.02.2011
comment
Это имеет смысл, я убежден. - person mscha; 10.02.2011
comment
Спасибо, я добавил ссылку на спецификацию emcascript в свой ответ, чтобы, надеюсь, дать вам определенное правило для стандарта. - person ehudokai; 10.02.2011
comment
И спасибо за ссылку на спец. Даже спецификация неясна: «Вообще, разделители строк могут встречаться между любыми двумя токенами, но есть несколько мест, где они запрещены синтаксической грамматикой», но не сказано, что это за места. Тем не менее, раздел о вставке точки с запятой (стр. 36/26) помогает; в нем явно перечислены все места, где не должно быть разделителя строки, и это не одно из них. - person mscha; 10.02.2011

Вы определенно можете это сделать, но я буду осторожен. Процитируем запись в Википедии: «пробелы в исходном коде JavaScript могут напрямую влиять на семантику». См. раздел Синтаксис JavaScript — пробелы и точки с запятой.

person bamana    schedule 10.02.2011
comment
Спасибо за ссылку. Я видел это, но там не сказано, разрешен ли мой пример. - person mscha; 10.02.2011

Да, я не смог найти никакой документации, но она действительна. В вашем случае вы могли бы вместо этого перебирать регулярные выражения

person mplungjan    schedule 10.02.2011