Javascript 한 줄에 여러 변수를 정의하는 방법은 무엇입니까?


103

온라인 문서를 읽으면서 한 줄에 여러 JavaScript 변수를 올바르게 정의하는 방법을 혼동하고 있습니다.

다음 코드를 압축하려면 한 줄에 여러 자바 스크립트 변수를 정의하는 적절한 자바 스크립트 "엄격한"방법은 무엇입니까?

var a = 0;
var b = 0;

그것은 :

var a = b = 0;

또는

var a = var b = 0; 

기타...


1
다중 할당에 대한 추가 정보 : JavaScript에서 변수 할당은 어떻게 작동합니까? . 이 패턴은 클로저 내부에서 생성자 함수를 노출하는 데 유용합니다.var $cls = my.namespace.Foo = function(args){ ... }
blong

애초에 왜 압축하고 싶은지 궁금합니다. IMHO가 하나의 변수를 선언하고 할당하는 것은 누구에게나 훨씬 더 명확하고 이해하기 쉽습니다.
Henning

답변:


76

다중 할당 구조에 의존하면 한 지점 또는 다른 지점에서 발을 쏠 것이기 때문에 쉼표에 의존하고 싶습니다.

예는 다음과 같습니다.

>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]

그것들은 모두 메모리에서 동일한 객체를 참조하며, 객체 (배열, 객체 리터럴, 함수)에 대한 참조를 만들 때마다 값이 아닌 참조로 전달되기 때문에 "고유 한"것이 아닙니다. 따라서 이러한 변수 중 하나만 변경하고 개별적으로 작동하도록하려면 개별 개체가 아니기 때문에 원하는 것을 얻지 못할 것입니다.

또한 다중 할당에는 2 차 변수가 전역이되고 전역 네임 스페이스로 유출되는 것을 원하지 않는다는 단점이 있습니다.

(function() {  var a = global = 5 })();
alert(window.global) // 5

쉼표 만 사용하는 것이 가장 좋으며 가급적이면 많은 공백을 사용하여 읽을 수 있습니다.

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];

2
이는 할당 문을 값으로 사용하는 것이 아니라 일반적으로 배열 참조를 할당하는 데 문제가됩니다.
Matthew Flaschen

"당신은 숫자 리터럴 같은 것들에 대해 여러 오른손 할당과 멀리 얻을 수 있도록하면서"
omuraliev MEDER

1
@meder, 모든 과제에 문제가 있습니다. 오른손에는 특별한 것이 없습니다.
Matthew Flaschen

나는 일반적으로 과제를 의미했습니다. 편집 된 문구.
omuraliev MEDER

2
이 다중 할당 패턴에서 명심해야 할 점은 ES5 Strict Mode에서 선언되지 않은 할당이 ReferenceError예외 를 발생 시킨다는 것입니다 ... IMO, 피해야합니다 ...
CMS

64

Javascript의 es6 또는 노드를 사용하여 다음을 수행 할 수 있습니다.

var [a,b,c,d] = [0,1,2,3]

한 줄에 여러 변수를 쉽게 인쇄하려면 다음과 같이하십시오.

console.log(a, b, c, d)

012 3

이것은 @alex gray의 답변과 비슷하지만이 예제는 CoffeeScript 대신 Javascript로되어 있습니다.

이것은 Javascript의 배열 분해 할당을 사용 합니다.


2
console.log(a,b,c,d)이 경우 대신 사용하지 않는 이유는 무엇입니까? 더 짧고 동일한 출력을 제공합니다
Josh Broadhurst

44

값으로 할당을 한 줄로 할 수있는 방법은 없습니다.

var a = b = 0;

b를 글로벌하게 만듭니다. (유출 변수가없는) 올바른 방법은 약간 더 깁니다.

var a = 0, b = a;

다음과 같은 경우에 유용합니다.

var a = <someLargeExpressionHere>, b = a, c = a, d = a;

1
"0을 반복하지 않고 할당을 값으로 사용할 방법이 없습니다." -무슨 말이야?
palswim 2010

28

두 줄로하지 않는 이유는 무엇입니까?

var a, b, c, d;    // All in the same scope
a = b = c = d = 1; // Set value to all.

그 이유는 다음과 같이 변수 선언에서 로컬 범위를 유지하기위한 것입니다.

var a = b = c = d = 1;

창 범위 b에서 c및 의 암시 적 선언으로 이어 d집니다.


내 프로그램에서 많은 변수를 미리 선언했기 때문에 이것은 나에게 유용했습니다. 이제 30 개 이상의 줄을 사용하는 대신 가독성을 희생하지 않고 몇 줄을 사용할 수 있습니다.
Vaughn

11

다음은 한 줄에 여러 변수를 선언하는 새로운 ES6 방법입니다.

const person = { name: 'Prince', age: 22, id: 1 };

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);

* 변수 이름과 개체 인덱스는 동일해야합니다.


2
OP의 질문보다 깁니다 let { a, b } = { a: 0, b: 0 }..
Dan Dascalescu

4

특히 OP가 요청한 내용에 대해 동일한 값 (예 :) 으로 N 개의 변수를 초기화 0하려면 배열 분해Array.fill 을 사용 하여 N 배열을 변수에 할당 할 수 있습니다 0.

let [a, b, c, d] = Array(4).fill(0);

console.log(a, b, c, d);


0

숫자와 문자열로만이 작업을 수행 할 수 있습니다.

당신은 할 수 있습니다 ...

var a, b, c; a = b = c = 0; //but why?

c++;
// c = 1, b = 0, a = 0;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.