recursal/MDN huggingface dataset:
SyntaxError: missing : after property id
========================================

메세지
---
```

    SyntaxError: Expected ':' (Edge)
    SyntaxError: missing : after property id (Firefox)
```

에러 타입
-----

`SyntaxError`무엇이 문제일까?
---------

객체 초기자 구문으로 객체를 만들 때 콜론(`:`)은 객체의 속성을 키와 값으로 분리합니다.


```js
var obj = { propertyKey: "value" };
```

예제
--

### 콜론 vs. 등호

객체 초기자 구문에는 등호를 사용할 수 없으므로 아래 예제는 실패합니다.


```js
var obj = { propertyKey = 'value' };
// SyntaxError: missing : after property id
```


콜론을 사용하거나 객체를 생성한 뒤에 대괄호를 사용하여 새로운 속성을 할당하는 것이 바릅니다.


```js
var obj = { propertyKey: "value" };

// 또는

var obj = {};
obj["propertyKey"] = "value";
```

### 빈 속성

아래와 같이 빈 속성을 만들 수 없습니다:


```js
var obj = { propertyKey; };
// SyntaxError: missing : after property id
```


만약 값 없이 속성을 정의해야 한다면 값으로 `null`을 지정할 수 있습니다.


```js
var obj = { propertyKey: null };
```

### 계산된 속성

식으로 속성의 키를 만드는 경우 대괄호를 사용해야 합니다. 그렇지 않으면 속성 이름에 계산된 값을 사용할 수 없습니다:


```js
var obj = { 'b'+'ar': 'foo' };
// SyntaxError: missing : after property id
```


식에 대괄호를 넣으세요 `[]`:


```js
var obj = { ["b" + "ar"]: "foo" };
```

같이 보기
-----

* 객체 초기자
RangeError: repeat count must be non-negative
=============================================

메시지
---
```

    RangeError: repeat count must be non-negative (Firefox)
    RangeError: Invalid count value (Chrome)
```

에러 형식
-----

`RangeError`무엇이 잘못되었을까?
-----------

`String.prototype.repeat()` 메소드가 사용되었습니다. 이 메소드는 문자열이 반복되는 수를 예측하는 카운트 파라메터를 가지고 있었습니다. 이 파라메터는 0보다 크고, 양의 `Infinity` 보다는 작으며, 음수는 될수 없습니다. 이 범위는 이렇게 표현 될 수 있습니다. : [0, +∞)

예
-

### 허용되지 않는 경우


```js
"abc".repeat(-1); // RangeError
```

### 허용되는 경우


```js
"abc".repeat(0); // ''
"abc".repeat(1); // 'abc'
"abc".repeat(2); // 'abcabc'
"abc".repeat(3.5); // 'abcabcabc' (수는 정수로 변환될 것입니다.)
```

참조
--

* `String.prototype.repeat()`
TypeError: Reduce of empty array with no initial value
======================================================

Message
-------
```

    TypeError: 초기값이 없는 빈 배열에 대해 reduce를 실행
```

Error type
----------

`TypeError`What went wrong?
----------------

JavaScript에는 reduce 함수가 여럿 있습니다.

* `Array.prototype.reduce()`, `Array.prototype.reduceRight()` and
* `TypedArray.prototype.reduce()` (en-US), `TypedArray.prototype.reduceRight()` (en-US)).

위의 함수들을 사용할 때 `initialValue`를 지정할 수 있습니다(`callback`을 처음 호출할 때 첫 번째 인자로 사용됨). 초기값을 제공하지 않으면 `Array` 또는 `TypedArray`의 첫 번째 원소를 초기값으로 사용합니다. 빈 배열을 제공해서 초기값을 반환할 수 없는 경우에 이 에러가 발생합니다.

Examples
--------

### Invalid cases

reduce 함수를 filter (`Array.prototype.filter()`, `TypedArray.prototype.filter()` (en-US))와 조합해서 사용할 때 이 에러가 자주 발생합니다. filter가 리스트의 모든 원소를 삭제하면 초기값으로 사용할 값이 없어집니다.


```js
var ints = [0, -1, -2, -3, -4, -5];
ints
  .filter((x) => x > 0) // 모든 원소를 삭제
  .reduce((x, y) => x + y); // 초기값으로 사용할 원소가 없음
```


