jsの基本型と参照型
この記事で共有する内容は、js の基本型と参照型に関するもので、必要な友達は参照できます
基本型:数値、文字列、ブール、Null、未定義。
参照型: オブジェクト、配列、日付、RegExp、関数
参考: http://www.ruanyifeng.com/blog/2014/03/undefine-vs-null.html
1. JavaScript では、変数を未定義または null に代入します。正直言って、ほとんど違いはありません。
var a=null; var b=undefined;
2. if ステートメントでは、unknown と null は自動的に false に変換され、等価演算子はそれらが等しいことを直接報告します。 if (!undefined)
console.log('undefined is false');// undefined is falseif (!null)
console.log('null is false');// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong>
</strong></span></span>
未定義と null の意味と使い方は似ているのに、なぜこのような値を 2 つ同時に設定する必要があるのでしょうか?これは理由もなく JavaScript の複雑さを増し、初心者を悩ませませんか? Google が開発した JavaScript 言語の代替である Dart 言語では、null のみが存在し、未定義は存在しないと明確に規定されています。
2.最近、新しい本「Speaking JavaScript」を読んでいたとき、この質問に対する答えを偶然発見しました。
結局のところ、これは JavaScript の歴史に関係しているようです。 JavaScript が 1995 年に誕生したとき、Java と同様に、当初は「何もない」ことを表す値として null が設定されるだけでした。 C言語の伝統に従って、nullは自動的に0に変換されるように設計されています。
Number(null)// 05 + null// 5
しかし、JavaScript の設計者であるブレンダン・アイヒ氏は、2 つの理由から、これでは十分ではないと感じています。
まず、nullはJavaと同じようにオブジェクトとして扱われます。ただし、JavaScript のデータ型は、プリミティブ型 (プリミティブ) と複合型 (コンプレックス) の 2 つのカテゴリに分類されます。ブレンダン アイヒ氏は、「なし」を表す値はオブジェクトではない方がよいと考えています。
第 2 に、JavaScript の初期バージョンにはエラー処理メカニズムが含まれておらず、データ型の不一致が発生すると、型が自動的に変換されるか、警告なしに失敗することがよくあります。 Brendan Aich は、null が自動的に 0 に変換されると、エラーを見つけるのが難しくなると感じています。
それで、ブレンダン・アイヒは別の未定義のものをデザインしました。
3. 初期設計JavaScript の初期バージョンは次のように区別されます。null は「なし」を表すオブジェクトであり、数値に変換すると 0 になります。未定義は「なし」を表すプリミティブ値であり、数値に変換するとNaNになります。
Number(undefined)// NaN5 + undefined// NaN
しかし、上記の区別は実際には不可能であることがすぐに判明しました。現在、null と unknown は基本的に同義ですが、いくつかの微妙な違いがあります。
null は「オブジェクトがない」ことを意味します。つまり、そこに値があってはなりません。一般的な使用法は次のとおりです:
(1) 関数のパラメーターとして、関数のパラメーターがオブジェクトではないことを示します。 (2) は、オブジェクト プロトタイプ チェーンのエンドポイントとして機能します。
// null
未定義は「値が欠落している」という意味で、ここには値があるはずですが、まだ定義されていないことを意味します。一般的な使用法は次のとおりです:
(1) 変数が宣言されていても値が割り当てられていない場合、その変数は未定義と等しくなります。
(2) 関数呼び出し時に、提供されるべきパラメータが提供されず、パラメータが未定義に等しい。
var i; i // undefinedfunction f(x){console.log(x)} f() // undefinedvar o = new Object(); o.p // undefinedvar x = f(); x // undefined
Object は参照型ですか?
Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。
1. 基本型変数はスタック領域に格納されます(スタック領域とはメモリ内のスタックメモリを指します)
その格納構造は次のようになります:スタック領域には変数識別子が含まれますおよび 変数の値。
2.正確には、参照型の格納にはメモリのスタック領域とヒープ領域が必要です(ヒープ領域とはメモリ内のヒープメモリのことを指します) スタック領域のメモリには変数識別子とオブジェクトへのポインタが格納されます。
ヒープメモリ内のオブジェクトのアドレスとも言えます。以下のオブジェクトがあるとします: var person1 = {name:'jozo'};var person2 = {name:'xiaom'};var person3 = {name:'xiaoq'};
jsの基本型と参照型
基本タイプ: 数値、文字列、ブール値、Null、未定義。
参照タイプ: オブジェクト、配列、日付、RegExp、関数
1.在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。
var a=null; var b=undefined;
2.undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。
if (!undefined) console.log('undefined is false');// undefined is falseif (!null) console.log('null is false');// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong> </strong></span></span>
上面代码说明,两者的行为是何等相似!
既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!
二、
最近,我在读新书《Speaking JavaScript》时,意外发现了这个问题的答案!
原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。
根据C语言的传统,null被设计成可以自动转为0。
Number(null)// 05 + null// 5
但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。
首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示”无”的值最好不是对象。
其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。
因此,Brendan Eich又设计了一个undefined。
三、最初设计
JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
Number(undefined)// NaN5 + undefined// NaN
四、目前的用法
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。
null表示”没有对象”,即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
var i; i // undefinedfunction f(x){console.log(x)} f() // undefinedvar o = new Object(); o.p // undefinedvar x = f(); x // undefined
Object是引用类型嘛?
Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。
引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
1.基本类型的变量是存放在栈区的(栈区指内存里的栈内存)
那么它的存储结构如下图:
栈区包括了 变量的标识符和变量的值。
2.
javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,
也可以说是该对象在堆内存的地址。
假如有以下几个对象:
var person1 = {name:'jozo'};var person2 = {name:'xiaom'};var person3 = {name:'xiaoq'};
则这三个对象的在内存中保存的情况如下图:
相关推荐:
以上がjsの基本型と参照型の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

