JavaScript における null の包括的な分析

WBOY
リリース: 2022-09-13 19:47:00
転載
2887 人が閲覧しました

この記事では、javascript に関する関連知識を提供します。Null はプリミティブ型であり、意図的にオブジェクト値を含まないことを意味します。JavaScript の null についてすべてを見てみましょう: それは何を意味しますか、それを検出する方法、null と未定義の違い、null を多用するとコードのメンテナンスが困難になる理由などについて説明します。皆さんの参考になれば幸いです。

JavaScript における null の包括的な分析

[関連する推奨事項: JavaScript ビデオ チュートリアルWeb フロントエンド]

JavaScript 2 つのタイプがあります: プリミティブタイプ (文字列、ブール値、数値、シンボル) とオブジェクト

オブジェクトは複雑なデータ構造です。最も単純な JavaScript オブジェクトは、キーと関連する値のコレクションである通常のオブジェクトです。

let myObject = {
  name: 'Eric Cartman'
};
ログイン後にコピー

しかし、多くの場合、オブジェクトを作成することはできません。この場合、JavaScript は特別な値 null を提供します - オブジェクトが欠落していることを示します

let myObject = null;
ログイン後にコピー

この記事では、## について学びます ## についてのすべて#JavaScript の #null: その意味、検出方法、nullunnamed の違い、# が頻繁に使用される理由 ##null コードのメンテナンスなどが困難になります。1. null

JavaScript

の概念は仕様書に記載されています

null null は、意図的にオブジェクト値を含まないプリミティブ型です。

null

(変数に割り当てられている、または関数によって返された) が表示される場合は、その場所にあります。オブジェクトであるはずですが、何らかの理由でオブジェクトが作成されませんでした

たとえば、関数greetObject()

はオブジェクトを作成しますが、

nullを返すこともあります。 ## オブジェクトを作成できない場合 #:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">function greetObject(who) { if (!who) { return null; } return { message: `Hello, ${who}!` }; } greetObject(&amp;#39;Eric&amp;#39;); // =&gt; { message: &amp;#39;Hello, Eric!&amp;#39; } greetObject(); // =&gt; null</pre><div class="contentsignin">ログイン後にコピー</div></div>文字列パラメーターが上記の関数に渡されると、期待どおり、関数は object{ メッセージ: 'Hello, Eric!' を返します。 }

ただし、関数にパラメータが渡されない場合、関数は null を返します。

who

パラメータに値がないため、null を返すのが妥当です。その結果、greeting オブジェクトを作成できなくなります。1.1 A null# のより適切なメタファー ##null

のより適切なメタファーを考えてみましょう。変数をボックスとして考えることができます。変数にオブジェクトを入れることができるのと同じように、ボックスにはティーポットなどのアイテムを入れることができます。しかし、箱を受け取って開けてみると、何もありません! 誰かが間違いを犯して、空の箱を渡されました。ボックスにはコンテンツが含まれていません。つまり、

null

2 が含まれています。null を検出する方法

Check

null OK この方法では、厳密な等価演算子

