에 따르면 에 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)
})()