Heim  >  Artikel  >  Web-Frontend  >  Ein genauerer Blick auf null in JavaScript

Ein genauerer Blick auf null in JavaScript

青灯夜游
青灯夜游nach vorne
2020-11-10 17:45:112939Durchsuche

Ein genauerer Blick auf null in JavaScript

Empfohlenes Tutorial: „JavaScript-Video-Tutorial

JavaScript hat zwei Typen: Grundtypen (string, booleans number , symbol) und Objekte. string, booleans number, symbol)和对象。

对象是复杂的数据结构,JS 中最简单的对象是普通对象:一组键和关联值:

let myObject = {
  name: '前端小智'
}

但是在某些情况下无法创建对象。 在这种情况下,JS 提供一个特殊值null —表示缺少对象。

let myObject = null

在本文中,我们将了解到有关JavaScript中null的所有知识:它的含义,如何检测它,nullundefined之间的区别以及为什么使用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 === null的计算结果为false

2.1 null 是虚值

nullfalse0''undefinedNaN都是虚值。如果在条件语句中遇到虚值,那么 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 nullobject是早期 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

nullundefined之间的主要区别是,null表示丢失的对象,而undefined表示未初始化的状态。

严格的相等运算符===区分nullundefined :

null === undefined // => false

而双等运算符==则认为nullundefined

Objekte sind komplexe Datenstrukturen, die einfachsten Objekte in JS sind gewöhnliche Objekte: eine Reihe von Schlüsseln und zugehörigen Werten: 🎜
null == undefined // => true
🎜Aber in einigen Fällen können Objekte nicht erstellt werden. In diesem Fall stellt JS einen speziellen Wert null bereit – der angibt, dass das Objekt fehlt. 🎜
function isEmpty(value) {
  return value == null;
}

isEmpty(42);                // => false
isEmpty({ prop: 'Value' }); // => false
isEmpty(null);              // => true
isEmpty(undefined);         // => true
🎜In diesem Artikel erfahren wir alles über null in JavaScript: was es bedeutet, wie man es erkennt, den Unterschied zwischen null und undefiniert und warum null erschwert die Codepflege. 🎜🎜1. Das Konzept von null🎜🎜Die JS-Spezifikation erläutert Informationen zu null: 🎜
Der Wert null bezieht sich auf ein Objekt, dessen Wert nicht festgelegt ist. Er ist einer der Grundtypen von JS und wird in booleschen Operationen als falsy betrachtet.
🎜Zum Beispiel erstellt die Funktion greetObject() ein Objekt, kann aber auch null zurückgeben, wenn das Objekt nicht erstellt werden kann: 🎜rrreee🎜Allerdings ohne Parameter Wenn die Funktion greetObject() aufgerufen wird, gibt die Funktion null zurück. Die Rückgabe von null ist sinnvoll, da der Parameter who keinen Wert hat. 🎜🎜2. So prüfen Sie auf Null🎜🎜Eine gute Möglichkeit, auf null-Werte zu prüfen ​​besteht darin, einen strikten Gleichheitsoperator zu verwenden: 🎜rrreee🎜missingObject === null ergibt true, da die Variable missingObject einen enthält null-Wert. 🎜🎜Wenn die Variable einen Wert ungleich Null enthält (z. B. ein Objekt), wird der Ausdruck existObject === null als false ausgewertet. 🎜🎜2.1 null ist ein virtueller Wert🎜🎜null und false, 0, '', <code>undefiniert und NaN sind allesamt virtuelle Werte. Wenn in einer bedingten Anweisung ein falscher Wert auftritt, erzwingt JS den falschen Wert auf false. 🎜rrreee🎜2.2 typeof null🎜🎜typeof value-Operator bestimmt den Typ des Werts. Beispielsweise ist „typeof 15“ 'number' und das Berechnungsergebnis von typeof {prop: 'Value' ist 'object'. 🎜🎜Interessanterweise, was ist das Ergebnis von type null🎜rrreee🎜Warum ist 'object', typoef null ist object code> war ein Fehler in frühen JS-Implementierungen. 🎜🎜Um den <code>typeof-Operator zu verwenden, um null-Werte zu erkennen. Wie bereits erwähnt, verwenden Sie den strikten Gleichheitsoperator myVar === null. 🎜🎜Wenn wir den Operator typeof verwenden möchten, um zu prüfen, ob eine Variable ein Objekt ist, müssen wir auch null-Werte ausschließen: 🎜rrreee🎜3. Die Falle von null🎜🎜null erscheint oft unerwartet, wenn wir denken, dass die Variable ein Objekt ist. Wenn Sie dann die Eigenschaft aus null extrahieren, gibt JS einen Fehler aus. 🎜🎜Verwenden Sie die Funktion greetObject() erneut und versuchen Sie, vom zurückgegebenen Objekt auf die Eigenschaft message zuzugreifen: 🎜rrreee🎜weil die Variable who ist eine Nullzeichenfolge, daher gibt die Funktion null zurück. Beim Zugriff auf die Eigenschaft message von null wird ein TypeError-Fehler ausgelöst. 🎜🎜Kann durch die Verwendung optionaler Verknüpfungen mit Null-Merging gehandhabt werdennull:🎜rrreee🎜Alternativen zu null 🎜🎜Wenn das Objekt nicht erstellt werden kann, besteht unser üblicher Ansatz darin, null zurückzugeben, dieser Ansatz weist jedoch Mängel auf. Eine Prüfung muss durchgeführt werden, wenn null im Ausführungsstapel erscheint. 🎜🎜Versuchen Sie, die Rückgabe von null zu vermeiden: 🎜
  • Gib das Standardobjekt anstelle von null
  • zurück.
  • Wirf einen Fehler aus, anstatt null
🎜Gehen Sie zurück zur Funktion greetObject(), die ursprünglich das Objekt greeting zurückgegeben hat. Wenn Parameter fehlen, können Sie ein Standardobjekt zurückgeben, anstatt null zurückzugeben: 🎜rrreee🎜 oder einen Fehler auszulösen: 🎜rrreee🎜 Mit diesen beiden Ansätzen kann die Verwendung von null vermieden werden. 🎜🎜5 null vs undefiniert span>🎜🎜undefiniert ist der Wert einer nicht initialisierten Variablen oder Objekteigenschaft, und undefiniert ist der Wert einer nicht initialisierten Variablen oder Objekteigenschaft. 🎜rrreee🎜Der Hauptunterschied zwischen null und undefiniert besteht darin, dass null ein fehlendes Objekt darstellt, während undefiniert einen nicht initialisierten Zustand aufweist. 🎜🎜Der strikte Gleichheitsoperator === unterscheidet zwischen null und undefiniert :🎜rrreee🎜Und der doppelte Gleichheitsoperator == betrachtet dann <code>null und undefiniert als gleich🎜
null == undefined // => true

我使用双等相等运算符检查变量是否为nullundefined:

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'

nullundefined在某种程度上是等价的,但null表示缺少对象,而undefined未初始化状态。

更多编程相关知识,请访问:编程视频课程!!

Das obige ist der detaillierte Inhalt vonEin genauerer Blick auf null in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen