JavaScript에서 정확히 정의되지 않은 의미는 무엇입니까? 왜 거기에 있습니까? 어떤 사용법이 있습니까? 어떻게 유용 할 수 있습니까?


11

JavaScript에는 undefined 라는 것이 있습니다 . 나는 그것이 기본 클래스인지, 내장 변수인지, 키워드인지 또는 다른 것이 있는지 정말로 알지 못하기 때문에 무언가를 말했습니다. 나는 그것이 있다는 것을 알고 있습니다.

실제로 사용하려면 다음과 같이 작성하면됩니다.

undefined;
typeof undefined;

왜이 것이 JavaScript에 삽입 되었는지 설명해 주 시겠습니까? 우리는 null이 언어로 가치를 지니고있어서 이와 같은 것이되어서는 안됩니다 null. 다른 언어에서는 속성이나 변수의 값을 모르는 경우 단순히 null로 설정합니다. 여기서 우리는 같은 일을 할 수 있습니다.

우리는 어떻게이 사용할 수있는 것은 자바 스크립트를?



이것은 ad nauseum here 논의되었습니다 stackoverflow.com/questions/6999291/…
Paul

답변:


13

정의되지 않은 것에 대해 알아야 할 두 가지가 있습니다 ...

  • 유형 undefined 만 할 수 있습니다 하나의 값을 .
  • 변수 undefined

이제 다음 내용을주의 깊게 읽으십시오.

  • number(10, 10.01, 1e1) 유형의 값이 너무 많습니다 . 그러나 거기에만있을 수 하나의 값 타입 undefined그 값은 변수에 저장된다 undefined. 이 값은 예를 들어, 숫자 값 - NO 문자 표현을 가지고 1, 100, 1e-1형 번호 모두 리터럴 있지만 변수에 저장된 값은 undefined어떠한 형태의 문자가 없다.

  • undefinedJavaScript는 undefined전역 범위에서 type 값을 선언하고 할당하는 변수 입니다. 그래서 당신은 다음을 모두 할 수 있습니다 ...

  정의되지 않은 타입; // "찾으시는 주소가 없습니다"

  미정의 = 100;
  정의되지 않은 타입; // "숫자"

  undefined = void 0;
  정의되지 않은 타입; // "찾으시는 주소가 없습니다"

  window.undefined === 정의되지 않음; // 진실
  window.undefined === void 0; // 진실
  
  • 변수를 사용하지 않으려는 경우 식을 사용하여 undefined형식 값을 생성 할 수 있습니다 undefined. 식 void 0의 유일한 목적은 형식 값을 반환하는 것입니다 undefined.

... 이것이 왜 JavaScript에 삽입되었는지 설명해 주시겠습니까?

아니. 선언되지 않은 변수가 로컬 대신 전역 범위로 이동하는 이유를 아무도 설명 할 수없는 것처럼. 당신은 존재의 정당성을 찾기 위해 노력하는 대신 그것을 현명하게 사용하도록 스스로 훈련해야합니다 .

... 우리는 null 값을 가지고 있습니다 ...

null할 수 있지만 스칼라보다는 다소 undefined관련이 objects있습니다. 실제로 JavaScript는 null자체를 객체로 간주 하여 typeof null"객체"를 반환합니다.

제 생각에는, 결론은 이성의 절대 목적을 시도하지하는 것입니다 undefinednull코드를 읽을 유지 보수 및 재사용이되도록하고, 알기 쉽게 코드에서 사용 -.


2
좋은 설명 @greengit. the bottom line is to NOT try to reason the absolute purposes of undefined and nullJavaScript는 논리 언어와는 거리가 먼 것처럼 보이며 새로운 세계를 실험하는 것처럼 단순히 익숙해 져야합니다.
Saeed Neamati

1
"유일한 목적은 undefined" 유형의 값을 반환하는 것입니다 . 실제로 void표현식을 평가하고 반환 값을 무시하고 값을 반환합니다 undefined. 차이점은. undefinedJS 엔진은이 일이 가치가 없다고 말하는 데 사용됩니다. null에서 사용하는 당신은 이 물건 값이없는 말을. 이 명확한 구분.
Raynos

1
undefined = 100; typeof undefined;null을 할당하려고하면 오류가 발생합니다. 미래 독자들을 위해 그것을 명확히하고 싶었습니다.
Josh Rumbut

6

죄송합니다 오래된 질문하지만 모두가 정의되지 않은 및 널 (null)이 간단해야 할 이유를 대답을 위해 : 당신이 절대적으로 프로토 타입 기반 오리 타이핑 언어로 해야한다 "이 객체 X에 대한 값을 정의하지 않습니다"와 구별 "이 개체는 X가 말한다 아무것도 / 널 / 빈 "

이 기능이 없으면 프로토 타입 체인을 따라갈 방법이 없으므로 상속이 작동하지 않습니다. obj.someProp가 정의되어 있지 않은지 확인할 수 있어야 obj.prototype.someProp를보고 값을 찾을 때까지 체인을 위로 올릴 수 있습니다. obj.someProp가 null을 반환하면 실제로 null인지 또는 "내 프로토 타입보기"를 의미하는지 알 수있는 방법이 없습니다. 이 문제를 해결하는 유일한 방법은 씬 뒤에 약간의 마법을 주입하여 프로토 타입 체인으로 퍼지하고 JS 블랙 매직의 다양한 비트를 수행하는 능력을 손상시키는 것입니다.

Javascript의 대부분과 마찬가지로 undefined 및 null의 개념은 처음에는 기발하고 어리석은 것처럼 보이며 나중에는 절대적으로 훌륭합니다 (그러면 기발하고 어리석지 만 합리적인 설명으로 돌아갑니다).

존재하지 않는 속성에 액세스하고 존재하지 않는 속성을 터치 할 때 런타임에 다른 동적 언어에서 예외가 발생하는 경우 C #과 같은 언어가 컴파일되지 않습니다. 즉, 특수 구문을 사용하여 테스트해야합니다. 플러스 클래스는 객체가 인스턴스화 될 때 이미 상속 체인과 객체가 가지고있는 모든 속성을 알고 있음을 의미합니다 .JS에서는 체인을 15 단계 위로 프로토 타입을 수정할 수 있으며 이러한 변경 사항은 기존 객체에 나타납니다.


3

undefined정의되지 않은 값으로 설정된 전역 변수가 있습니다 . 사악한 사람들이 그것을 다른 것으로 설정할 수 있으므로 믿지 않는 것이 가장 좋습니다.

  • 정의되지 않은 값은 값을 반환하지 않는 함수의 반환 값입니다.
  • 정의되지 않은 값은 할당되지 않은 변수의 값입니다.
  • 정의되지 않은 값은 전달되지 않은 매개 변수의 값입니다.
  • 정의되지 않은 값은 할당되지 않은 속성의 값입니다.
  • 'undefined'는 선언되지 않은 변수의 유형입니다. ( typeof undeclaredVariable == 'undefined'. 불완전한 변수의 값을 읽으려고하면 던져 질 ReferenceError것이다.)

null때문에 미묘하게 고장났습니다 typeof null == 'object'. 우리가 왜 몰라 undefined하고 null, 아마 역사적 사고.


2

음, 반대로 정의되지 않은undefined 것을 평가하여 얻은 센티넬 값 은 아무것도 나타내지 않도록 정확하게 정의 된 값 입니다.null

var o = { };
> undefined
o
> Object {}
o.foo
> undefined
function f() {}
> undefined
function r() { return null; }
> undefined
f()
> undefined
r()
> null

예를 들어, 반환 값을 정의하지 않는 함수의 반환 값은 정의되어 있지 않습니다. 객체에 정의되지 않은 속성 값은 정의되어 있지 않습니다. 표현식이 아닌 명령문의 리턴 값이 정의되지 않았습니다 (콘솔 이외의 다른 상황에서는 발생하지 않음).
결과적 으로 유효한 값이기 때문에 명시 적으로 반환 하고 객체 의 값으로 속성을 명시 적으로 정의 할 있는 함수를 만들 있습니다 . 명시 적으로 의사 소통하기 위해 무언가가 정의 되어 있지 않습니다 .undefinedundefined

당신의 관계를 생각할 수 undefinednull사이와 NaN0.


당신은 그 뜻, "반환 값을 정의하지 않는 함수의 반환 값은 정의되지 않는다" undefined이다 void?
Saeed Neamati

@Saeed :별로. voidJavaScript에서는 단항 연산자로 인수를 취해 값을 반환 합니다undefined .
back2dos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.