Зачем использовать точку с запятой?
Есть ли какие-либо причины, кроме субъективного визуального восприятия и случаев, когда у вас есть несколько операторов в одной строке, использовать точку с запятой в конце операторов в JavaScript?
Похоже, что есть много доказательств того, что использование точек с запятой является весьма необязательным и требуется только в нескольких конкретных случаях.
5 ответов
Похоже, что существует очень мало причин или, на самом деле, крайних случаев, когда нужно использовать точки с запятой.
http://aresemicolonsnecessaryinjavascript.com/ <- сейчас нет, используйте
https://github.com/aresemicolonsnecessaryinjavascript/aresemicolonsnecessaryinjavascript.github.com
Потому что JavaScript делает с тобой неприятные вещи, когда угадывает, где поставить точку с запятой. Лучше быть явным и дать толкователю понять, что вы имели в виду, чем позволить блоку идиота угадывать от вашего имени.
Рекомендации:
- http://www.webmasterworld.com/forum91/521.htm
- http://www.howtocreate.co.uk/tutorials/javascript/semicolons
- http://robertnyman.com/2008/10/16/beware-of-javascript-semicolon-insertion/
... и бросок тысяч.
Если вы спросили, потому что вы пришли из Python фона: разница в следующем:
в Python вы не должны заканчивать строки чем-либо, но можете использовать точку с запятой, если вам необходимо
в JavaScript вы должны заканчивать строки точкой с запятой, но разрешено (PDF, стр. 26, пункт 7.9) пропустить его, если оно однозначно
Так как
- Отладка тонких ошибок, которые возникают, когда вы этого не делаете, - пустая трата времени, которое вы могли бы потратить, делая что-то крутое
- Это делает понятным для кого-то, кто будет поддерживать код позже, что вы собираетесь
- Не все разработчики кода понимают правила автоматической вставки достаточно хорошо, чтобы сохранить код без них
- Исключение из них зависит от всех инструментов, которые обрабатывают код JavaScript в вашей цепочке инструментов, чтобы получить правильные правила (например, некоторые минифайеры / упаковщики / компрессоры этого не делают, включая Crockford's).
jsmin
, который сломает код, который в некоторых местах опирается на ASI)
Как предполагает Дуглас Крокфорд -
Положить; (точка с запятой) в конце каждого простого утверждения. Обратите внимание, что оператор присваивания, который присваивает литерал функции или литерал объекта, все еще является оператором присваивания и должен заканчиваться точкой с запятой.