Нужны ли скобки в однострочных операторах в JavaScript? - PullRequest
133 голосов
/ 25 января 2011

Однажды я услышал, что оставлять фигурные скобки в однострочных операторах может быть вредно для JavaScript. Я больше не помню причины, и поиск в Google не сильно помог.

Есть ли что-нибудь, что делает хорошей идеей заключать все выражения в фигурные скобки в JavaScript?

Я спрашиваю, потому что, кажется, все так делают.

Ответы [ 18 ]

1 голос
/ 22 января 2015

Я сейчас работаю над минификатором. Даже сейчас я проверяю это на двух огромных сценариях. Экспериментально я узнал: Вы можете удалить фигурные скобки для функции if, else, while, *, если фигурные скобки не содержат ';', 'return', 'for', 'if', 'else', 'while', ' делать»,„функция“. Независимо от переноса строки.

function a(b){if(c){d}else{e}} //ok  
function a(b){if(c)d;else e}   //ok

Конечно, вам нужно заменить закрывающую скобку точкой с запятой, если за ней нет другой закрывающей скобки.

Функция не должна заканчиваться запятой.

var a,b=function()c;  //ok *but not in Chrome
var b=function()c,a;  //error  

Проверено на Chrome и FF.

1 голос
/ 26 февраля 2018

Я нашел этот ответ в поисках аналогичного опыта, поэтому решил ответить на него своим опытом.

Операторы без скобок работают в большинстве браузеров, однако я проверял, что методы без скобок на самом деле не работают в некоторыхбраузер.

По состоянию на 26 февраля 2018 года это утверждение работает в Pale Moon, но не в Google Chrome.

function foo()
   return bar;
1 голос
/ 09 сентября 2015

Есть много проблем в JavaScript. Взгляните на архитектора JavaScript Дугласа Крокфорда, который говорит об этом Выражение if кажется правильным, но выражение return может создать проблему.

return
{
    ok:false;
}
//silent error (return undefined)

return{
    ok:true;
}
//works well in javascript
0 голосов
/ 03 апреля 2018

Всегда находил, что

if(valid) return;

легче на мой взгляд, чем

if(valid) {
  return;
}

также условно, например

(valid) ? ifTrue() : ifFalse();

легче читать (мое личное мнение), чем

if(valid) {
  ifTrue();
} else {
  ifFalse();
}

но я думаю, это сводится к стилю кодирования

0 голосов
/ 10 марта 2018

Начальный уровень отступа оператора должен быть равен количеству открытых скобок над ним.(исключая заключенные в кавычки или закомментированные скобки или скобки в директивах препроцессора)

В противном случае K & R будет хорошим стилем отступа.Чтобы исправить их стиль, я рекомендую помещать короткие простые операторы if в одну строку.

if (foo) bar();    // I like this. It's also consistent with Python FWIW

вместо

if (foo)
   bar();   // not so good

Если бы я писал редактор, я бы сделал его автоматический форматКнопка высасывает строку до той же строки, что и foo, и я бы заставил ее вставить фигурные скобки вокруг бара, если вы нажмете клавишу возврата, прежде чем это будет выглядеть так:

if (foo) {
  bar();    // better
}

Тогда легко и последовательно добавить новые выражения вышеили ниже строки в теле оператора if

if (foo) {
  bar();    // consistent
  baz();    // easy to read and maintain
}
0 голосов
/ 13 августа 2013

Иногда они кажутся необходимыми! Я сам не мог в это поверить, но вчера мне пришло в голову сессия Firebug (недавний Firefox 22.0), что

if (! my.condition.key)
    do something;

выполнено сделать что-то несмотря на то, что my.condition.key было true . Добавление брекетов:

if (! my.condition.var) {
    do something;
}

исправил это. Есть множество примеров, где это, очевидно, работает без скобок, но в данном случае это определенно не работает.

Люди, которые склонны помещать более одного утверждения в строку, должны определенно всегда использовать фигурные скобки, конечно, потому что такие вещи, как

if (condition)
    do something; do something else;

трудно найти.

0 голосов
/ 25 апреля 2016

Существует способ получить многострочные не фигурные скобки, если операторы .. (Вау, что на английском ..), но это своего рода тедий:

if(true)
   funcName();
else
   return null;


function funcName(){
  //Do Stuff Here...
}
0 голосов
/ 05 марта 2015

Я просто хотел бы отметить, что вы также можете оставить фигурные скобки вне всего остального.Как видно из этой статьи Джона Ресига .

if(2 == 1){
    if(1 == 2){
        console.log("We will never get here")
    }
} else 
    console.log("We will get here")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...