비슷한 경우로, selector 안에 오타가 있거나 list의 원소 수가 비정상일 때에도 같은 에러가 발생할 수 있습니다.


```js
var names = document.getElementsByClassName("names");
var name_list = Array.prototype.reduce.call(
  names,
  (acc, name) => acc + ", " + name,
);
```

### Valid cases

이 문제를 해결할 수 있는 방법은 두 가지입니다.

첫 번째는 `initialValue`로 operator의 중립 원소를 제공하는 방법입니다. 예를 들어 덧셈에는 0을, 곱셈에는 1을, 문자열 결합에는 빈 문자열을 지정할 수 있습니다.


```js
var ints = [0, -1, -2, -3, -4, -5];
ints
  .filter((x) => x > 0) // 모든 원소 삭제함
  .reduce((x, y) => x + y, 0); // 덧셈에 대한 중립 원소를 초기값으로 지정
```


두 번째는 `reduce`를 호출하기 전이나 callback 내부에서 잘못된 초기값을 더하기 전에 빈 인자 문제를 처리하는 방법입니다.


```js
var names = document.getElementsByClassName("names");

var name_list1 = "";
if (names1.length >= 1)
  name_list1 = Array.prototype.reduce.call(
    names,
    (acc, name) => acc + ", " + name,
  );
// name\_list1 == "" when names is empty.

var name_list2 = Array.prototype.reduce.call(
  names,
  (acc, name) => {
    if (acc == "")
      // initial value
      return name;
    return acc + ", " + name;
  },
  "",
);
// name\_list2 == "" when names is empty.
```

See also
--------

* `Array.prototype.reduce()`
* `Array.prototype.reduceRight()`
* `TypedArray.prototype.reduce()` (en-US)
* `TypedArray.prototype.reduceRight()` (en-US)
* `Array`
* `TypedArray`
* `Array.prototype.filter()`
* `TypedArray.prototype.filter()` (en-US)
TypeError: "x" is not a constructor
===================================

메세지
---
```

    TypeError: "x" is not a constructor
    TypeError: Math is not a constructor
    TypeError: JSON is not a constructor
    TypeError: Symbol is not a constructor
    TypeError: Reflect is not a constructor
    TypeError: Intl is not a constructor
    TypeError: SIMD is not a constructor
    TypeError: Atomics is not a constructor
```

오류 유형
-----

`TypeError`뭐가 잘못된 거죠?
----------

객체 혹은 변수를 생성자로 사용하려고 했습니다, 하지만 객체(혹은 변수)가 생성자가 아닙니다. 생성자가 무엇인지에 대한 자세한 정보는 constructor 혹은 `new` operator 를 참조하시기 바랍니다.

`String` 혹은 `Array`와 같이 `new`,를 사용하여 생성할 수 있는 전역 객체들이 있습니다. 하지만 일부 전역 객체들은 그렇지 않고 속성과 메서드가 정적입니다. 다음의 JavaScript 표준 내장 객체들은 생성자가 아닙니다: `Math`, `JSON`, `Symbol`, `Reflect`, `Intl` (en-US), `SIMD`, `Atomics`.

Generator functions 또한 생성자로 사용될 수 없습니다.

예시
--

### 유효하지 않은 경우


```js
var Car = 1;
new Car();
// TypeError: Car is not a constructor

new Math();
// TypeError: Math is not a constructor

new Symbol();
// TypeError: Symbol is not a constructor

function\* f() {}
var obj = new f();
// TypeError: f is not a constructor
```

### car 생성자

자동차(car) 객체를 만들고자 한다고 가정합니다. 이 객체의 타입을 `car`라 하고 make, model, and year 세 개의 프로퍼티를 갖습니다. 이를 위해 다음과 같은 함수를 작성할 것입니다:


```js
function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
```


이제 다음과 같이 `mycar` 라 불리는 객체를 생성할 수 있습니다:


```js
var mycar = new Car("Eagle", "Talon TSi", 1993);
```

### 프라미스 이용

즉시 실행되는 프라미스를 반환하는 경우에는 \*새로운 Promise(...)\*를 생성할 필요가 없습니다.

아래는 올바른 방법이 아닙니다(프라미스 생성자가 제대로 호출되고 있지 않습니다). `TypeError: this is not a constructor` 예외를 던지게 됩니다:


```js
return new Promise.resolve(true);
```


