2014-01-05 6 views
2

Есть ли более чистый способ определения нескольких переменных javascript в одной строке?более простой способ назначить несколько переменных

var a = 0, 
    b = 0, 
    c = 0, 
    d = 0, 
    blah = ""; 

мне было интересно, если я мог бы написать что-то вроде этого:

var a = b = c = d = 0, 
    blah = ""; 
+0

вы пробовали его в ваш код? –

+4

Да, это допустимо, но, на мой взгляд, легче читать и меньше подвергать ошибкам назначать переменную на строку. – Palpatim

+0

Почему вы просто не испытывали это довольно легко, используя jsFiddle или некоторые такие? Оба они отлично подходят для строк и целых чисел, но я предпочитаю первый вариант (допустимый для других типов) – BenM

ответ

3

Вы можете сделать:

var a, b, c, d, blah = ""; 
a = b = c = d = 0; 

Второй способ:

var a = b = c = d = 0, //Wrong!! don't do it 
blah = ""; 

Пришло неправильно, потому что это будет только объявить a, как вар, а остальные (b, c, d, e) будет Глобалы. Ужасный побочный эффект (и трудно обнаружить).

Однако, я бы придерживаться длинного классического, который вы показали:

var a = 0, 
    b = 0, 
    c = 0, 
    d = 0, 
    blah = ""; 

Потому что это больше стандартного;).

Приветствия

4

Вы не можете сделать это:

var a = b = c = d = 0, blah = ""; 

, потому что синтаксис var такова, что это только символ на левой стороне первого =, который объявляется. Вы можете сделать это:

var a, b, c, d = 0, blah = ""; 
a = b = c = d; 

редактировать Дальнейшее объяснение: первый пример кода, не вызывает синтаксическую ошибку (за исключением «строгого» режима), но он не делает то, что он выглядит, как он может делать. Переменные «b», «c» и «d» равны , а не, как это указано в качестве локальных переменных. Если они являются глобальными, тогда переопределенное значение будет переопределено. В противном случае они будут объявлены неявно как глобальные, а не как локальные переменные.

В любом случае, нет ничего уродливого в объявлении и инициализации переменных по одному.

3

Второй способ получить код с побочными эффектами

Попробуйте это:

//3 assignments in the 'global' scope 
var b = 2, 
    c = 3, 
    d = 4; 

(function(){ 
    var a = b = 5; //a gets declared in the local scope, 
        //b get's assigned in the global scope 
        // var a = (b = 5), where (b = 5) returns the value 5 itself 
    var d = 5;  //d gets declared in the local scope 
}()); 

console.log(d); //4 
console.log(b); //5 
console.log(c); //3 
console.log(a); //ReferenceError, as a is undefined in this scope 

Попробуйте использовать только первую версию, чтобы избежать получать сюрпризы

+0

Ха-ха, в конце концов, я мог бы написать новый ответ сам, я думаю, но сначала я был слишком ленив, а потом он немного дольше: P, но что угодно: P –

Смежные вопросы