다른 점이 뭔지 알고 싶어요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'
차이점은 화장실 휴지 홀더로 설명할 수 있습니다.
0이 아닌 값은 화장지 롤이 있는 홀더와 같고 튜브에 휴지가 남아 있는 것과 같습니다.
0 값은 화장실 휴지통이 비어 있는 홀더와 같습니다.
null 값은 휴지관이 없는 홀더와 같습니다.
정의되지 않은 값은 홀더 자체가 누락되는 것과 유사합니다.
여기서 골랐어요.
정의되지 않은 값은 변수에 값이 할당되지 않은 경우 사용되는 기본 값입니다.
null 값은 null, 빈 참조 또는 존재하지 않는 참조를 나타내는 원시 값입니다.
변수를 var를 통해 선언하고 값을 지정하지 않으면 값은 정의되지 않습니다.WScript를 시도하면 그 자체입니다.이 값은 Echo() 또는 alert()로 표시됩니다.그러나 빈 문자열을 추가하면 갑자기 표시됩니다.
var s; WScript.Echo(s); WScript.Echo("" + s);
변수를 선언하고 null로 설정할 수 있습니다.동작은 “null”이 출력되는 것과 “정의되지 않은”이 표시되는 것을 제외하고 동일합니다.이것은 정말 작은 차이입니다.
null 또는 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 is null or not object’라는 두려움이 느껴집니다.그것은 운이 좋은 경우입니다(다만, 이것은 다른 기사의 토픽입니다).
변수를 명확하게 정의하지 않도록 설정할 수 있지만, 저는 이에 대해 강력히 반대합니다.변수만 null로 설정하고 설정하지 않은 값에 대해서는 정의되지 않은 상태로 두는 것이 좋습니다.동시에 모든 변수를 항상 설정해 둘 것을 권장합니다.JavaScript는 C스타일의 언어와는 다른 스코프 체인을 가지고 있어 베테랑 프로그래머도 쉽게 혼동할 수 있으며 변수를 null로 설정하는 것이 버그를 방지하는 가장 좋은 방법입니다.
정의되지 않은 팝업이 표시되는 다른 예는 delete 연산자를 사용하는 경우입니다.C-world에서 온 사람들은 이것을 물체를 파괴하는 것으로 잘못 해석할 수도 있지만, 그렇지 않습니다.이 작업은 배열에서 첨자를 제거하거나 개체에서 구성원을 제거하는 작업을 수행합니다.배열의 경우 길이는 영향을 주지 않지만, 그 첨자는 정의되지 않은 것으로 간주됩니다.
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과 defined의 차이는 JavaScript는 아무것도 null로 설정하지 않는다는 것입니다.이것은 보통 우리가 하는 일입니다.변수를 정의되지 않음으로 설정할 수 있지만 null을 선호합니다. null은 우리에게 전혀 적용되지 않기 때문입니다.디버깅을 할 경우 null로 설정된 것은 모두 JavaScript가 아닌 사용자 자신의 작업임을 의미합니다.그 밖에도, 이 두 개의 특별한 값은 거의 동일합니다.
다음을 주의 깊게 읽어 주십시오.그럼 두 사람 사이의 차이에 대한 모든 의심을 없앨 수 있을 겁니다null
그리고.undefined
JavaScript에 있습니다.또한 이 답변의 끝에 있는 유틸리티 함수를 사용하여 보다 구체적인 유형의 변수를 얻을 수 있습니다.
JavaScript에서는 다음과 같은 유형의 변수를 사용할 수 있습니다.
- 선언되지 않은 변수
- 선언되었지만 할당되지 않은 변수
- 리터럴로 할당된 변수
undefined
- 리터럴로 할당된 변수
null
- 변수와 함께 할당된 변수:
undefined
또는null
다음은 이러한 각 사례에 대해 하나씩 설명합니다.
선언되지 않은 변수
- 체크할 수 있는 것은
typeof
문자열 ‘filename‘을 반환하는 연산자 - 느슨한 등호 연산자로 확인할 수 없습니다(
== undefined
엄밀한 등가 연산자는 말할 것도 없습니다.=== undefined
),
if-statement 및 3진 연산자(? :
): 참조 에러가 발생합니다.
- 체크할 수 있는 것은
선언되었지만 할당되지 않은 변수
typeof
문자열 ‘filename‘을 반환합니다.==
에 확인하다.null
돌아온다true
==
에 확인하다.undefined
돌아온다true
===
에 확인하다.null
돌아온다false
===
에 확인하다.undefined
돌아온다true
- if-statement 및 3진 연산자에 대해 거짓(
? :
)
리터럴로 할당된 변수
undefined
이러한 변수는 선언되었지만 할당되지 않은 변수와 동일하게 취급됩니다.리터럴로 할당된 변수
null
typeof
문자열 ‘object‘를 반환합니다.==
에 확인하다.null
돌아온다true
==
에 확인하다.undefined
돌아온다true
===
에 확인하다.null
돌아온다true
===
에 확인하다.undefined
돌아온다false
- if-statement 및 3진 연산자에 대해 거짓(
? :
)
변수와 함께 할당된 변수:
undefined
또는null
- type of은 ‘bigint‘, ‘function’, ‘number‘, ‘object‘, ‘string‘, ‘function‘, ‘number‘ 등의 문자열 중 하나를 반환합니다.
변수의 올바른 유형 확인을 위한 알고리즘을 다음에 나타냅니다.
- 입수하다
typeof
변수가 ‘객체’가 아닌 경우 반환한다. - 확인하다
null
,~하듯이typeof null
object도 반환한다. - 보다 정확한 값을 반환하려면 스위치 문을 사용하여 Object.protype.toString.call(o)을 평가합니다.
Object
의toString
메서드는 네이티브/호스트 개체에 대해 ‘[object ConstructorName]’과 같은 문자열을 반환합니다.다른 모든 개체(사용자 정의 개체)의 경우 항상 ‘[개체]’를 반환합니다. - 마지막 부분이 해당 경우(변수의 문자열화된 버전이 ‘[개체 객체]’이며 파라미터 returnConstructorBoolean은
true
, 컨스트럭터의 이름을 취득하려고 합니다.toString
– 거기서 이름을 추출해 냈습니다.생성자에 연결할 수 없는 경우 ‘object’가 평소처럼 반환됩니다.문자열에 이름이 포함되지 않으면 ‘anonymous’가 반환됩니다.
(ECMAScript 2020까지 모든 유형 지원)
function TypeOf(o, returnConstructorBoolean) {
const type = typeof o
if (type !== 'object') return type
if (o === null)
return 'null'
const toString = Object.prototype.toString.call(o)
switch (toString) {
// Value types: 6
case '[object BigInt]':
return 'bigint'
case '[object Boolean]':
return 'boolean'
case '[object Date]':
return 'date'
case '[object Number]':
return 'number'
case '[object String]':
return 'string'
case '[object Symbol]':
return 'symbol'
// Error types: 7
case '[object Error]':
return 'error'
case '[object EvalError]':
return 'evalerror'
case '[object RangeError]':
return 'rangeerror'
case '[object ReferenceError]':
return 'referenceerror'
case '[object SyntaxError]':
return 'syntaxerror'
case '[object TypeError]':
return 'typeerror'
case '[object URIError]':
return 'urierror'
// Indexed Collection and Helper types: 13
case '[object Array]':
return 'array'
case '[object Int8Array]':
return 'int8array'
case '[object Uint8Array]':
return 'uint8array'
case '[object Uint8ClampedArray]': return 'uint8clampedarray'
case '[object Int16Array]':
return 'int16array'
case '[object Uint16Array]':
return 'uint16array'
case '[object Int32Array]':
return 'int32array'
case '[object Uint32Array]':
return 'uint32array'
case '[object Float32Array]':
return 'float32array'
case '[object Float64Array]':
return 'float64array'
case '[object ArrayBuffer]':
return 'arraybuffer'
case '[object SharedArrayBuffer]': return 'sharedarraybuffer'
case '[object DataView]':
return 'dataview'
// Keyed Collection types: 2
case '[object Map]':
return 'map'
case '[object WeakMap]':
return 'weakmap'
// Set types: 2
case '[object Set]':
return 'set'
case '[object WeakSet]':
return 'weakset'
// Operation types: 3
case '[object RegExp]':
return 'regexp'
case '[object Proxy]':
return 'proxy'
case '[object Promise]':
return 'promise'
// Plain objects
case '[object Object]':
if (!returnConstructorBoolean)
return type
const _prototype = Object.getPrototypeOf(o)
if (!_prototype)
return type
const _constructor = _prototype.constructor
if (!_constructor)
return type
const matches = Function.prototype.toString.call(_constructor).match(/^functions*([^s(]+)/)
return matches ? matches[1] : 'anonymous'
default: return toString.split(' ')[1].slice(0, -1)
} }
null은 값의 부재를 나타내는 특별한 키워드입니다.
다음과 같은 가치로 생각하십시오.
- “foo”는 문자열입니다.
- true는 부울입니다.
- 1234는 숫자입니다.
- null은 정의되지 않았습니다.
undefined 속성은 변수에 null을 포함한 값이 할당되지 않았음을 나타냅니다.
var foo;
정의된 빈 변수는null
데이터형undefined
둘 다 값이 없는 변수의 값을 나타냅니다.
그리고. 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