대신, Promise.resolve() 혹은 Promise.reject() 정적 메서드를 사용하십시오:


```js
// This is legal, but unnecessarily long:
return new Promise((resolve, reject) => {
  resolve(true);
});

// Instead, return the static method:
return Promise.resolve(true);
return Promise.reject(false);
```

같이 보기
-----

* constructor
* `new` operator
SyntaxError: Malformed formal parameter
=======================================

Message
-------
```

    SyntaxError: malformed formal parameter (Firefox)
```

Error type
----------

`SyntaxError`무엇이 잘못 되었을까요?
-------------

코드에는 최소한 두 개의 인수가 전달 된 `Function()` 생성자가 있습니다. 마지막 인수는 작성중인 새 함수의 소스코드 입니다. 나머지는 모두 새 함수의 인수 목록을 구성합니다.

인수 목록이 어딘가 잘못되었습니다. 아마도 실수로 인수 이름으로 if 또는 var와 같은 키워드를 선택했거나 인수 목록에 갈곳 잃은 구두점이 있을 수 있습니다. 또는 실수로 숫자나 개체와 같은 잘못된 값을 전달한 것일 수 있습니다.

그래, 내 문제가 해결됐어. 근데 왜 말 안해줬어?
----------------------------

틀림 없이 오류 메세지의 표현은 다소 이상한 부분이 있습니다. "공식 매개 변수"는 "함수 인수"를 말하는 좋은 방법입니다. 우리는 "잘못된 형식의 단어를 사용했다"라고 표현 합니다.

Examples
--------

### Invalid cases


```js
var f = Function("x y", "return x + y;");
// SyntaxError (missing a comma)

var f = Function("x,", "return x;");
// SyntaxError (extraneous comma)

var f = Function(37, "alert('OK')");
// SyntaxError (numbers can't be argument names)
```

### Valid cases


```js
var f = Function("x, y", "return x + y;"); // correctly punctuated

var f = Function("x", "return x;");

// if you can, avoid using Function - this is much faster
var f = function (x) {
  return x;
};
```

See also
--------

* `Function()`
* About functions
* *Frankenstein* by Mary Wollstonecraft Shelley, full e-text ("Cursed (although I curse myself) be the hands that formed you! You have made me wretched beyond expression. You have left me no power to consider whether I am just to you or not. Begone! Relieve me from the sight of your detested form.")
SyntaxError: missing variable name
==================================

메시지
---
```

    SyntaxError: missing variable name (Firefox)
    SyntaxError: Unexpected token = (Chrome)
```

에러 타입
-----

`SyntaxError`무엇이 잘 못 되었을까?
-------------

변수에 이름이 없습니다. 이것은 코드 내의 구문 에러 때문일 수도 있습니다. 어쩌면 콤마를 잘 못 된 곳에 찍었거나, 변수명을 지을 때 애를 먹었을 수도 있습니다. 그럴 수도 있죠! 작명은 너무 어려우니까요.

예제
--

### 이름을 잃은 변수


```js
var = "foo";
```


좋은 이름을 떠올리기 어려웠을 거예요. 우리 모두 겪는 일이죠.


```js
var ohGodWhy = "foo";
```

### 예약어는 변수명이 될 수 없어요

