나는 차이가 사이에 무엇인지 알고 싶어 null
하고 undefined
자바 스크립트로.
null
당신이 그것을 비우기로 설정 했 습니까? 설정 undefined
되지 않았기 때문에 비어 있습니다. 또는 null
비어 있지만 의도적으로 undefined
비어 있습니다. 기본적으로 의도를 보여줍니다.
나는 차이가 사이에 무엇인지 알고 싶어 null
하고 undefined
자바 스크립트로.
null
당신이 그것을 비우기로 설정 했 습니까? 설정 undefined
되지 않았기 때문에 비어 있습니다. 또는 null
비어 있지만 의도적으로 undefined
비어 있습니다. 기본적으로 의도를 보여줍니다.
답변:
JavaScript에서 undefined
변수가 선언되었지만 다음과 같은 값이 아직 지정되지 않았 음을 의미합니다.
var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined
null
할당 값입니다. 값이없는 표현으로 변수에 할당 할 수 있습니다.
var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object
앞의 예에서, 분명하다 undefined
그리고 null
두 가지 유형은 다음과 같습니다 undefined
동안 유형 (정의되지 않은) 자체가 null
개체입니다.
null === undefined // false
null == undefined // true
null === null // true
과
null = 'value' // ReferenceError
undefined = 'value' // 'value'
나는 여기 에서 이것을 골랐다
정의되지 않은 값은 변수에 값이 지정되지 않은 경우 사용되는 기본 값입니다.
널값은 널, 비어 있거나 존재하지 않는 참조를 나타내는 기본 값입니다.
var를 통해 변수를 선언하고 값을 지정하지 않으면 값이 정의되지 않습니다. 자체적으로이 값을 WScript.Echo () 또는 alert ()하려고하면 아무 것도 표시되지 않습니다. 그러나 빈 문자열을 추가하면 갑자기 나타납니다.
var s;
WScript.Echo(s);
WScript.Echo("" + s);
변수를 선언하고 null로 설정하면 "null"이 출력되고 "undefined"가 표시되는 것을 제외하고는 동작이 동일합니다. 이것은 실제로 작은 차이입니다.
정의되지 않은 변수를 null로 또는 그 반대로 비교할 수도 있으며 조건은 true입니다.
undefined == null
null == undefined
그러나 두 가지 유형으로 간주됩니다. undefined는 그 자체로 유형이지만 null은 특수한 객체 값으로 간주됩니다. 변수의 일반적인 유형을 나타내는 문자열을 반환하는 typeof ()를 사용하여이를 확인할 수 있습니다.
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
위 스크립트를 실행하면 다음과 같은 결과가 나타납니다.
undefined
object
유형이 다르더라도 둘 중 하나의 멤버에 액세스하려고하면 (예 : 예외가 발생 함) 여전히 동일하게 작동합니다. WSH를 사용하면 " 'varname'은 null이거나 객체가 아닙니다"라는 메시지가 표시되며 운이 좋으면 다른 기사의 주제입니다.
명시 적으로 변수를 정의되지 않도록 설정할 수는 있지만 강력히 권장합니다. 변수를 null로 설정하고 설정하지 않은 것의 값을 정의하지 않은 상태로 두는 것이 좋습니다. 동시에 모든 변수를 항상 설정하는 것이 좋습니다. JavaScript는 C 스타일 언어와는 다른 스코프 체인을 가지고있어 심지어 베테랑 프로그래머조차도 쉽게 혼동 할 수 있으며 변수를 null로 설정하는 것이 버그를 방지하는 가장 좋은 방법입니다.
정의되지 않은 팝업이 나타나는 또 다른 인스턴스는 delete 연산자를 사용할 때입니다. C 세계의 사람들은 이것을 객체를 파괴하는 것으로 잘못 해석 할 수도 있지만 그렇지 않습니다. 이 작업은 배열에서 첨자를 제거하거나 개체에서 구성원을 제거합니다. 배열의 경우 길이에 영향을 미치지 않지만 이제 아래 첨자는 정의되지 않은 것으로 간주됩니다.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
위 스크립트의 결과는 다음과 같습니다.
0.) a
1.) undefined
2.) c
존재하지 않는 첨자 또는 멤버를 읽을 때 정의되지 않은 리턴이 표시됩니다.
null과 undefined의 차이점은 다음과 같습니다. JavaScript는 아무것도 null로 설정하지 않습니다. 일반적으로 우리가하는 일입니다. 우리는 변수를 undefined로 설정할 수 있지만, 우리에게 행해진 것이 아니기 때문에 null을 선호합니다. 디버깅 할 때 null로 설정된 것은 JavaScript가 아닌 자신이하는 일임을 의미합니다. 그 외에도이 두 가지 특수한 값은 거의 같습니다.
없는 은 값이 없음을 나타내는 특수 키워드입니다.
다음과 같은 가치로 생각하십시오.
undefined 속성은 변수에 null을 포함한 값이 할당되지 않았 음을 나타냅니다. 처럼
var foo;
정의 된 빈 변수는 null
데이터 유형입니다undefined
둘 다 값이없는 변수 의 값을 나타냅니다.
AND
null
는 값이없는 문자열 을 나타내지 않습니다 -빈 문자열-
처럼
var a = '';
console.log(typeof a); // string
console.log(a == null); //false
console.log(a == undefined); // false
이제
var a;
console.log(a == null); //true
console.log(a == undefined); //true
그러나
var a;
console.log(a === null); //false
console.log(a === undefined); // true
그래서 각자 사용하는 방법이 있습니다
정의되지 않은 변수 데이터 유형을 비교하는 데 사용
null 변수의 값을 비우려면 사용하십시오.
var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object
null
절대적으로 IS 데이터 형식은 msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx입니다. 사실은 typeof null
반환 object
이전 버전과의 호환성을 위해 남아있다 인 ECMAScript의 초기 버전에서 잘 알려져 있고 문서화 된 버그입니다. 하는 링크 는 실제로 당신의 코멘트에 게시을 반 페이지 아래 "대해서 typeof 널 (null) // 객체 (ECMAScript를 버그, NULL이어야합니다)"라고! 따라서 다운 투표에 댓글을 달기 전에 검색 노력을 보여주십시오
null : 변수 값이 없습니다. undefined : 변수 자체가 없음;
.. 여기서 variable은 값과 연관된 기호 이름입니다.
JS는 새로 선언 된 변수를 null 로 암시 적으로 초기화하기에 충분할 수 있지만 그렇지 않습니다.
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ( 'n') == true` ... 변수 자체의 부재가 더 이상 정확하지 않다고 말하는 경우
다음을주의 깊게 읽으십시오. JavaScript에서 null 과 undefined 의 차이점에 대한 모든 의심을 제거합니다 . 또한 아래에 제공된 유틸리티 기능을 사용하여 유형을 정확하게 결정할 수 있습니다.
JavaScript에서는 다음과 같은 유형의 변수를 가질 수 있습니다.
다음은 이러한 각 사례를 하나씩 설명합니다.
선언되지 않은 변수 : 다음은 선언되지 않은 변수에 적용됩니다.
선언되었지만 할당되지 않은 변수
리터럴 undefined로 지정된 변수 : 이러한 변수는 선언 되었지만 할당되지 않은 변수 와 유사하게 취급됩니다 .
리터럴 널로 지정된 변수
undefined 또는 null 이외의 변수가 할당 된 변수
다음은 변수의 올바른 유형 검사 알고리즘을 제공합니다.
유형을 결정하기 위해 다음 유틸리티 기능을 사용할 수도 있습니다. 현재 모든 ECMA 262 2017 유형을 지원합니다.
function TypeOf(o,bReturnConstructor)
{
if(typeof o==='undefined') return 'undefined'
if(o===null) return 'null'
if(typeof o!=='object') return typeof o
var type=Object.prototype.toString.call(o)
switch(type)
{
//Value types:4
case '[object Number]': type='number';break;
case '[object String]': type='string';break;
case '[object Boolean]': type='boolean';break;
case '[object Date]': type='date';break;
//Error Types:7
case '[object Error]': type='error';break;
case '[object EvalError]': type='evalerror';break;
case '[object RangeError]': type='rangeerror';break;
case '[object ReferenceError]': type='referenceerror';break;
case '[object SyntaxError]': type='syntaxerror';break;
case '[object TypeError]': type='typeerror';break;
case '[object URIError]': type='urierror';break;
//Indexed Collection and Helper Types:13
case '[object Array]': type='array';break;
case '[object Int8Array]': type='int8array';break;
case '[object Uint8Array]': type='uint8array';break;
case '[object Uint8ClampedArray]': type='uint8clampedarray';break;
case '[object Int16Array]': type='int16array';break;
case '[object Uint16Array]': type='uint16array';break;
case '[object Int32Array]': type='int32array';break;
case '[object Uint32Array]': type='uint32array';break;
case '[object Float32Array]': type='float32array';break;
case '[object Float64Array]': type='float64array';break;
case '[object ArrayBuffer]': type='arraybuffer';break;
case '[object SharedArrayBuffer]': type='sharedarraybuffer';break;
case '[object DataView]': type='dataview';break;
//Keyed Collection Types:2
case '[object Map]': type='map';break;
case '[object WeakMap]': type='weakmap';break;
//Set Types:2
case '[object Set]': type='set';break;
case '[object WeakSet]': type='weakset';break;
//Operation Types
case '[object RegExp]': type='regexp';break;
case '[object Proxy]': type='proxy';break;
case '[object Promise]': type='promise';break;
case '[object Object]': type='object';
if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function\s*([^\s(]+)/)[1];
break;
default:
type=type.split(' ')[1]
type=type.substr(0,type.length-1)
}
return type
}
나는 설명 할 것 undefined
, null
그리고Uncaught ReferenceError
:
1- Uncaught ReferenceError
: 변수 가 스크립트 에 선언되지 않았습니다 .이 변수에 대한 참조가 없습니다 .
2- undefined
: 변수가 선언되었지만 초기화되지 않음
3- null
: 변수가 선언되었으며 빈 값입니다.
null 및 undefined 는 다음과 같은 공통된 두 가지 개체 유형입니다.
==
및 !=
운영자.그러나 유사점은 여기서 끝납니다. 한 번만, 키워드 null 및 undefined 가 구현 되는 방식에는 근본적인 차이 가 있습니다. 이것은 분명하지 않지만 다음 예제를 고려하십시오.
var undefined = "foo";
WScript.Echo(undefined); // This will print: foo
undefined , NaN 및 Infinity 는 사전 초기화 된 "슈퍼 글로벌"변수의 이름 일뿐입니다. 런타임시 초기화되며 동일한 이름을 가진 일반 전역 또는 로컬 변수로 대체 될 수 있습니다.
이제 null을 사용 하여 같은 것을 시도해 봅시다 .
var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);
죄송합니다! null , true 및 false 는 예약 된 키워드입니다. 컴파일러에서 키워드를 변수 또는 속성 이름으로 사용할 수 없습니다
또 다른 차이점은 undefined 는 기본 유형이고 null 은 객체 유형입니다 (객체 참조가 없음을 나타냄). 다음을 고려하세요:
WScript.Echo(typeof false); // Will print: boolean
WScript.Echo(typeof 0); // Will print: number
WScript.Echo(typeof ""); // Will print: string
WScript.Echo(typeof {}); // Will print: object
WScript.Echo(typeof undefined); // Will print: undefined
WScript.Echo(typeof null); // (!!!) Will print: object
또한 null 및 undefined 가 숫자 컨텍스트에서 처리되는 방식에 중요한 차이점이 있습니다 .
var a; // declared but uninitialized variables hold the value undefined
WScript.Echo(a === undefined); // Prints: -1
var b = null; // the value null must be explicitly assigned
WScript.Echo(b === null); // Prints: -1
WScript.Echo(a == b); // Prints: -1 (as expected)
WScript.Echo(a >= b); // Prints: 0 (WTF!?)
WScript.Echo(a >= a); // Prints: 0 (!!!???)
WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!)
WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN)
WScript.Echo(b >= b); // Prints: -1 (as expected)
WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number)
WScript.Echo(1*b); // Prints: 0 (b evaluates to 0)
WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected)
WScript.Echo(a == 0); // Prints: 0 (as expected)
WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected)
WScript.Echo(b == 0); // Prints: 0 (!!!)
산술 표현식이나 숫자 비교에 사용되는 경우 null 은 0이 됩니다. false 와 마찬가지로 기본적으로 특수한 종류의 "0"입니다. 반면에 undefined 는 진정한 "아무것도 아니며" NaN 이됩니다 숫자 컨텍스트에서 사용하려고하면 ( "숫자가 아님")이됩니다.
참고 널 (null)을 하고 정의되지 않은 에서 특별한 치료를받을 ==
및 !=
사업자,하지만 당신은 진정한 숫자의 평등을 테스트 할 수 있습니다 와 B 표현과를 .(a >= b && a <= b)
tl; dr
null
변수라는 것을 변수로 설정하는 데 사용하십시오 .
undefined
유형이 혼합 된 변수를 설정하는 데 사용 합니다.
이것은 5 가지 기본 요소와 객체 유형을 모두 사용하며«유스 케이스»와 undefined
또는 의 차이점을 설명합니다 null
.
끈
모든 수명주기 동안 변수가 문자열 일 뿐이라는 것을 알고 있다면 규칙에 따라 다음과 같이 초기화 할 수 있습니다 ""
.
("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"
번호
모든 수명주기 동안 변수가 숫자 일뿐 규칙에 따라 변수를 초기화 할 수 있습니다 0
(또는 사용에 중요한 값이있는 NaN
경우 0
).
(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"
또는
(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"
부울
모든 수명주기 동안 변수가 부울 일뿐이라는 것을 알고 있다면 규칙에 따라 다음과 같이 초기화 할 수 있습니다 false
.
(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"
목적
모든 수명주기 동안 변수가 객체 일 뿐이라는 것을 알고 있다면 규칙에 따라 초기화 할 수 있습니다 null
.
(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"
참고 : 스마트 사용량 off null은 Object가 항상 이고 return 이기 때문에 잘못된 버전의 Object입니다 . 즉, Object 및 null 유형 모두에 대해 일관된 값을 반환합니다.true
typeof null
object
typeof myVarObject
모두
변수에 혼합 유형 (모든 수명주기 동안 모든 유형)이있는 경우 규칙에 따라 초기화 할 수 있습니다 undefined
.
차이점을 이해하는 가장 좋은 방법은 먼저 JavaScript의 내부 작업에 대해 생각하고 다음과 같은 의미의 차이점을 이해하는 것입니다.
let supervisor = "None"
// I have a supervisor named "None"
let supervisor = null
// I do NOT have a supervisor. It is a FACT that I do not.
let supervisor = undefined
// I may or may not have a supervisor. I either don't know
// if I do or not, or I am choosing not to tell you. It is
// irrelevant or none of your business.
이 이러한 삼가지 경우 사이에 의미의 차이이며, 자바 스크립트는 두 개의 서로 다른 값으로 후자의 두 사례를 구별 null
하고 undefined
. 이러한 의미를 전달하기 위해 해당 값을 명시 적으로 사용할 수 있습니다.
그렇다면이 철학적 근거로 인해 발생하는 JavaScript 관련 문제는 무엇입니까?
이니셜 라이저가없는 선언 된 변수 undefined
는 의도 한 값이 무엇인지 말한 적이 없기 때문에 값을 가져옵니다 .
let supervisor;
assert(supervisor === undefined);
설정되지 않은 개체의 속성 undefined
은 해당 속성에 대해 아무 말도하지 않았기 때문에 평가됩니다 .
const dog = { name: 'Sparky', age: 2 };
assert(dog.breed === undefined);
null
와 undefined
브렌던 아이크 그렇게 말했기 때문에 서로 "비슷한"입니다. 그러나 그들은 서로 강조되지 않습니다.
assert(null == undefined);
assert(null !== undefined);
null
그리고 undefined
고맙게도 다른 유형이있다.null
유형에 속하는 Null
및 undefined
유형에 Undefined
. 이것은 사양에 있지만, typeof
여기에서 반복하지 않을 이상한 점 때문에 이것을 결코 알지 못할 것입니다.
명시적인 return 문없이 본문 끝에 도달하는 함수는 반환 된 내용에 undefined
대해 아무것도 모르기 때문에 반환합니다.
그건 그렇고, JavaScript에는 다른 형태의 "무의미 함"이 있습니다 (철학을 연구 한 것이 좋습니다 ....)
NaN
ReferenceError
let
const
임시 데드 존에서 또는 정의 된 지역 변수를 하여ReferenceError
희소 배열의 빈 셀. 네, 정의되지 않은 undefined
것과 비교해 도 마찬가지 ===
입니다.
$ node
> const a = [1, undefined, 2]
> const b = [1, , 2]
> a
[ 1, undefined, 2 ]
> b
[ 1, <1 empty item>, 2 ]
undefined
할 수 있다는 사실을 무시합니다 let supervisor = undefined
.
undefined
선언되지 않았거나 아직 가치가 주어지지 않은 경우에만 오해라는 생각은 너무나 만연하며 사람들을 만나기가 매우 어렵습니다. 그래서 많은 사람들이 모두있는을 위해 자바 스크립트를 쓰레기 null
및 undefined
그러나이 값은 않습니다 완전히 별개의 의미를 가지고 있으며 대부분의 경우 그들이 의도 한 의미 (물론 이럴)와 함께 잘 작동합니다.
JavasSript에는 String, Number, Boolean, null 및 undefined의 5 가지 기본 데이터 유형이 있습니다. 간단한 예를 들어 설명하려고합니다.
우리는 간단한 기능을 가지고 있다고
function test(a) {
if(a == null){
alert("a is null");
} else {
alert("The value of a is " + a);
}
}
위의 함수에서도 if (a == null)은 if (! a)와 같습니다.
이제 매개 변수 a를 전달하지 않고이 함수를 호출하면
test(); it will alert "a is null";
test(4); it will alert "The value of a is " + 4;
또한
var a;
alert(typeof a);
이것은 정의되지 않습니다; 변수를 선언했지만이 변수에 값을 할당하지 않았습니다. 하지만 우리가 쓰면
var a = null;
alert(typeof a); will give alert as object
따라서 null은 객체입니다. 'a'에 null 값을 할당하는 방식으로
대한 undefined
유형, 오직 하나 개의 값이 : undefined
.
대한 null
유형, 오직 하나 개의 값이 : null
.
두 사람 모두 대해 레이블은 유형과 값입니다.
그들 사이의 차이점. 예를 들면 다음과 같습니다.
null
빈 값입니다undefined
결 측값입니다또는:
undefined
아직 가치가 없었습니다null
가치가 있었고 더 이상실제로 null
는 특별한 키워드입니다 는 식별자 이므로 할당 할 변수로 취급 할 수 없습니다.
그러나 undefined
이다 식별자 . 그러나 non-strict
mode와 strict
mode 모두 undefined라는 로컬 변수를 만들 수 있습니다. 그러나 이것은 끔찍한 아이디어입니다!
function foo() {
undefined = 2; // bad idea!
}
foo();
function foo() {
"use strict";
undefined = 2; // TypeError!
}
foo();
자바 스크립트로 변수를 선언하면 값이 할당됩니다 undefined
. 이는 변수가 변경되지 않았으며 나중에 어떤 값이든 할당 할 수 있음을 의미합니다. 또한 선언 시이 변수가 보유 할 값을 모른다는 것을 의미합니다.
이제 변수를 명시 적으로 할당 할 수 있습니다 null
. 변수에 값이 없음을 의미합니다. 예를 들어, 어떤 사람들은 중간 이름이 없습니다. 따라서 그러한 경우 person 객체의 middlename 변수에 null 값을 할당하는 것이 좋습니다.
이제 누군가가 사용자 오브젝트의 중간 이름 변수에 액세스하고 있으며 값이 있다고 가정하십시오 undefined
. 개발자가이 변수를 초기화하지 않았는지 또는 값이 없는지 알 수 없었습니다. 값이 null
인 경우 사용자는 중간 이름에 값이없고 수정되지 않은 변수가 아니라는 것을 쉽게 유추 할 수 있습니다.
null 및 undefined는 모두 일부 값이 없음을 나타내는 데 사용됩니다.
var a = null;
a가 초기화되고 정의됩니다.
typeof(a)
//object
null은 JavaScript의 객체입니다.
Object.prototype.toString.call(a) // [object Object]
var b;
b는 정의되지 않고 초기화되지 않은
정의되지 않은 객체 속성도 정의되지 않습니다. 예를 들어 "x"는 객체 c에 정의되어 있지 않으며 cx에 액세스하려고하면 정의되지 않은 상태로 반환됩니다.
일반적으로 정의되지 않은 변수에 null을 할당합니다.
Object.prototype.toString.call(null); // "[object Null]"
이 주제에 관한 Ryan Morr의 철저한 기사
"일반적으로 변수 나 속성에 값이 아닌 값을 할당하거나 함수에 전달하거나 함수에서 반환해야하는 경우 null이 거의 항상 최선의 선택입니다. 간단히 말하면 JavaScript는 정의되지 않은 것이므로 프로그래머는 null을 사용하십시오. "
영원하고 정의되지 않은 영원한 심연 살펴보기
JavaScript에서 Null과 undefined는 모두 값이 없음을 나타냅니다.
var a = null; //variable assigned null value var b; // undefined
사실 둘 다 가치가없는 경우에도 존재하지만 정의되지 않음은 실제로 변수가 초기화되지 않았 음을 의미합니다. 아무것도 반환하지 않는 함수와 값이 제공되지 않은 함수 매개 변수는 정의되지 않은 값이 반환됩니다. Null과 Undefined를 구분하려면 엄격한 항등 연산자 ===를 사용하십시오.
OK, 우리는 우리가들을 때 혼란을 얻을 수 null
및 undefined
하지만,하자가 간단, 둘은 시작 falsy 그들 유의 한 차이가 몇 만들고, 여러 가지면에서 비슷하지만 자바 스크립트의 이상한 부분, 예를 들어 대해서 typeof는 null
것입니다 'object'
동안 대해서 typeof가 undefined
있다 'undefined'
.
typeof null; //"object"
typeof undefined; //"undefined";
그러나 ==
아래와 같이 확인하면 둘 다 거짓임을 알 수 있습니다 .
null==undefined; //true
또한 null
객체 속성이나 프리미티브에 할당 할 수 있습니다.undefined
할당 할 수 있지만 아무 것도 할당하지 않으면 간단히 달성 할 수 있습니다.
한 눈에 차이점을 보여주는 빠른 이미지를 만듭니다.
typeof가 undefined를 반환하므로 undefined는 null이 초기화 자로 변수가 객체를 가리 키지 않음을 나타냅니다 (Javascript의 모든 것이 객체 임).
자바 스크립트에서 모든 변수는 키 값 쌍으로 저장됩니다. 각 변수는 variable_name : variable_value / reference 로 저장됩니다 .
찾으시는 주소가 없습니다 는 변수에 메모리에 공백이 주어졌지만 값이 할당 의미합니다. 모범 사례로이 유형을 할당으로 사용해서는 안됩니다.
이 경우 나중에 코드에서 변수가 값이없는 시점을 나타내는 방법은 무엇입니까? null 유형을 사용할 수 있습니다.이 유형 은 값이없는 동일한 것을 정의하는 데 사용되는 유형이지만이 경우 실제로 메모리에 값이있는 것처럼 정의되지 않은 것과 다릅니다. 그 값은 null
둘 다 비슷하지만 사용법과 의미가 다릅니다.
나는 사이에 아주 미묘한 차이를 추가 할 null
그리고 undefined
당신이 지상에서 바닐라 자바 스크립트 (JS)을 배우려고 할 때 알 수있는 좋은이다 :
null
는 JS에서 예약 된 키워드 인 반면 undefined
현재 런타임 환경의 전역 객체에 대한 변수입니다.코드를 작성하는 동안,이 차이는 모두 같은 식별하지 않습니다 null
및 undefined
항상 자바 스크립트 구문의 RHS에 사용됩니다. 그러나 LHS에서 표현식을 사용하면 이러한 차이를 쉽게 관찰 할 수 있습니다. 따라서 JS 인터프리터는 아래 코드를 오류로 해석합니다.
var null = 'foo'
아래 오류가 발생합니다.
잡히지 않은 구문 오류 : 예기치 않은 토큰 널
실제 생활에서 권장하지는 않지만 아래 코드가 성공적으로 실행되는 동안 :
var undefined = 'bar'
이것은 undefined
전역 객체 (클라이언트 측 JS의 경우 브라우저 창 객체)의 변수 이기 때문에 작동합니다.
undefined='bar'
실제로 undefined
불변의 값을 할당 하지 않고 혼란스럽게 오류를 발생시키지 않습니다.
차이 undefined
와 null
최소이지만, 차이가있다. 값이 undefined
초기화 된 적이없는 변수입니다 . 값 null
에 명시 적으로 값이 지정된 null
변수는 변수가 명시 적으로 값을 갖지 않도록 설정되었음을 의미합니다. 식 을 비교 undefined
하고 null
사용하면 null==undefined
식이 같습니다.
null==undefined
인 true
만 때문에 내재적 주조 (또는 JS에 상당 기간)의. 분명히 null===undefined
입니다 false
사용할 때 사용하기 때문에 ===
그것은 비교 유형을 잘한다.
기본적으로 Undefined 는 null이 변수에 할당 된 값이 없음을 의미하는지 (실제로 null 자체가 객체 임) 여부에 관계없이 런타임에 Javascript가 작성하는 전역 변수입니다.
예를 들어 보자.
var x; //we declared a variable x, but no value has been assigned to it.
document.write(x) //let's print the variable x
정의되지 않은 것은 출력으로 얻을 것입니다.
지금,
x=5;
y=null;
z=x+y;
그리고 당신은 출력으로 5 를 얻을 것 입니다. 이것이 Undefined 와 null 의 주요 차이점입니다.
null- 값을 나타내지 않기 위해 변수와 함께 사용되는 대입 값입니다 (객체 임).
undefined- 값이 지정되지 않은 변수이므로 JavaScript는 undefined를 지정합니다 (데이터 유형).
undeclared- 변수가 전혀 생성되지 않으면 선언되지 않은 것으로 알려져 있습니다.
이것 좀 봐. 결과는 천 단어의 가치가 있습니다.
var b1 = document.getElementById("b1");
checkif("1, no argument" );
checkif("2, undefined explicitly", undefined);
checkif("3, null explicitly", null);
checkif("4, the 0", 0);
checkif("5, empty string", '');
checkif("6, string", "string");
checkif("7, number", 123456);
function checkif (a1, a2) {
print("\ncheckif(), " + a1 + ":");
if (a2 == undefined) {
print("==undefined: YES");
} else {
print("==undefined: NO");
}
if (a2 === undefined) {
print("===undefined: YES");
} else {
print("===undefined: NO");
}
if (a2 == null) {
print("==null: YES");
} else {
print("==null: NO");
}
if (a2 === null) {
print("===null: YES");
} else {
print("===null: NO");
}
if (a2 == '') {
print("=='': YES");
} else {
print("=='': NO");
}
if (a2 === '') {
print("==='': YES");
} else {
print("==='': NO");
}
if (isNaN(a2)) {
print("isNaN(): YES");
} else {
print("isNaN(): NO");
}
if (a2) {
print("if-?: YES");
} else {
print("if-?: NO");
}
print("typeof(): " + typeof(a2));
}
function print(v) {
b1.innerHTML += v + "\n";
}
<!DOCTYPE html>
<html>
<body>
<pre id="b1"></pre>
</body>
</html>
또한보십시오:
건배!
isNaN(null)
반환을 배웠습니다 false
.
두 특수 값 모두 빈 상태를 의미합니다.
가장 큰 차이점은 undefined 는 아직 초기화되지 않은 변수의 값을 나타내고 null 은 의도적으로 객체가 없음을 나타냅니다.
그러나 변수 번호가 정의되어 있지만 초기 값이 지정되지 않았습니다.
let number;
number; // => undefined
숫자 변수가 정의되지 않았으며 초기화되지 않은 변수를 명확하게 나타냅니다.
존재하지 않는 객체 속성에 액세스 할 때 초기화되지 않은 동일한 개념이 발생합니다.
const obj = { firstName: 'Dmitri' };
obj.lastName; // => undefined
lastName 속성이 obj에 없기 때문에 JavaScript는 obj.lastName을 정의되지 않은 것으로 올바르게 평가합니다.
다른 경우에는 변수가 객체 또는 객체를 반환하는 함수를 보유 할 것으로 예상한다는 것을 알고 있습니다. 그러나 어떤 이유로 든 객체를 인스턴스화 할 수 없습니다. 이러한 경우 null은 누락 된 개체를 나타내는 의미있는 지표입니다.
예를 들어 clone ()은 일반 JavaScript 객체를 복제하는 함수입니다. 이 함수는 객체를 반환 할 것으로 예상됩니다 :
function clone(obj) {
if (typeof obj === 'object' && obj !== null) {
return Object.assign({}, obj);
}
return null;
}
clone({name: 'John'}); // => {name: 'John'}
clone(15); // => null
clone(null); // => null
그러나 clone ()은 객체가 아닌 인수 15 또는 null (또는 일반적으로 기본 값인 null 또는 undefined)을 사용하여 호출 할 수 있습니다. 이 경우 함수는 복제본을 만들 수 없으므로 누락 된 개체의 지표 인 null을 반환합니다.
typeof 연산자는 두 값을 구별합니다.
typeof undefined; // => 'undefined'
typeof null; // => 'object'
엄격한 품질 연산자 ===는 undefined와 null을 올바르게 구분합니다.
let nothing = undefined;
let missingObject = null;
nothing === missingObject; // => false
다른 의미 외에도 다른 차이점이 있습니다.
const { a = "default" } = { a: undefined }; // a is "default"
const { b = "default" } = { b: null }; // b is null
null
하지만 생략합니다.undefined
const json = JSON.stringify({ undefinedValue: undefined, nullValue: null });
console.log(json); // prints {"nullValue":null}
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" instead of "null"
변수가 초기화되지 않으면 정의되지 않습니다. undefined는 객체가 아닙니다. 예 : var MyName; console.log (typeof MyName);
개발 도구에서 콘솔 로그를 확인하면 정의되지 않은 상태로 인쇄됩니다.
null은 a 객체입니다. 일부 변수를 null로 사용하려면 null이 사용됩니다 .null 변수는 존재하지만 값을 알 수 없습니다. null은 자동으로 초기화되지 않습니다.
예 : var MyName = null; console.log (typeof MyName); 개발 도구에서 csole 로그를 확인하면 개체가됩니다.
null
자바 스크립트의 값은?