[javascript] JavaScript에서 undefined 대신 null을 사용하는 이유는 무엇입니까?

저는 지금 꽤 오랫동안 JavaScript를 작성해 왔으며 .NET을 사용할 이유가 없었습니다 null. 그것은 undefined항상 바람직하고 프로그래밍 방식으로 동일한 목적을 제공합니다. null대신 사용 하는 실용적인 이유는 무엇입니까 undefined?



답변

Null과 undefined는 본질적으로 동일한 의미를 갖는 두 개의 다른 값입니다. 유일한 차이점은에 규칙 당신이 그들을 사용하는 방법의 당신의 시스템. 일부 사람들이 언급했듯이 어떤 사람들은 “객체 없음”을 의미하는 데 null을 사용합니다. 여기서 undefined는 객체가 예상되지 않았거나 오류가 있음을 의미하는 반면 가끔 객체를 얻을 수 있습니다. 내 문제는 완전히 임의적이고 완전히 불필요하다는 것입니다.

즉, 한 가지 큰 차이점이 있습니다. 초기화되지 않은 변수 (인수가 전달되지 않은 함수 매개 변수 포함)는 항상 정의되지 않습니다.

내 코드에서 나는 이유는 결코 내가 반환 널 (null) (예를 들어 정규식 일치)를 제어하지 않는 것을 제외하고는 null를 사용하지 않습니다. 이것의 아름다움은 사물을 많이 모방한다는 것입니다. x === 정의되지 않았는지 확인할 필요가 없습니다 || x === null. 그리고 == 또는 단순히 if (x) … 같은 것을 사용하는 습관이 있다면. 멈춰. !x빈 문자열, 0, null, NaN에 대해 true로 평가됩니다. 즉, 원하지 않는 것입니다. 끔찍하지 않은 자바 스크립트를 작성하려면 항상 triple equals ===를 사용하고 null을 사용하지 마십시오 (대신 undefined 사용). 그것은 당신의 삶을 더 쉽게 만들 것입니다.


답변

난 정말 답을 가지고 있지만, 따라하지 니콜라스 C. Zakas , 그의 책의 30 페이지의 웹 개발자를위한 전문 자바 스크립트 :

나중에 객체를 보유 할 변수를 정의 할 때 null다른 변수와 는 반대로 변수를 로 초기화하는 것이 좋습니다 . 이렇게하면 값 null을 명시 적으로 확인 하여 나중에 변수가 개체 참조로 채워 졌는지 확인할 수 있습니다.


답변

하루의 끝에서, 모두 있기 때문에 nullundefined같은 값으로 강제 변환 ( Boolean(undefined) === false && Boolean(null) === false), 당신은 기술적으로 작업을 끝내야 중 하나를 사용할 수 있습니다. 그러나 올바른 방법이 있습니다, IMO.

  1. 의 사용법은 undefinedJavaScript 컴파일러에 맡기십시오.

    undefined참조를 가리 키지 않는 변수를 설명하는 데 사용됩니다. JS 컴파일러가 당신을 돌봐 줄 것입니다. 컴파일 타임에 JS 엔진은 호이스트 된 모든 변수의 값을 undefined. 엔진이 코드를 단계별로 실행하고 값을 사용할 수있게되면 엔진은 해당 값을 각 변수에 할당합니다. 값을 찾지 못한 변수의 경우 변수는 계속해서 기본 요소에 대한 참조를 유지합니다 undefined.

  2. 변수의 값을 “값 없음”으로 명시하려는 경우에만 null을 사용하십시오.

    @ com2gz가 말했듯이 : null프로그래밍 방식으로 비어있는 것을 정의하는 데 사용됩니다. undefined참조가 존재하지 않음을 의미합니다. null값은 “아무것도”에 정의 된 기준을 갖는다. 객체의 존재하지 않는 속성을 호출하는 경우 undefined. 이 속성을 의도적으로 비워두면 의도적으로 있음 null을 알 수있을 것입니다.

TLDR; undefined프리미티브를 사용하지 마십시오 . 할당하지 않고 변수를 선언하거나 참조가없는 객체의 속성에 액세스하려고 할 때 JS 컴파일러가 자동으로 설정하는 값입니다. 반면에 null의도적으로 변수에 “값 없음”을 지정하려는 경우에만 사용 하십시오.