예약어로 지정된 이름들이 변수로 쓰여 있습니다. 이것들은 사용할 수 없어요. 미안합니다. :(


```js
var debugger = "whoop";
// SyntaxError: missing variable name
```

### 여러 변수를 선언하기

여러 변수를 한 번에 선언할 때에는 콤마에 주의를 기울여야 합니다. 쓸 데없는 콤마를 더 찍지는 않았는지? 무심코 세미콜론 대신 콤마를 찍지는 않았는지?


```js
var x, y = "foo",
var x, = "foo"

var first = document.getElementById('one'),
var second = document.getElementById('two'),

// SyntaxError: missing variable name
```


올바르게 수정한 버전:


```js
var x,
  y = "foo";
var x = "foo";

var first = document.getElementById("one");
var second = document.getElementById("two");
```

### 배열

JavaScript 의 `Array` 리터럴은 대괄호로 감싸주어야 합니다. 이건 동작하지 않아요.


```js
var arr = 1,2,3,4,5;
// SyntaxError: missing variable name
```


이렇게 해야 맞습니다:


```js
var arr = [1, 2, 3, 4, 5];
```

더 보기
----

* Good variable names
* `var`
* Variable declarations in the JavaScript Guide
SyntaxError: "x" is a reserved identifier
=========================================

메세지
---
```

    SyntaxError: The use of a future reserved word for an identifier is invalid (Edge)
    SyntaxError: "x" is a reserved identifier (Firefox)
    SyntaxError: Unexpected reserved word (Chrome)
```

에러 타입
-----

`SyntaxError`무엇이 잘못되었을까?
-----------

예약어 (en-US)가 식별자로 쓰인 경우 발생하는 에러입니다. 이 키워드는 엄격(Strict) 모드와 느슨한(Sloppy) 모드에서 모두 예약어로 취급됩니다.

* `enum`

다음은 엄격 모드의 코드에서만 예약어로 취급됩니다:

* `implements`
* `interface`
* `let`
* `package`
* `private`
* `protected`
* `public`
* `static`
예제
--

### 엄격 모드와 엄격하지 않은 모드에서의 예약어

`enum` 식별자는 일반적으로 예약되어 있습니다.


```js
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
// SyntaxError: enum is a reserved identifier
```


엄격 모드의 코드에선 더 많은 식별자들이 예약되어 있습니다.


```js
"use strict";
var package = ["potatoes", "rice", "fries"];
// SyntaxError: package is a reserved identifier
```


이 변수들의 이름을 변경해야 합니다.


```js
var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
var list = ["potatoes", "rice", "fries"];
```

### 오래된 브라우저의 업데이트

새로운 구문을 사용하기 위해서는 최근 버전의 브라우저로 업데이트 해야 합니다. 예를 들어, 오래된 브라우저를 사용하고 있다면 `let` 또는 `class` 구현할 수 없습니다.


```js
"use strict";
class DocArchiver {}

// SyntaxError: class is a reserved identifier
// (오래된 버전의 브라우저에서만 에러가 발생합니다. 예) Firefox 44 이하)
```

같이 보기
-----

* Good variable names
ReferenceError: deprecated caller or arguments usage
====================================================

메시지
---
```

  Warning: ReferenceError: deprecated caller usage (Firefox)
  Warning: ReferenceError: deprecated arguments usage (Firefox)
  TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
```

에러 형식
-----

엄격 모드에서만 `ReferenceError` 경고가 발생합니다. JavaScript 실행이 중단되지는 않을 것입니다.

무엇이 잘못되었을까?
-----------

엄격모드에서, `Function.caller` (en-US) 나 `Function.arguments` 속성이 사용되었고, 그러지 말아야 했습니다. 이 속성들은 사라지게 되었는데, 함수 호출자를 흘려보내거나, 비 표준이었으며, 최적화 하기 어렵고, 잠재적으로 퍼포먼스에 무리를 주었기 때문입니다.

예
-

### `function.caller` or `arguments.callee.caller`

`Function.caller` (en-US) 와 `arguments.callee.caller` 는 사라지게 되었습니다. (자세한 정보는 레퍼런스 문서를 확인해 보세요.)


```js
"use strict";

function myFunc() {
  if (myFunc.caller == null) {
    return "The function was called from the top!";
  } else {
    return "This function's caller was " + myFunc.caller;
  }
}

myFunc();
// Warning: ReferenceError: deprecated caller usage
// "The function was called from the top!"
```

### `Function.arguments`

`Function.arguments` 는 사라졌습니다. (자세한 정보는 레퍼런스 문서를 확인해 주세요.)


```js
"use strict";

function f(n) {
  g(n - 1);
}

function g(n) {
  console.log("before: " + g.arguments[0]);
  if (n > 0) {
    f(n);
  }
  console.log("after: " + g.arguments[0]);
}

f(2);

console.log("returned: " + g.arguments);
// Warning: ReferenceError: deprecated arguments usage
```

참조
--

* Deprecated and obsolete features (en-US)
* Strict mode
* `Function.arguments`
* `Function.caller` (en-US) and `arguments.callee.caller`
SyntaxError: missing ] after element list
=========================================

메세지
---
```

    SyntaxError: missing ] after element list
```

에러 타입
-----

`SyntaxError`.

무엇이 잘못되었을까?
-----------

배열 초기자 구문에 오류가 있습니다. 닫는 대괄호("`]`") 또는 콤마("`,`")가 빠진 것 같습니다.

예제
--

