Могу ли я пропустить каждую точку с запятой в конце строки во всей версии (если есть) Javascript?
Я изучаю JS и как-то понял, что могу пропустить ввод ;
в конце строки, если в этой строке только один оператор. На самом деле я немного привык к этому; Я разработал простое приложение для iOS со Swift, которое также поддерживает этот тип синтаксиса.
Но мне интересно, есть ли конкретная версия или что-то в JS, которое не позволяет программистам пропустить последнюю точку с запятой. У многих языков были изменения в синтаксисе; поэтому я думаю, что у Javascript может быть такая проблема. Кто-нибудь может ответить на этот вопрос? Спасибо!
1 ответ
Обратите внимание, что хотя все версии JavaScript поддерживают ASI, в ASI есть ловушки, из-за которых невозможно избавиться от всех точек с запятой.
Например, следующее не будет работать так, как вы могли бы ожидать:
function foo() { return [2, 3] }
var x, y, i, j
j = 2
i = j
[x,y] = foo()
Вы можете ожидать, что i
, j
, а также x
будет равно 2, и y
будет равно 3, что будет, если бы каждая строка заканчивалась точкой с запятой. Однако это не так.
По факту, i
является [2,3]
, в то время как x
а также y
являются undefined
, Когда ASI выполнял этот раздел кода, он интерпретировал последние две строки как доступ к свойству:
i = j[x,y] = foo()
в то время как это было, вероятно, предназначено, чтобы быть операцией по разрушению:
i = j;
[x,y] = foo();
Чтобы обойти это, нужно использовать "защитные точки с запятой" перед любой строкой, начинающейся с [] или (), которая не должна рассматриваться как продолжение предыдущего оператора.