この記事では、JavaScript のデータ型とは何なのかについて説明します。 js データ型の紹介には一定の参考価値があります。必要な方は参考にしていただければ幸いです。
1. JavaScript には何種類の値がありますか?
JavaScript には、基本データ型と参照データ型の 2 つのデータ型があります。基本的なデータ型には、未定義、Null、ブール、数値、文字列、記号が含まれます。 (ES6 で新たに追加、一意の値を表す) および参照データ型は総称して Object オブジェクトと呼ばれ、主にオブジェクト、配列、関数が含まれます。次に、両者の特徴をそれぞれ見ていきましょう。
2. 基本データ型
1. 値は不変です
var name = 'java'; name.toUpperCase(); // 输出 'JAVA' console.log(name); // 输出 'java'
基本データ型の値は不変であると結論付けることができます。 's
2. スタック領域に格納される
元のデータ型は、小さなスペースを占有し、固定サイズになることがよくあります。データは使用されるため、スタックに格納されます。
3. 値の比較
var a = 1; var b = true; console.log(a == b); // true console.log(a === b); // false
==:値の比較のみを行い、データ型の変換を行います。
===: 値を比較するだけでなく、データ型も比較します。
3. 参照データ型
1. 値は変数です
var a={age:20}; a.age=21; console.log(a.age)//21
上記のコードは、参照型がプロパティとメソッドを持つことができることを示しています。は動的に変更できます。
2. スタックメモリとヒープメモリに同時に保存
参照データ型は、占有容量が大きくサイズが固定されていないヒープ(heap)に保存されます。スタックに格納されると、プログラムのパフォーマンスに影響します。参照データ型は、ヒープ内のエンティティの開始アドレスを指すポインターをスタックに格納します。インタプリタが参照値を探すとき、まずスタック上のアドレスを取得し、次にヒープからエンティティを取得します。
var a={age:20}; var b=a; b.age=21; console.log(a.age==b.age)//true基本型と参照型はメモリ内の異なる場所に格納されると述べましたが、参照型はヒープに格納されるオブジェクトであると同時に、ポインタがスタックに格納されます。ポインタはオブジェクト内のエンティティの開始位置を指します。変数 a が初期化されると、ポインタ a はオブジェクト {age:20} のアドレスを指します。a が b に代入されると、b はオブジェクト {age:20} のアドレスを指します。これら 2 つの変数は同じオブジェクトを指します。したがって、これらの変数のいずれかを変更すると、相互に影響します。
#現時点では、変数が元のオブジェクトを参照している場合、他の変数には影響しません。
var a={age:20}; var b=a; a = 1; b // {age:20}
上記のコードでは、a と b は同じオブジェクトを指し、その後 a の値は 1 に変わります。これは b には影響せず、b は引き続き元のオブジェクトを指します。
4. データ型を確認します。1.typeof
typeof は、データ型を表す文字列を返します。数値、ブール値が含まれます。 , データ型は文字列、シンボル、オブジェクト、未定義、関数の7種類ありますが、null、配列などは判定できません。
typeof Symbol(); // symbol 有效 typeof ''; // string 有效 typeof 1; // number 有效 typeof true; //boolean 有效 typeof undefined; //undefined 有效 typeof new Function(); // function 有效 typeof null; //object 无效 typeof [] ; //object 无效 typeof new Date(); //object 无效 typeof new RegExp(); //object 无效
この場合、配列やオブジェクトはオブジェクトを返す必要があります。判断するには、instanceof を使用します
2.instanceof
instanceof は、A が B のインスタンスであるかどうかを判断するために使用されます。式は次のとおりです: Ainstanceof B。A が B のインスタンスの場合、戻り値true、それ以外の場合は false を返します。 instanceof 演算子は、オブジェクトのプロトタイプ チェーンにコンストラクターのプロトタイプ プロパティがあるかどうかをテストするために使用されます。
[] instanceof Array; //true {} instanceof Object;//true new Date() instanceof Date;//true new RegExp() instanceof RegExp//true
配列の型判定に関しては、ES6 を使用して
Array.isArray()Array.isArray([]); // true
instanceof を追加することもできます。 3 つの大きな欠点:
基本的なデータ型に関しては、リテラルによって作成された結果とインスタンスによって作成された結果の間には特定の違いがあります。
console.log(1 instanceof Number)//false console.log(new Number(1) instanceof Number)//true
厳密に言えば、インスタンスによって作成された結果のみが標準のオブジェクト データ型値です。標準の Number クラスのインスタンス。リテラル メソッドによって作成された結果は、厳密なインスタンスではなく基本的なデータ型の値ですが、JS の緩やかな特性により、Number.prototype で提供されるメソッドを使用できます。
それが現在のインスタンスのプロトタイプ チェーン上にある限り、それを使用して検出される結果はすべて true です。クラスのプロトタイプ継承では、検出される最終結果は正確ではない可能性があります。
var arr = [1, 2, 3]; console.log(arr instanceof Array) // true console.log(arr instanceof Object); // true function fn(){} console.log(fn instanceof Function)// true console.log(fn instanceof Object)// true
ヌルと未定義を検出できません
特別なデータ型のヌルと未定義の場合、それらのクラスはヌルと未定義ですが、ブラウザはこれら 2 つのクラスを保護し、許可しません。外部訪問。
3. 厳密な演算子 ===
只能用于判断null和undefined,因为这两种类型的值都是唯一的。
var a = null typeof a // "object" a === null // true
undefined 还可以用typeof来判断
var b = undefined; typeof b === "undefined" // true b === undefined // true
4.constructor
constructor作用和instanceof非常相似。但constructor检测 Object与instanceof不一样,还可以处理基本数据类型的检测。
var aa=[1,2]; console.log(aa.constructor===Array);//true console.log(aa.constructor===RegExp);//false console.log((1).constructor===Number);//true var reg=/^$/; console.log(reg.constructor===RegExp);//true console.log(reg.constructor===Object);//false
constructor 两大弊端:
null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。
函数的 constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的
function Fn(){} Fn.prototype = new Array() var f = new Fn console.log(f.constructor)//Array
5.Object.prototype.toString.call()
Object.prototype.toString.call() 最准确最常用的方式。首先获取Object原型上的toString方法,让方法执行,让toString方法中的this指向第一个参数的值。
关于toString重要补充说明:
本意是转换为字符串,但是某些toString方法不仅仅是转换为字符串
对于Number、String,Boolean,Array,RegExp、Date、Function原型上的toString方法都是把当前的数据类型转换为字符串的类型(它们的作用仅仅是用来转换为字符串的)
Object上的toString并不是用来转换为字符串的。
Object上的toString它的作用是返回当前方法执行的主体(方法中的this)所属类的详细信息即"[object Object]",其中第一个object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是this所属的类是Object。
Object.prototype.toString.call('') ; // [object String] Object.prototype.toString.call(1) ; // [object Number] Object.prototype.toString.call(true) ; // [object Boolean] Object.prototype.toString.call(undefined) ; // [object Undefined] Object.prototype.toString.call(null) ; // [object Null] Object.prototype.toString.call(new Function()) ; // [object Function] Object.prototype.toString.call(new Date()) ; // [object Date] Object.prototype.toString.call([]) ; // [object Array] Object.prototype.toString.call(new RegExp()) ; // [object RegExp] Object.prototype.toString.call(new Error()) ; // [object Error] Object.prototype.toString.call(document) ; // [object HTMLDocument] Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用
以上がJavaScriptのデータ型は何ですか? jsデータ型の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

WebStorm Mac版
便利なJavaScript開発ツール