### 완성되지 않은 배열 초기자


```js
var list = [1, 2,

var instruments = [
  'Ukulele',
  'Guitar',
  'Piano'
};

var data = [{foo: 'bar'} {bar: 'foo'}];
```


바르게 고치면:


```js
var list = [1, 2];

var instruments = ["Ukulele", "Guitar", "Piano"];

var data = [{ foo: "bar" }, { bar: "foo" }];
```

같이 보기
-----

* `Array`
SyntaxError: "use strict" not allowed in function with non-simple parameters
============================================================================

Message
-------
```

    Firefox:
    SyntaxError: "use strict" not allowed in function with default parameter
    SyntaxError: "use strict" not allowed in function with rest parameter
    SyntaxError: "use strict" not allowed in function with destructuring parameter

    Chrome:
    SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
```

Error type
----------

`SyntaxError`.

무엇이 잘못 되었을까요?
-------------

`"use strict"` 지시문은 다음 매개변수 중 한 개가 있는 함수의 맨 위에 작성됩니다:

* Default parameters
* Rest parameters
* Destructuring parameters

`"use strict"` 지시문은 ECMAScript 동작에 따라 이러한 함수의 맨 위에 허용되지 않습니다.

Examples
--------

### 기능 명세서

다음은 함수 `sum` 에는 기본 매개 변수 `a=1` 및 `b=2`가 있는 경우입니다:


```js
function sum(a = 1, b = 2) {
  // SyntaxError: "use strict" not allowed in function with default parameter
  'use strict';
  return a + b;
}
```


함수가 strict mode 모드에 있어야 하고 전체 스크립트 또는 포함된 함수가 strict mode에 있어도 괜찮으면 함수 외부에서 `"use strict"` 지시문을 이동할 수 있습니다:


```js
"use strict";
function sum(a = 1, b = 2) {
  return a + b;
}
```

### 함수 표현식

함수 표현식은 또 다른 해결방법을 사용할 수 있습니다:


```js
var sum = function sum([a, b]) {
  // SyntaxError: "use strict" not allowed in function with destructuring parameter
  'use strict';
  return a + b;
};
```


이것은 다음 표현식으로 변환 될 수 있습니다:


```js
var sum = (function () {
  "use strict";
  return function sum([a, b]) {
    return a + b;
  };
})();
```

### 화살표 함수

화살표 함수가 `this`에 접근해야 하는 경우에는, 둘러싼 함수로 화살표 함수를 사용할 수 있습니다:


```js
var callback = (...args) => {
  // SyntaxError: "use strict" not allowed in function with rest parameter
  'use strict';
  return this.run(args);
};
```


이것은 다음 표현식과 같이 변환될 수 있습니다:


```js
var callback = (() => {
  "use strict";
  return (...args) => {
    return this.run(args);
  };
})();
```

같이 보기
-----

* Strict mode
* function statement
* function expression
* Default parameters
* Rest parameters
* Destructuring parameters
Error: Permission denied to access property "x"
===============================================

메시지
---
```

    Error: Permission denied to access property "x"
```

에러 형식
-----

`Error`.

무엇이 잘못되었을까?
-----------

접근이 허가되지 않은 객체에 접근하기 위한 시도가 있었습니다. 아마 동일 출처 정책(same-origin policy)을 침해하여 다른 도메인으로부터 로드된 `<iframe>` (en-US) 엘리먼트에 대한 것이었을 겁니다.

예
-


```html
<!doctype html>
<html>
  <head>
    <iframe
 id="myframe"
 src="http://www1.w3c-test.org/common/blank.html"></iframe>
    <script>
 onload = function () {
 console.log(frames[0].document);
 // Error: Permission denied to access property "document"
 };
 </script>
  </head>
  <body></body>
</html>
```

참조
--

* `<iframe>` (en-US)
* Same-origin policy
SyntaxError: missing ; before statement
=======================================

메시지
---
```

    SyntaxError: missing ; before statement
```

오류 타입
-----

`SyntaxError`.

무엇이 잘 못 되었나?
------------

어딘가에 세미 콜론(`;`)이 빠져 있습니다. JavaScript 구문은 반드시 세미 콜론으로 끝나야 합니다. 일부는 자동 세미콜론 삽입 (automatic semicolon insertion (ASI) (en-US))의 영향을 받습니다. 그러나 이 경우에는 직접 세미 콜론을 써주어야 합니다. 그래야 JavaScript가 올바르게 해석 될 수 있기 때문입니다.