C++ の参照とポインターはどちらも関数パラメーターを渡す方法ですが、違いがあります。リファレンスは変数のエイリアスです。リファレンスを変更すると元の変数が変更され、ポインタには変数のアドレスが格納されます。ポインタ値を変更しても元の変数は変更されません。参照またはポインターの使用を選択する場合は、元の変数を変更する必要があるかどうか、NULL 値を渡す必要があるかどうか、パフォーマンスに関する考慮事項などの要素を考慮する必要があります。

ショートビデオプラットフォームの人気に伴い、ビデオマトリックスアカウントマーケティングが新たなマーケティング手法となっています。企業や個人は、さまざまなプラットフォームで複数のアカウントを作成および管理することで、ブランドのプロモーション、ファンの増加、製品の販売などの目標を達成できます。この記事では、ビデオ マトリックス アカウントの効果的な使用方法について説明し、さまざまな種類のビデオ マトリックス アカウントを紹介します。 1. ビデオ マトリックス アカウントを作成するにはどうすればよいですか?優れたビデオ マトリックス アカウントを作成するには、次の手順に従う必要があります。 まず、ブランド コミュニケーション、ファンの増加、製品の販売など、ビデオ マトリックス アカウントの目標を明確にする必要があります。明確な目標を持つことは、それに応じた戦略を立てるのに役立ちます。 2. プラットフォームの選択: 対象視聴者に基づいて、適切なショートビデオ プラットフォームを選択します。現在主流のショートビデオプラットフォームには、Douyin、Kuaishou、Huoshan Videoなどが含まれます。

ポインターと参照を使用すると、C++ でのメモリ使用量を最適化できます。 ポインター: 他の変数のアドレスを格納し、別の変数を指すことができるため、メモリが節約されますが、ワイルド ポインターが生成される可能性があります。参考: 別の変数にエイリアスされ、常に同じ変数を指し、ワイルド ポインターを生成せず、関数パラメーターに適しています。メモリ使用量を最適化すると、不必要なコピーを回避し、メモリ割り当てを削減し、スペースを節約することにより、コードの効率とパフォーマンスを向上させることができます。
