[javascript] JavaScript에서 undefined를 쓸 수없는 이유는 무엇입니까?

에 따르면 에 MDN 설명서undefined :

최신 브라우저 (JavaScript 1.8.5 / Firefox 4+)에서 undefined는 ECMAScript 5 사양에 따라 구성 할 수없고 쓸 수없는 속성입니다. 그렇지 않은 경우에도 무시하지 마십시오.

undefined 의 속성 중 하나는 쓸 수 없다는 것입니다.

그러나 내가하면 :

var undefined = 'hello';
var test = undefined;
console.log(typeof test);
//string

이것이 내가 값을 덮어 쓸 수 있다는 것을 의미합니까 undefined? 누군가 그렇게하면 어떻게됩니까? JavaScript가 경고해야합니까?



답변

Amy 가 삭제 한 주석 이 해결책을 제시합니다. 이라는 변수를 작성 undefined중이며 전역 범위에서 스 니펫을 수행하면 작동하지 않습니다.

var undefined = 'hello';
var test = undefined;
console.log(typeof test);

그러나 undefined 가 더 이상 전역 변수를 참조하지 않는 로컬 범위에서 수행하면 효과적으로 작동합니다 .

(()=>{
  var undefined = 'hello';
  var test = undefined;
  console.log(typeof test);
})()

이 실수를 방지하기 위해 'use strict';지시문을 사용할 수 있습니다 .

'use strict';
var undefined = 'hello';
var test = undefined;
console.log(typeof test);

실행될 곳 (예 : 라이브러리, 임베드 등)을 제어 할 수없는 코드를 작성하는 경우 IIFE를 사용하는 것이 좋은 패턴입니다. 예를 들면 다음과 같습니다.

(function(undefined){
  // undefined will equal `undefined` because we didn't pass in an argument to the IIFE

  console.log(undefined); // always `undefined`, even if undefined !== `undefined`outside of the IIFE scope
})(); // No argument supplied


모든 테스트는 Ubuntu에서 Firefox 72.0b10 (64 비트)을 사용하여 수행되었으며 첫 번째 코드 조각의 결과는 이전 브라우저에서 다를 수 있습니다.


답변

undefined가 예약어가 아니기 때문에 전역 범위 이외의 다른 범위에서 식별자 (변수 이름)로 사용할 수는 있지만 코드를 유지 관리 및 디버깅하기 어려운 매우 나쁜 생각입니다.

출처 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

undefined되고 예약되지 따라서 그것에게 새로운 값을 할당 할 수있다.

사용하지 않을 때는 strict mode본질적 undefined으로 로컬 범위에서 호출되는 변수를 만들고 string값을 지정 합니다.

undefined전역 객체의 속성입니다 . undefined의 초기 값은 프리미티브 값undefined입니다.

use strict 전역 범위 에서이 실수를 방지하는 데 도움이되지만 로컬 범위에서 여전히 덮어 쓸 수 있습니다.

보다 안전하려면
항상을 반환 하는 void 0대신 사용해야 undefined합니다 undefined.

'use stict'

const test = (() => {
  let undefined = "test"
  console.log(typeof undefined)
  console.log(typeof void 0)
})()


답변