Development Tip

undefined 값을 설정하면 어떻게됩니까?

yourdevel 2020. 12. 12. 12:31
반응형

undefined 값을 설정하면 어떻게됩니까?


아래의이 줄은 무엇을합니까?

undefined = 'A value';

값을 변경하지 않으면 undefined무대 뒤에서 어떤 일이 발생합니까?


undefined전역 개체의 속성입니다. 즉 전역 범위의 변수입니다. 의 초기 값은 undefined기본 값 undefined입니다.

참조 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined를

그래서 그것은 단지 변수 일 뿐이며 특별한 것은 없습니다. 이제 질문에 답하려면 :

  1. undefined = 'A value';'A value'전역 변수에 문자열 할당을 시도 합니다.undefined
  2. 이전 브라우저에서는 값이 변경 undefined === 'A value'; // true됩니다. 엄격 모드의 최신 브라우저에서는 작업으로 인해 오류가 발생합니다.

브라우저 콘솔에서 다음을 테스트 할 수 있습니다 (여기서는 최신 브라우저-Google Chrome을 사용하고 있습니다).

undefined = true;
console.log(undefined); // undefined
// in older browsers like the older Internet Explorer it would have logged true

undefined위의 예에서 의 값은 변경되지 않습니다. 이것은 (강조 내) 때문입니다.

최신 브라우저 (JavaScript 1.8.5 / Firefox 4 이상)에서 undefined는 ECMAScript 5 사양에 따라 구성 할 수없고 쓸 수없는 속성 입니다.

엄격 모드에서 :

'use strict';
undefined = true; // VM358:2 Uncaught TypeError: Cannot assign to read only property 'undefined' of object

상황이 좋아 달리 true, 123또는 null, undefined하지 않은 것입니다 리터럴 . 즉, undefined 식별자를 사용하는 것이 정의되지 않은 값 을 얻는 확실한 방법이 아님을 의미 합니다 . 대신 void연산자를 사용할 수 있습니다 ( 예 :) void 0.

기본적으로 전역 개체undefined 의 속성 , 즉 전역 변수를 정의했습니다. ECMAScript 5 이전에는 해당 속성이 쓰기 가능 했으므로

undefined = "A value";

값이 window.undefined지역 변수에 의해 가려지지 않는다고 가정하고 의 값을 대체했습니다 . 그런 다음 사용 "A value" === undefined하면 true. 그리고 void 0 === undefined생성 할 것이다 false.

ECMAScript 5는이 동작을 변경했으며 이제 속성에 쓰기 또는 구성이 불가능합니다. 따라서에 대한 할당 undefined은 비 엄격 모드에서 무시되고 예외가 엄격 모드에서 발생합니다. 후드,

  1. undefined = "A value";A는 단순 할당
  2. 이는 PutValue사용 "A value"하여 전역 객체, 참조 된 이름 "undefined"및 엄격 모드에서 할당 된 경우 엄격한 플래그 가있는 참조에 값을 넣습니다 .
  3. 전역 개체 [[Put]] 내부 메서드를 호출하여 "undefined"속성 이름, "A value"값으로 전달 하고 strict 플래그를 throw 플래그로 전달합니다.
  4. 전역 개체 [[DefineOwnProperty]] 내부 메서드를 호출하여 "undefined", 속성 설명자 {[[Value]]: "A value"}및 throw 플래그를 인수로 전달합니다.
  5. 즉, throw 플래그가 true이면 TypeError 예외를 throw하고 그렇지 않으면 false를 반환합니다.

그러나 여전히 지역 undefined변수 를 선언 할 수 있습니다 .

(function() {
  var undefined = "A value";
  alert(undefined); // "A value";
})();

나는 약간의 POC를 만들었습니다 strict mode.

효과는 strict mode모든 것을 사용하지 않으면 잘된다는 것입니다. 당신이 사용한다면 당신은 strict mode좋은 것입니다 :

TypeError : 읽기 전용 속성 'undefined'에 할당 할 수 없습니다.

이제 POC를 살펴 보겠습니다.

"use strict"
var c;

if (c === undefined) {
  console.log("nothing happened")
}

undefined = "goofy"

c = "goofy"

if (c === undefined) {
  console.log("c is 'goofy' and it's equal to undefined.. gosh.. we broke js")
}

이제 말했듯이 엄격 모드를 사용 하면 스크립트 TypeError를 제거하면 잠시 동안 얻을 수 "use strict"있으며 출력은 간단 nothing happened합니다.

더 많은 것을 알고 싶다면 이 Q / A 가 도움이 될 수 있음을 발견 했습니다.

참고 : Node.js.

참고 URL : https://stackoverflow.com/questions/36519946/what-happens-if-we-set-the-value-of-undefined

반응형