그러나, 가끔, 이 오류는 또 다른 오류의 결과로도 나타날 수도 있습니다. 문자열을 escape 문자로 적절히 처리해 주지 않았을 때, 또는 `var` 키워드를 잘 못 사용했을 때와 같은 경우 입니다. 또한 어딘가에 너무 많은 괄호 기호를 사용했을 것입니다. 이 오류가 발생했을 때에는 문법을 신중히 검토해야 합니다.

예제
--

### Escape 처리되지 않은 문자열

이 오류는 문자열을 escape 처리 하지 않았을 때, JavaScript 엔진이 문자열 끝을 미리 예측하여 발생합니다. 예를 들자면 아래와 같습니다. :


```js
var foo = 'Tom's bar';
// SyntaxError: missing ; before statement
```


문자열을 묶어줄 때 쌍 따옴표를 사용하거나, 역슬래시를 이용해서 홑따옴표를 사용 할 수 있습니다. :


```js
var foo = "Tom's bar";
var foo = 'Tom\'s bar';
```

### var와 함께 선언하는 것

이미 `var` 선언된 object나 array의 요소를 새로 선언 할 수 없습니다.


```js
var obj = {};
var obj.foo = 'hi'; // SyntaxError missing ; before statement

var array = [];
var array[0] = 'there'; // SyntaxError missing ; before statement
```


대신에, `var` 키워드를 생략하고 정의합니다. :


```js
var obj = {};
obj.foo = "hi";

var array = [];
array[0] = "there";
```

참조 문서
-----

* Automatic semicolon insertion (ASI) (en-US)
* JavaScript statements
SyntaxError: identifier starts immediately after numeric literal
================================================================

메세지
---
```

  SyntaxError: Unexpected identifier after numeric literal (Edge)
  SyntaxError: identifier starts immediately after numeric literal (Firefox)
  SyntaxError: Unexpected number (Chrome)
```

에러 타입
-----

`SyntaxError`무엇이 잘못되었을까?
-----------

식별자라고 불리는 변수의 이름은 반드시 지켜야 하는 특정 규칙을 따라야 합니다.

JavaScript의 식별자는 반드시 문자, 언더스코어(\_), 또는 달러 표시($)로 시작돼야 합니다. 숫자로 시작될 수 없습니다. 글자 뒤에만 숫자(0-9)가 올 수 있습니다.

예제
--

### 숫자로 시작하는 변수 이름

JavaScript에서 변수 이름은 숫자로 시작될 수 없습니다. 아래 예제는 에러가 발생합니다:


```js
var 1life = 'foo';
// SyntaxError: identifier starts immediately after numeric literal

var foo = 1life;
// SyntaxError: identifier starts immediately after numeric literal

alert(1.foo);
// SyntaxError: identifier starts immediately after numeric literal
```


숫자가 뒤에 오도록 변수 이름을 변경해야 합니다.


```js
var life1 = "foo";
var foo = life1;
```

같이 보기
-----

* 문법 (en-US)
* 변수(JavaScript Guide)
SyntaxError: missing name after . operator
==========================================

메시지
---
```

    SyntaxError: missing name after . operator
```

에러 타입
-----

`SyntaxError`무엇이 잘 못 되었을까?
-------------

점 연산자 (`.`)는 프로퍼티 접근을 위해 사용합니다. 접근해야 하는 프로퍼티 명은 제대로 명시 해야 합니다. 연산 프로퍼티에 접근하려면, 점 연산자를 사용하지 않고 대괄호를 사용하는 것으로 프로퍼티 접근 방식을 바꿔야 합니다. 이런 방식들이 표현식의 계산을 수행시켜줄 것입니다. 아마 당신은 연결을 하려고 했을 것입니다. 이 경우에는 더하기 연산자(`+`)가 필요합니다. 아래의 예제를 봐주세요.

예제
--

### 프로퍼티 접근

JavaScript 프로퍼티 접근자는 점(.) 또는 대괄호(`[]`) 중 하나만 사용한다. 대괄호는 연산 프로퍼티에 접근을 허용합니다.


```js
var obj = { foo: { bar: "baz", bar2: "baz2" } };
var i = 2;

obj.[foo].[bar]
// SyntaxError: missing name after . operator

obj.foo."bar"+i;
// SyntaxError: missing name after . operator
```


이 코드를 고치려면, 오브젝트에 이런 식으로 접근해야 합니다.:


```js
obj.foo.bar; // "baz"
// 또는 대신에
obj["foo"]["bar"]; // "baz"

// 연산 프로퍼티는 대괄호가 필요합니다.
obj.foo["bar" + i]; // "baz2"
```

### 프로퍼티 접근 vs. 연결

다른 프로그램 언어를 사용하다 왔다면 ( PHP 같은), 점 연산자(`.`)와 연결 연산자(`+`)를 혼동해서 쓰기가 더 쉬울 것입니다.


```js
console.log("Hello" . "world");

// SyntaxError: missing name after . operator
```


대신에 결합을 위해서는 더하기 표식을 사용해야 합니다.:


```js
console.log("Hello" + "World");
```

참조
--

* Property accessors
SyntaxError: Unexpected token
=============================

메시지
---
```

    SyntaxError: expected expression, got "x"
    SyntaxError: expected property name, got "x"
    SyntaxError: expected target, got "x"
    SyntaxError: expected rest argument name, got "x"
    SyntaxError: expected closing parenthesis, got "x"
    SyntaxError: expected '=>' after argument list, got "x"
```

에러 타입
-----

`SyntaxError`무엇이 잘못되었나요?
-----------

특정 언어 구조를 예상했지만 무언가 다른 것이 있었습니다. 아마도, 간단한 오타일 것입니다.

예제
--

### 예상하지 못한 표현식

예를 들어, 함수를 호출할 때, 인수에서 마지막 부분에 콤마는 허용되지 않습니다. JavaScript는 계속해서 다른 인자가 있을 것이라고 기대하기 때문입니다.


```js
Math.max(2, 42,);
// SyntaxError: expected expression, got ')'
```


콤마를 생략하거나 다른 인수를 추가해 수정할 수 있습니다.


```js
Math.max(2, 42);
Math.max(2, 42, 13 + 37);
```

참조
--

* `Math.max()`
ReferenceError: can't access lexical declaration`X' before initialization
=========================================================================

Message
-------
```

  ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
  ReferenceError: 'x' is not defined (Chrome)
```

Error type
----------

`ReferenceError`무엇이 잘못 되었을까요?
-------------

변수가 초기화 되기 전에 엑세스가 되어버립니다. 이 문제는 let 또는 const 선언이 정의 되기 전에 엑세스되는 모든 block 문에서 발생합니다.

Examples
--------

### 잘못된 경우

이 경우에 변수 "foo"는 `let` 을 사용하여 block 문에서 다시 선언됩니다.


```js
function test() {
  let foo = 33;
  if (true) {
    let foo = foo + 55;
    // ReferenceError: can't access lexical
    // declaration `foo' before initialization
  }
}
test();
```

### 올바른 경우

if 문에서 "foo"를 변경하려면 재 선언을 발생시키는 `let` 을 제거해야합니다.


```js
function test() {
  let foo = 33;
  if (true) {
    foo = foo + 55;
  }
}
test();
```

그밖에 볼 것
-------

* Temporal Dead Zone and errors with let
SyntaxError: missing ) after argument list
==========================================

Message
-------
```

    SyntaxError: missing ) after argument list
```

Error type
----------

`SyntaxError`.

What went wrong?
----------------

function을 호출하는 방식에 에러가 있는 것입니다. 맞춤법, 연산자 누락 또는 이스케이프 처리를 하지 않는 문자열과 같은 것으로 발생될 수 있습니다.

Examples
--------

문자열을 합치는 "+" 연산자가 없기 때문에, Javascript는 `log` function에 대한 인수를 `"PI: "`로 인식을 합니다. 이 경우, 닫침 괄호가 누락된 것으로 인식을 합니다.


```js
console.log('PI: ' Math.PI);
// SyntaxError: missing ) after argument list
```


You can correct the `log` call by adding the "`+`" operator:


```js
console.log("PI: " + Math.PI);
// "PI: 3.141592653589793"
```

See also
--------

* Functions
SyntaxError: illegal character
==============================

메세지
---
```

  SyntaxError: Invalid character (Edge)
  SyntaxError: illegal character (Firefox)
  SyntaxError: Invalid or unexpected token (Chrome)