const missingObject = null;
const existingObject = { message: &#39;Hello!&#39; };

missingObject  === null; // => true
existingObject === null; // => false
ログイン後にコピー

missingObject === null

を使用します。

missingObject 変数に含まれるため、結果は true

になります。

null 値。変数にオブジェクトなどの null 以外の値が含まれている場合、式 existingObject === nullfalse2.1 null は false 値#と評価されます。 ##null および false, 0, "、

未定義

NaN

はすべて false の値です。条件文の場合、JavaScript はそれらを false<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">Boolean(null); // =&gt; false if (null) { console.log(&amp;#39;null is truthy&amp;#39;); } else { console.log(&amp;#39;null is falsy&amp;#39;); // logs &amp;#39;null is falsy&amp;#39; }</pre><div class="contentsignin">ログイン後にコピー</div></div>2.2 typeof nulltypeof value 型演算子で実行できます。値のタイプを決定します。たとえば、タイプ 15 は number

typeof { prop: 'Value' }

object

と同じです。 #興味深いはい、null 値の結果は何ですか typetypeof null; // => 'object' はどうでしょうかオブジェクトの種類がありません

object

と判断されますか? typoef null

object
として扱われることが判明しました。これは初期の

JavaScript# のバグです。 ## の実装です。

使用しないでください。

typeof 演算子は、null 値を検出します。前述したように、厳密等価演算子 myVar === null# を使用してください。 ##typeof を使用して変数がオブジェクトであるかどうかを確認するには、

null

状況 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">function isObject(object) { return typeof object === &amp;#39;object&amp;#39; &amp;&amp; object !== null; } isObject({ prop: &amp;#39;Value&amp;#39; }); // =&gt; true isObject(15); // =&gt; false isObject(null); // =&gt; false</pre><div class="contentsignin">ログイン後にコピー</div></div>3 を除外する必要があります。 nullnull のトラップは通常、オブジェクトを使用することが予想される状況で予期せず発生します。その後、

null

からプロパティを抽出しようとすると、JavaScript はエラーをスローします

greetObject()

関数を再度使用して、返されたオブジェクト

let who = &#39;&#39;;

greetObject(who).message; 
// throws "TypeError: greetObject() is null"
ログイン後にコピー
から

message プロパティにアクセスしてみます。 who 変数は空の文字列であるため、関数は null を返します。

null

から message プロパティにアクセスすると、 TypeError エラーがスローされます オプションの連鎖演算子を使用して

null

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">let who = &amp;#39;&amp;#39;; greetObject(who)?.message ?? &amp;#39;Hello, Stranger!&amp;#39;; // =&gt; &amp;#39;Hello, Stranger!&amp;#39;</pre><div class="contentsignin">ログイン後にコピー</div></div> を処理するか、次のセクションで説明する 2 つの代替方法を使用できます。<h2>4. null 的替代方案</h2><p>当你不能构造一个对象时,很容易返回 <code>null。但这种做法也有缺点

一旦 null 出现在执行堆栈中,你总是必须检查它

我们尽量避免返回 null

  • 返回默认对象而不是 null
  • 抛出错误而不是返回 null

让我们回忆一下 greetObject() 函数返回 greeting 对象

当缺少参数时,可以返回一个默认对象,而不是返回 null

function greetObject(who) {
  if (!who) {
    who = &#39;Stranger&#39;;
  }
  return { message: `Hello, ${who}!` };
}

greetObject(&#39;Eric&#39;); // => { message: &#39;Hello, Eric!&#39; }
greetObject();       // => { message: &#39;Hello, Stranger!&#39; }
ログイン後にコピー

或者抛出一个错误

function greetObject(who) {
  if (!who) {
    throw new Error(&#39;"who" argument is missing&#39;);
  }
  return { message: `Hello, ${who}!` };
}

greetObject(&#39;Eric&#39;); // => { message: &#39;Hello, Eric!&#39; }
greetObject();       // => throws an error
ログイン後にコピー

这些实践可以让你完全避免处理 null

5. null vs undefined

undefined 就是未初始化的变量或对象属性的值

例如,如果在声明变量时没有赋初值,那么访问该变量的结果为 undefined

let myVariable;

myVariable; // => undefined
ログイン後にコピー

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

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

null === undefined; // => false
ログイン後にコピー

而松散相等运算符 == 则认为 nullundefined 相等

null == undefined; // => true
ログイン後にコピー

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

function isEmpty(value) {
  return value == null;
}

isEmpty(42);                // => false
isEmpty({ prop: &#39;Value&#39; }); // => false
isEmpty(null);              // => true
isEmpty(undefined);         // => true
ログイン後にコピー

6. 总结

nullJavaScript 中的一个特殊值,表示丢失的对象

严格相等运算符判断变量是否为空: variable === null

typoef 操作符用于确定变量的类型(number, string, boolean)。但是,typeofnull 情况下会引起误解: typeof null 结果为 object

nullundefined 在某种程度上是等价的,但null 表示一个丢失的对象,而 undefined 表示未初始化状态

尽可能避免返回 null 或将变量设置为 null。因为这种做法会导致 null 值的扩展和需要对 null 的验证。相反,尝试使用具有默认属性的对象,或者甚至抛出错误会是更好的实践

你会使用什么方法来检查 null?

【相关推荐:javascript视频教程web前端

以上がJavaScript における null の包括的な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート