추천 튜토리얼: "JavaScript 비디오 튜토리얼"
JavaScript에는 2가지 유형이 있습니다: 기본 유형(string
, booleans
number
, 기호
) 및 개체. string
, booleans
number
, symbol
)和对象。
对象是复杂的数据结构,JS 中最简单的对象是普通对象:一组键和关联值:
let myObject = { name: '前端小智' }
但是在某些情况下无法创建对象。 在这种情况下,JS 提供一个特殊值null
—表示缺少对象。
let myObject = null
在本文中,我们将了解到有关JavaScript中null的所有知识:它的含义,如何检测它,null
与undefined
之间的区别以及为什么使用null
造成代码维护困难。
1. null的概念
JS 规范说明了有关null
的信息:
值null
特指对象的值未设置,它是 JS 基本类型 之一,在布尔运算中被认为是falsy
。
例如,函数greetObject()
创建对象,但是在无法创建对象时也可以返回null
:
function greetObject(who) { if (!who) { return null; } return { message: `Hello, ${who}!` }; } greetObject('Eric'); // => { message: 'Hello, Eric!' } greetObject(); // => null
但是,在不带参数的情况下调用函数greetObject()
时,该函数返回null
。 返回null
是合理的,因为who
参数没有值。
2. 如何检查null
检查null
值的好方法是使用严格相等运算符:
const missingObject = null; const existingObject = { message: 'Hello!' }; missingObject === null; // => true existingObject === null; // => false
missingObject === null
的结果为true
,因为missingObject
变量包含一个null
值。
如果变量包含非空值(例如对象),则表达式existObject === nul
l的计算结果为false
。
2.1 null 是虚值
null
与false
、0
、''
、undefined
、NaN
都是虚值。如果在条件语句中遇到虚值,那么 JS 将把虚值强制为false
。
Boolean(null); // => false if (null) { console.log('null is truthy') } else { console.log('null is falsy') }
2.2 typeof null
typeof value
运算符确定值的类型。 例如,typeof 15是'number'
,typeof {prop:'Value'}
的计算结果是'object'
。
有趣的是,type null
的结果是什么
typeof null; // => 'object'
为什么是'object'
,typoef null
为object
是早期 JS 实现中的一个错误。
要使用typeof
运算符检测null
值。 如前所述,使用严格等于运算符myVar === null
。
如果我们想使用typeof
运算符检查变量是否是对象,还需要排除null
值:
function isObject(object) { return typeof object === 'object' && object !== null; } isObject({ prop: 'Value' }); // => true isObject(15); // => false isObject(null); // => false
3. null 的陷阱
null
经常会在我们认为该变量是对象的情况下意外出现。然后,如果从null
中提取属性,JS 会抛出一个错误。
再次使用greetObject()
函数,并尝试从返回的对象访问message
属性:
let who = ''; greetObject(who).message; // throws "TypeError: greetObject() is null"
因为who
变量是一个空字符串,所以该函数返回null
。 从null
访问message
属性时,将引发TypeError
错误。
可以通过使用带有空值合并的可选链接来处理null
:
let who = '' greetObject(who)?.message ?? 'Hello, Stranger!' // => 'Hello, Stranger!'
4. null 的替代方法
当无法构造对象时,我们通常的做法是返回null
,但是这种做法有缺点。在执行堆栈中出现null
时,刚必须进行检查。
尝试避免返回 null
的做法:
null
null
回到开始返回greeting
对象的greetObject()
函数。缺少参数时,可以返回一个默认对象,而不是返回null
:
function greetObject(who) { if (!who) { who = 'Stranger'; } return { message: `Hello, ${who}!` }; } greetObject('Eric'); // => { message: 'Hello, Eric!' } greetObject(); // => { message: 'Hello, Stranger!' }
或者抛出一个错误:
function greetObject(who) { if (!who) { throw new Error('"who" argument is missing'); } return { message: `Hello, ${who}!` }; } greetObject('Eric'); // => { message: 'Hello, Eric!' } greetObject(); // => throws an error
这两种做法可以避免使用 null
。
5. null
vs undefined
undefined
是未初始化的变量或对象属性的值,undefined
是未初始化的变量或对象属性的值。
let myVariable; myVariable; // => undefined
null
和undefined
之间的主要区别是,null
表示丢失的对象,而undefined
表示未初始化的状态。
严格的相等运算符===
区分null
和undefined
:
null === undefined // => false
而双等运算符==
则认为null
和undefined
null == undefined // => true
null
을 제공합니다. 🎜function isEmpty(value) { return value == null; } isEmpty(42); // => false isEmpty({ prop: 'Value' }); // => false isEmpty(null); // => true isEmpty(undefined); // => true
null
과 undefine
의 차이점, null
은 코드 유지 관리를 어렵게 만듭니다. 🎜🎜1. null의 개념🎜🎜JS 사양에서는 null
에 대한 정보를 설명합니다. 🎜 🎜예를 들어null
값은 값이 설정되지 않은 개체를 참조하며 JS의 기본 유형 중 하나이며 부울 연산에서falsy
로 간주됩니다.
greetObject()
함수는 객체를 생성하지만 객체를 생성할 수 없는 경우 null
을 반환할 수도 있습니다. 🎜rrreee🎜그러나 매개변수 greetObject()
함수가 호출되면 함수는 null
을 반환합니다. who
매개변수에 값이 없으므로 null
을 반환하는 것이 합리적입니다. 🎜🎜2. null을 확인하는 방법🎜🎜null
값을 확인하는 좋은 방법 엄격한 항등 연산자를 사용하는 것입니다: 🎜rrreee🎜missingObject === null
은 missingObject
변수에 가 포함되어 있으므로 <code>true
가 됩니다. null 값입니다. 🎜🎜변수에 null이 아닌 값(예: 객체)이 포함된 경우 existObject === nul
l 표현식은 false
로 평가됩니다. 🎜🎜2.1 null은 가상 값입니다🎜🎜null
및 false
, 0
, '', <code>undefine
및 NaN
은 모두 가상 값입니다. 조건문에서 false 값이 발견되면 JS는 false 값을 false
로 강제 설정합니다. 🎜rrreee🎜2.2 null 유형🎜🎜값 유형
연산자는 값 유형을 결정합니다. 예를 들어 typeof 15는 'number'
이고, typeof {prop: 'Value'}
의 계산 결과는 'object'
입니다. 🎜🎜흥미롭게도 type null
의 결과는 무엇입니까🎜rrreee🎜'object'
는 왜, typoef null
는 object
입니까? code>는 초기 JS 구현의 버그였습니다. 🎜🎜 typeof
연산자를 사용하여 null
값을 감지합니다. 앞에서 언급한 것처럼 엄격한 항등 연산자 myVar === null
을 사용하세요. 🎜🎜 typeof
연산자를 사용하여 변수가 객체인지 확인하려면 null
값도 제외해야 합니다. 🎜rrreee🎜3. null의 트랩🎜🎜null
은 변수가 객체라고 생각할 때 예기치 않게 나타나는 경우가 많습니다. 그런 다음 null
에서 속성을 추출하면 JS에서 오류가 발생합니다. 🎜🎜 greetObject()
함수를 다시 사용하고 반환된 개체에서 message
속성에 액세스해 보세요. 🎜rrreee🎜 who
변수는 다음과 같습니다. null 문자열이므로 함수는 null
을 반환합니다. null
에서 message
속성에 액세스하면 TypeError
오류가 발생합니다. 🎜🎜null 병합null
을 통한 선택적 연결을 사용하여 처리 가능:🎜rrreee🎜null 대체 🎜🎜객체를 생성할 수 없는 경우 일반적인 접근 방식은 null
을 반환하는 것이지만 이 접근 방식에는 단점이 있습니다. 실행 스택에 null
이 나타나면 검사를 수행해야 합니다. 🎜🎜null
반환을 방지하세요. 🎜null
대신 기본 개체를 반환합니다.greeting
개체를 반환한 greetObject()
함수로 돌아갑니다. 매개변수가 누락된 경우 null
을 반환하는 대신 기본 개체를 반환할 수 있습니다. 🎜rrreee🎜 또는 오류 발생: 🎜rrreee🎜 이 두 가지 접근 방식을 사용하면 null
사용을 피할 수 있습니다. 🎜🎜5. null
및 정의되지 않음
span>🎜🎜undefine
은 초기화되지 않은 변수 또는 객체 속성의 값이고, undefine
은 초기화되지 않은 변수 또는 객체 속성의 값입니다. 🎜rrreee🎜 null
과 undefine
의 주요 차이점은 null
은 누락된 객체를 나타내고 undefine
은 초기화되지 않음을 나타낸다는 것입니다. 상태. 🎜🎜엄격 항등 연산자 ===
는 null
과 정의되지 않음
을 구별합니다.🎜rrreee🎜그리고 이중 항등 연산자 ==는 <code>null
과 undefine
을 동일한 것으로 간주합니다🎜null == undefined // => true
我使用双等相等运算符检查变量是否为null
或undefined
:
function isEmpty(value) { return value == null; } isEmpty(42); // => false isEmpty({ prop: 'Value' }); // => false isEmpty(null); // => true isEmpty(undefined); // => true
6. 总结
null
是JavaScript中的一个特殊值,表示丢失的对象,严格相等运算符确定变量是否为空:variable === null
。
typoef
运算符对于确定变量的类型(number
, string
, boolean
)很有用。 但是,如果为null
,则typeof会产生误导:typeof null
的值为'object'
。
null
和undefined
在某种程度上是等价的,但null
表示缺少对象,而undefined
未初始化状态。
更多编程相关知识,请访问:编程视频课程!!
위 내용은 JavaScript의 null 자세히 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!