```

에러 타입
-----

`SyntaxError`무엇이 잘못되었을까?
-----------

코드에 해당 구문에 맞지 않거나 예기치 않은 토큰이 있습니다. 마이너스 기호(`-`)와 대시(`–`) 또는 따옴표(`"`)와 비표준 따옴표(`“`) 등이 잘못 사용된 경우에 대해 문법 체크를 해주는 편집기를 사용하여 코드를 주의 깊게 확인해야 합니다.

예제
--

### 잘못 사용된 문자

일부 문자들은 비슷하게 보이지만 파서가 코드 해석을 실패하게 만듭니다. 유명한 예로 따옴표, 마이너스 또는 세미콜론(greek questionmark (U+37e)과 동일하게 보입니다)이 있습니다.


```js
“This looks like a string”;  // SyntaxError: illegal character
                             // 비슷해 보이지만 “와 ”는 "이 아닙니다

42 – 13;                     // SyntaxError: illegal character
                             // 비슷해 보이지만 –은 -이 아닙니다

var foo = 'bar';             // SyntaxError: illegal character
                             // 비슷해 보이지만 <37e>은 ;이 아닙니다
```


아래 예제는 정상적으로 동작합니다:


```js
"This is actually a string";
42 - 13;
var foo = "bar";
```


일부 편집기와 IDE는 문제가 있는 부분을 알려주거나 적어도 강조 표시를 해주지만 전부는 아닙니다. 이런 에러가 발생했을 때 무엇이 문제인지 찾을 수 없는 경우, 문제가 있는 줄을 지우고 다시 작성하는 것 가장 좋습니다.

### 문자 빠트리기

앞이나 뒤에 오는 문자를 잊어버리기 쉽습니다.


```js
var colors = ['#000', #333', '#666'];
// SyntaxError: illegal character
```


`'#333'`에 빠진 작은따옴표를 추가합니다.


```js
var colors = ["#000", "#333", "#666"];
```

### 숨겨진 문자

다른 곳에서 코드를 복사하여 붙여넣은 경우 잘못된 문자가 포함돼 있을 수 있습니다. 주의하세요!


```js
var foo = 'bar';​
// SyntaxError: illegal character
```


Vim과 같은 편집기에서 아래 코드를 체크하면 폭 없는 공백(zero-width space (ZWSP) (U+200B)) 문자가 있는 것을 확인할 수 있습니다.


```js
var foo = 'bar';​<200b>
```

같이 보기
-----

* 문법 (en-US)
SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
================================================================================

메세지
---
```

  SyntaxError: Calling delete on expression not allowed in strict mode (Edge)
  SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
  SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)
```

에러 타입
-----

엄격(Strict) 모드에서의 `SyntaxError`

무엇이 잘못되었을까?
-----------

JavaScript에서 일반 변수는 `delete` (en-US) 연산자를 사용하여 삭제할 수 없습니다. 엄격 모드에서 변수를 삭제하는 접근은 허용되지 않으므로 에러가 발생합니다.

`delete` 연산자는 오직 객체의 속성만을 삭제할 수 있습니다. 객체 속성은 설정할 수 있는 경우 "수식"될 수 있습니다.

일반적인 생각과 다르게 `delete` 연산자는 메모리 해제와 직접적인 연관이 없습니다. 메모리 관리는 참조가 깨짐에 따라 간접적으로 수행됩니다. 자세한 내용은 메모리 관리 페이지와 `delete` (en-US) 연산자 페이지를 참조하십시오.

이 에러는 오직 엄격 모드 코드에서만 발생합니다. 엄격하지 않은 모드에서 해당 연산자는 단순히 `false` 를 반환합니다.

예제
--

JavaScript에서 일반 변수를 삭제하려고 하면 동작하지 않습니다. 그리고 엄격 모드에서는 에러가 발생합니다:


```js
"use strict";

var x;

// ...

delete x;

// SyntaxError: applying the 'delete' operator to an unqualified name
// is deprecated
```


변수의 내용을 비우려면 `null`을 설정하면 됩니다:


```js
"use strict";

var x;

// ...

x = null;

// x는 가비지 컬렉터에 의해 메모리에서 해제됩니다
```

같이 보기
-----

* `delete` (en-US)
* 메모리 관리
* TypeError: property "x" is non-configurable and can't be deleted (en-US)