2013-02-18 13 views
7

Si prega di assumere 'use strict'; e supponiamo anche che JSLint sia attivo e che gli errori non possano essere ignorati."Bad Line Breaking" è obsoleto con "use strict"?

trovo operatori e '' avviato le liste in modo molto più leggibile,

es .:

var i = 0 
    , j = 1 
    , someLongVariablename1 
    , someLongVariablename2 
    , someLongVariablename3 
    , someLongVariablename4; 

if((
    'dcr' === cmd 
     && (action) 
     && ('get' === actionHttp || 'post' === actionHttp) 
     && whatever 
    ) { ... } 

qui la mia domanda:
è "cattivo linea di rottura" obsolete con "use strict"?

MODIFICATO: "usa rigorosamente"; non impedirà l'esecuzione di brutte righe rompendo il codice. Può impedire l'esecuzione di alcuni tipi di errori.

Vedo che JSLint e JSHint trattano in modo diverso l'interruzione di riga. JSHint è molto più amichevole verso la sintassi che preferisco.

In modo che, potrebbe essere una soluzione per gli altri che stanno lavorando su questo.

risposta

5

Sfortunatamente, strict mode non disattiva l'horror automatic semicolon insertion e quindi le interruzioni di riga "cattive" rimangono un problema. Ad esempio:

(function() { 
    "use strict"; 

    console.log(foo()); 

    function foo() { 
    var a = 1, b = 2; 

    return 
    a + b; 
    } 
})(); 

Live Example | Source (è necessario aprire la console e vedere le cose)

che registra ancora undefined piuttosto che 3, perché ASI calci e aggiunge un punto e virgola dopo la return in foo.

+0

Utilizziamo impostazioni molto rigide in JSLint. Il codice che hai scritto è un anti-pattern JSLint completo, poiché JSLint fornisce tre errori: * previsto; errore * errore codice irraggiungibile –

+1

Ho modificato la domanda: sto assumendo un uso rigoroso di JSLint, in modo che l'esecuzione NON proceda se sono presenti errori JSLint. Tuttavia, questo complica davvero la domanda ... in origine una domanda semplice e la tua risposta è semplicemente giusta. Sto segnando la tua risposta giusta. –