ホームページ ウェブフロントエンド jsチュートリアル JavaScript の未定義と null_javascript のスキルを私から学びましょう

JavaScript の未定義と null_javascript のスキルを私から学びましょう

May 16, 2016 pm 03:31 PM
javascript null undefined

JavaScript のプリミティブ データ型について議論するとき、ほとんどの人は文字列から数値、ブール値までの基本を知っています。これらのプリミティブ型は非常に単純で、常識のように動作します。ただし、この記事では、ユニークなプリミティブ データ型である Null と Unknown、およびそれらが非常に似ていながらも矛盾している理由に焦点を当てます。

1. null と未定義を理解する

JavaScript では、null は言語のリテラルおよびキーワードであり、認識できないオブジェクト値を表すために使用されます。つまり、これは「値がない」という意味で使用されますが、期待値をいつ取得するかを決めることができます。

似ていますが、未定義は実際には値が存在しないことを表し、何かが欠落していることを意味します。どちらも完全に不変であり、プロパティやメソッドがなく、プロパティに値を割り当てることはできません。実際、null または未定義のプロパティにアクセスまたは定義しようとすると、TypeError が発生します。

値なしで表されるブール値は false です。これは、if ステートメントなどの条件付きコンテキストで false と評価されることを意味します。等価演算子 (==) を使用して、これら 2 つの値を他の false 値と比較します。それらは、それ自体を除いて等しくありません:

null == 0; // false 
undefined == ""; // false 
null == false; // false 
undefined == false; // false 
null == undefined; // true 
ログイン後にコピー

ただし、その他の類似点として、null と unknown は同等ではありません。それぞれは独自の型の一意のメンバーであり、unknown は Unknown 型で、null は Object 型です。以下に示すように、型と値の両方が等しい必要がある等価演算子 (===) を使用して、これら 2 つの値を比較します。

null === undefined; //false
typeof null; //"object"
typeof undefined; //"undefined"
ログイン後にコピー
上記の説明: null これはオブジェクトですが、空です。 null は JavaScript の予約キーワードです。

さらに、null が数値演算に関与する場合、その値は自動的に 0 に変換されます。 したがって、次の式は計算後に正しい値を取得します。

123 + null;   //123 
123 * null;   //0 
ログイン後にコピー
未定義はグローバル オブジェクト (ウィンドウ) の特別なプロパティであり、その値は未定義です。ただし、 typeof unknown は 'unknown' を返します。
未定義には特別な意味がありますが、実際にはプロパティであり、グローバル オブジェクト (ウィンドウ) のプロパティです。以下のコードを見てください:


alert('undefined' in window);//输出:true 
var anObj = {}; 
alert('undefined' in anObj); //输出:false 
ログイン後にコピー
このことから、unknown は window オブジェクトのプロパティですが、anObj オブジェクトのプロパティではないことがわかります。


注:

未定義は特別な意味を持つ属性ですが、JavaScript では予約されたキーワードではありません。未定義が数値計算に参加する場合、結果は NaN でなければなりません。 ちなみに、NaN もグローバル オブジェクト (ウィンドウ) の特殊なプロパティであり、Infinity も同様です。これらの特別な属性はいずれも JavaScript の予約キーワードではありません。
  • 値またはオブジェクトが null であることを確認する場合は、「===」を使用して判断する必要があります。「==」だけを使用すると、それが null であるか未定義であるかを判断できません。
2. 未定義の状況が発生する

未定義の値を含むコードを生成する方法はたくさんあります。通常、存在しない値にアクセスしようとしたときに発生します。この場合、JavaScript のような動的で型付けが弱い言語では、エラーが発生するのではなく、デフォルトで未定義の値が返されます。

1. 初期値なしで宣言された変数はデフォルト値が未定義になります:

var foo; // 默认值为 undefined 
ログイン後にコピー

2. 存在しないオブジェクト プロパティまたは配列項目にアクセスしようとすると、未定義の値が返されます:

var array = [1, 2, 3]; 
var foo = array.foo; // foo 属性不存在, 返回 undefined 
var item = array[5]; // 数组中没有索引为5的项,返回 undefined 
ログイン後にコピー

3. 関数の return ステートメントが省略されている場合、または return ステートメントがパラメーターを受け取らず、未定義を返す場合:

var value = (function(){

})(); // 返回 undefined 
var value1 = (function(){
  return;
})(); // 返回 undefined 

ログイン後にコピー

4. 関数を呼び出すときに、提供されるべきパラメータが提供されず、パラメータが未定義に等しい

function f(x){
  console.log(x)
}
f(); // undefined
ログイン後にコピー
最後に、未定義は、(null キーワードとは異なり) 未定義の値に初期化された事前定義されたグローバル変数です。

ECMAScript 5中,这个变量是只读的,以前并非如此。

三、null的用例

null的用例是使他与众不同的主要方面,因为不像undefined,null被认为是更有用。这正是为什么typeof操作符作用于null值 时返回“object”。最初的理由是,现在仍然是,通常用作一个空引用一个空对象的预期,就像一个占位符。typeof的这种行为已经被确认为一个错 误,虽然提出了修正,出于后兼容的目的,这一点已经保持不变。

一般来说,如果你需要给一个变量或属性指定一个不变值,将它传递给一个函数,或者从一个函数返回null,null几乎总是最好的选择。简而言之,JavaScript使用undefined并且程序员应该使用null。

null的另一个可行的用例,也被认为是良好的实践是一个显式指定变量为无效(object= null)当一个引用不再是必需的。通过分配null值,有效地清除引用,并假设对象没有引用其他代码,指定垃圾收集,确保回收内存。

四、提高undefined性能

当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。 同样,当我们定义一个变量但未赋予其初始值,例如:

var aValue; 
ログイン後にコピー

这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用, 于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。

由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:

function anyFunc() { 
  var undefined; 
  //自定义局部undefined变量 
  if(x == undefined) 
  //作用域上的引用比较 
  while(y != undefined) 
  //作用域上的引用比较 
}; 
ログイン後にコピー

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。

这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

以上就是本文的全部内容,希望对大家的学习有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。どのように対処すればよいですか? TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。どのように対処すればよいですか? Nov 25, 2023 pm 12:14 PM

Vue.jsで開発しているときに「TypeError: Cannotreadproperty'$XXX'ofundefine」というエラーメッセージが頻繁に表示される場合、どう対処すればよいでしょうか。この記事では、このエラーの原因と修正方法について説明します。この問題の原因は、Vue.js を使用するときに、これをよく使用して次のような Vue コンポーネントのメソッドを呼び出すことです。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

See all articles