나는 명시 적으로 어떤 것도 undefined로 설정하지 않았습니다 (그리고 상호 작용 한 많은 코드베이스에서 이것을 발견하지 못했습니다). 또한 null. 내가 사용하는 유일한 null경우는 함수에 대한 인수 값을 값이없는 것으로 표시하려는 경우입니다. 즉,

function printArguments(a,b) {
  console.log(a,b);
}

printArguments(null, " hello") // logs: null hello


답변

undefined는 사물의 개념이 존재하지 않는 곳입니다. 유형이 없으며 해당 범위에서 이전에 참조 된 적이 없습니다. null은 사물이 존재하는 것으로 알려져 있지만 가치가 없습니다.


답변

모든 사람은 고유 한 코딩 방식과 고유 한 내부 의미를 가지고 있습니다.하지만 수년 동안 저는 이것이이 질문을하는 사람들에게 가장 직관적 인 조언이라는 것을 알게 되었습니다. 의심 스러울 때는 JavaScript가하는 일을하십시오. .

jQuery 플러그인 옵션과 같은 객체 속성을 사용하고 있다고 가정 해 보겠습니다. 아직 정의되지 않은 속성에 JavaScript가 제공하는 값이 무엇인지 직접 물어보세요 undefined. 답은 . 따라서이 컨텍스트에서 JavaScript와 일치하도록 ‘undefined’로 이러한 유형을 초기화합니다 (변수의 경우 var myVar;대신 할 수 있음 var myVar = undefined;).

이제 DOM 조작을하고 있다고 가정 해 보겠습니다. JavaScript가 존재하지 않는 요소에 할당하는 값은 무엇입니까? 대답은 null입니다. 이것은 나중에 DOM과 관련된 요소, 문서 조각 또는 유사 항목에 대한 참조를 보유 할 자리 표시 자 변수를 만드는 경우 초기화 할 값입니다.

당신이 JSON과 함께 작업하는 경우, 특별한 경우에 요구 될 수 있습니다 : 정의되지 않은 속성 값에 대해 다음 중 하나에 설정해야 ""또는 null값의 때문에undefined 적절한 JSON 형식으로 간주되지 합니다.

이 말한다면 이전의 포스터가 표현 된 것처럼, 당신은 당신이 물건을 초기화하고 있음을 발견 한 경우 null또는 undefined, 어쩌면 당신은 당신의 응용 프로그램을 코딩에 대해 이동하는 방법을 재고해야 더 블루 달에 한 번 이상.


답변

여기에 제안 된 규칙을 채택 할 수도 있지만 실제로는 그럴만 한 이유가 없습니다. 의미가있을만큼 일관되게 사용되지 않습니다.

규칙을 유용하게 만들려면 먼저 호출 된 함수가 규칙을 따르는 지 알아야합니다. 그런 다음 반환 된 값을 명시 적으로 테스트하고 수행 할 작업을 결정해야합니다. 정의되지 않은 경우 호출 된 함수가 알고있는 일종의 오류가 발생 했다고 가정 할 수 있습니다 . 그러나 오류가 발생하고 함수가이를 알고 있고이를 더 넓은 환경으로 보내는 것이 유용하다면 오류 개체를 사용하지 않는 이유는 무엇입니까? 즉, 오류가 발생합니까?

따라서 하루가 끝나면이 컨벤션은 단순한 환경의 아주 작은 프로그램 외에는 거의 쓸모가 없습니다.


답변

정의 되지 않은 null 의 유용한 속성은 다음 을 충족 하지 않습니다.

> null + 3
3
> undefined + 3
NaN

내가 사용하는 null내가 숫자 값을 ‘해제’, 또는 일부를 초기화 할 때. 마지막 사용은 CSS 변환을 조작하는 것입니다.

const transforms = { perspective : null, rotateX : null };
// if already set, increase, if not, set to x
runTimeFunction((x) => { trasforms.perspective += x; });
// still useful, as setting perspective to 0 is different than turning it off
runTimeFunction2((x) => { transforms.perspective = null; });

// toCss will check for 'null' values and not set then at all
runTimeFunction3(() => { el.style.transform = toCss(transforms); });

이 속성을 사용 해야하는지 확실하지 않습니다 .