検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptで空白を表すunknownとnullの違いと使い方

JavaScriptで空白を表すunknownとnullの違いと使い方

Feb 28, 2017 pm 02:50 PM
javascriptnullundefined

私が初めて JavaScript を学び始めたとき

私は、未定義は非常に新しいものだと感じました
他の言語にはそれがなかったので
、それは未定義があるだけでなく、実際には空を意味する null があったのです
多くの人がそう信じています学生は unknown と null の違いがわかりません
今日は、JavaScript で空のスペースを表す unknown と null の違いをまとめます

同様のものです

unknown と null は JavaScript の基本型であり、それぞれの型値は 1 つだけです
、つまり、型と同じ名前を持つ未定義と null です
通常、これら 2 つの値の間に実際には違いはありません

var foo = undefined;
var foo = null;

そして標準にもそのような規定があります

console.log(null == undefined) // true

(ただし、null != = 未定義)null !== undefined

转化为布尔值都是false

if(!undefined){
    console.log(1);//1}if(!null){
    console.log(1);//1}

区别

但其实,有区别
先来看看这几行代码

console.log(undefined in window);// trueconsole.log(null in window);// false

这是其中不同的一点
null是JavaScript的关键字
而undefined是window上的一个特殊的的属性(和NaN、Infinity一样)
虽然ES5undefined变为只读属性,但是仍然有不合理的地方,比如说这样

function fn(){
    var undefined = 1;// 注意:前方高能
    console.log(undefined);// 1}
fn();

看吧,因为undefined不是关键字,所以我们可以在局部变量中声明undefined(简直无语)
即便你是严格模式

function fn(){    "use strict";    var undefined = 1;
    console.log(undefined);// 1}
fn();

我们可千万不要写这么令人发指的代码

在进行数学运算时也存在差别

console.log(undefined + 1); //NaNconsole.log(null + 1); //1

undefined进行任何运算会转换为NaN
而null转换为0

历史

JavaScript有两种表示空的值是有道理的
js之父Brendan Eich最开始设计得时候像Java一样,只有null
但是他考虑到js有基本值和引用值两种
用一个对象来表示空怪怪的typeof null === 'object',而且null转化为数字0导致很多bug不好找
于是他又设计了undefined

用法

按照js之父的设计
undefined表示缺少值
null表示为空对象
但是现在我们并不是这样使用的

可以这样来理解
undefined表示变量没有初始化,没有值
null表示变量初始化了,值为“空值”

undefined是js用的,而null是给我们用的
这句话不知道大家能不能理解
比如在这些情况

  • var a; 声明变量,引擎会在预编译给它赋上默认值undefined

  • function a(){} 声明函数,没有返回值默认返回undefined

  • var obj = {};obj.a; 访问不存在的对象属性,默认值undefined

  • var a = function(a){};a(); 没有指定实参,默认参数值undefined

  • ……

这都是系统给我们默认的undefined,也就是js使用的
而我们要用的是null
比如说

  • var obj = Object.create(null); 创建空对象

  • demo.onclick = null;

    ブール値に変換するのは false
  • rrreee
  • 違い

    しかし、実際には違いがあります
  • 最初にこれらのコード行を見てみましょう
rrreee

これが違いです

null はJavaScript のキーワード

かつ、unknown は window 上の特殊な属性です (NaN や Infinity と同じ)

ES5 の unknown は読み取り専用属性になりますが、このような不合理な点はまだあります

rrreee

見てください、unknown は aN ではないからですキーワードを指定すると、ローカル変数で未定義を宣言できます(単純にSpeechless)
    厳密モードであっても
  • rrreee

    そのようなとんでもないコードを書いてはいけません

  • 数学的な演算を行う場合にも違いがあります
  • rrreee

    unknownはに変換されますあらゆる操作に対して NaN が使用されます

    、null は 0 に変換されます
  • 歴史

    JavaScript には null を表す 2 種類の値があることは理にかなっています
  • js の父であるブレンダン・アイヒは、もともと Java のようにそれを設計しましたが、null のみです
  • しかし彼は、js には基本値と参照値の 2 種類があると考えました

    オブジェクトは奇妙な typeof null === 'object' を表し、null は数値 0 に変換されます。見つけるのが難しい多くのバグ

    そこで彼は未定義を設計しました
  • 使用法

    jsによると、父親の設計
  • 未定義は値の欠如を意味します
  • nullは空のオブジェクトを意味します

    しかし、私たちは今このようにそれを使用しません

  • このように理解できます
  • 未定義は変数が初期化されておらず、値がないことを意味します

    nullは変数が初期化されていて値が「空」であることを意味します

  • 未定義はjsで使用され、nullはusで使用されます
Iこの文を理解できるか分かりません

例えば、こんな状況です


var a;で変数を宣言すると、エンジンにはデフォルト値unknownが代入されます

🎜🎜🎜プリコンパイル中に関数 a(){} を実行します。戻り値がない場合は、デフォルトで未定義が返されます🎜🎜🎜🎜var obj = {}; にアクセスします。存在しないオブジェクトのプロパティ、デフォルト値は未定義です🎜🎜🎜🎜var a = function(a){};a(); 実際のパラメータは指定されていません、デフォルトのパラメータ値は未定義です🎜🎜🎜🎜 ......🎜🎜🎜🎜これはシステムによって与えられるデフォルトの未定義であり、js が使用するものです🎜そして、使用したいのは null です🎜たとえば🎜🎜🎜🎜var obj = Object .create(null); 空のオブジェクトを作成します🎜🎜🎜🎜demo.onclick = null; イベントのバインドを解除します🎜🎜🎜🎜……🎜🎜🎜🎜 null を使用することは間違いなく正しいことです。場合によっては、ブラウザのガベージ コレクションも容易になります。値を割り当てる; null は識別子ではなく、値を割り当てることはできません🎜🎜🎜🎜未定義 == = null –> false🎜🎜🎜 NaN、null は数値に変換され 0 になります🎜🎜 🎜🎜未定義とブール値に変換された null は両方とも false🎜🎜🎜🎜未定義は値がないことを意味し、null は空の値を意味します🎜🎜🎜🎜空を意味するのではなく、null を使用する必要がありますunknown🎜🎜🎜🎜 undefine を再定義しないでください🎜🎜🎜 🎜 上記は、JavaScript における unknown と null の違いと使用法です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。 🎜🎜🎜🎜🎜
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター