JSでは1つのvarであらゆる型の変数を定義できるのでとても便利ですが、関数の戻り値が何型なのか、入力情報が何型なのかを知りたい場合には面倒な事もあります。このとき、データを検出する必要がありますが、データの種類をどのように検出するのでしょうか。
データ型検出メソッド:
typeof: データ型を検出するために使用される演算子
instanceof: インスタンスが特定のクラスに属しているかどうかを検出するために使用されます
constructor: コンストラクター関数とinstanceofは非常に似ています
Object.prototype.toString.call(); 最も正確で一般的に使用されるメソッド
typeof
typeof: データ型を検出するために使用される演算子、使用方法は typeof + 検出されたコンテンツです。
typeof を使用してデータ型を検出します。まず、文字列が返され、その文字列には対応するデータ型が含まれます。 1. typeof null の結果は「object」です
2. オブジェクト内の左右の値のデータ型を検出するために typeof が使用されるため、オブジェクト内の値が配列であるか、正規表現であるか、その他の値であるかを具体的に分解することはできません。データ型、最終的に返される結果は「object」です
インスタンスオブの制限事項
instanceof
instanceof:インスタンスが特定のクラスに属しているかどうかを検出するために使用されます。使用方法:instanceinstanceofクラス名
1. リテラルの処理には使用できません 作成された基本型の値: 基本的なデータ型の場合、リテラルによって作成された結果とインスタンスによって作成された結果の間には一定の違いがあります。インスタンスによって作成される値は、標準のオブジェクト データ型の値であり、標準の Number クラスのインスタンスです。リテラル メソッドによって作成される結果は、厳密なインスタンスではなく、基本的なデータ型の値です。 , Number.prototype が使用可能
var num = 2; console.log(typeof num); // ->控制台输出字符串numberconsole.log(typeof typeof typeof typeof function () {}); // 输出的结果为字符串String,因为第一次使用typeof检测后结果为一个字符串数据类型的数据,以后每次检测都是String
instanceof只要在当前实例的原型链上,我们检测出来的结果都为true
在类的原型链继承当中,我们最后检测出来的结果未必正确
instanceof
instanceof:用来检测某个实例是不是属于某个类;使用方法: 实例 instanceof 类名
instanceof的局限性
1. 不能用来处理字面量创建出来的基本类型值:对于基本的数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定的区别的,从严格的意义上来讲,只有实例创建出来的结果才是标准对象数据类型的值,也是标准的Number这一个类的实例;对于字面量方式创建的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散性,导致可以使用Number.prototype上提供的方法
console.log(1 instanceof Number);//->控制台输出false console.log(new Number(1) instanceof Number);//-> 控制台输出true
function Fn() { } var ary = new Array; Fn.prototype = ary;//原型继承:让子类的原型等于父类的一个实例 var f =new Fn; // f->Fn.prototype->Array.prototype->Object.prototype console.log(f instanceof Array); //-> true
constructor:构造函数
constructor:构造函数 这种方法与instanceof非常相似
var obj = []; console.log(obj.constructor === Array ); //->trueconsole.log(obj.constructor === RegExp); //->false//console还可以出来基本的数据类型var num = 1; console.log(num.constructor === Number);//->true// constructor检测和instanceof一同,一般情况下是检测不了的var reg = /^$/; console.log(reg.constructor === RegExp);//-> trueconsole.log(reg.constructor === RegExp);//-> false
局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor覆盖了,这样检测出来的结果就是不准确的;对于特殊的数据类型null和undefined,它们的所属类是Null和Undefined,但是浏览器吧这两个类保护起来了,不允许我们进行访问使用
function Fn() {} Fn.prototype = new Array;var f =new Fn; console.log(f.constructor);//-> Array
Object.prototype.toString.call()
这种方法是我们真是项目中最长用的也是现在最准确的一种方式
首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向
在了解这种方式之前我们先了解下toString
这个方法 toString
:从字面上来看是转化成字符串,但是某些toString方法不仅仅是转化成字符串;对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是①把当前的数据类型转化为字符串的类型(它们的作用仅仅只是用来转成字符串);但是在Object原型上的toString方法不同于这些,②它的作用是返回当前方法的执行主体(方法中的this)所属的类的详细信息。 第一中类型转成字符串
//Number.prototype.toString方法是转化为字符串 console.log((1).toString()); //->这里的toString是Number.prototype.toString用法是转成字符串-> '1' console.log((1).__proto__.__proto__.toString());//[object Object] console.log((128).toString(2/8/10));//把数字转化为二进制、八进制、十进制
Object原型上的
クラスのプロトタイプチェーン継承では、最終的に検出した結果は正しくない可能性があります
({name:'编程'}).toString(); console.log(obj.toString());//-> toString中的this是Obj,返回的是obj所属类的信息->[Object Object]第一个Object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是obj所属的类是ObjectMath.toString();//->toString中的this是Math,返回的是Math所属类的信息 -> [Object Math]console.log(Object.prototype.toString.call([])); //->[object Array]console.log(Object.prototype.toString.call(/^$/)); //->[object Array]console.log(({}).toString.call(new Date)); //->[object Date]console.log(Object.prototype.toString.call(1)); //->[object Number]console.log(Object.prototype.toString.call('编程')); //->[object String]console.log(Object.prototype.toString.call(null)); //->[object Null]console.log(Object.prototype.toString.call(undefined)); //->[object Undefined]console.log(Object.prototype.toString.call(function () {})); //->[object Function]
constructor:constructor
constructor:constructor このメソッドはinstanceofと非常によく似ていますrrreee制限: クラスのプロトタイプを書き換えるプロセス中に、前のコンストラクターが上書きされる可能性が非常に高いため、特殊なデータ型については検出された結果が不正確になります。 null と未定義、それらが属するクラスは Null と Unknown ですが、ブラウザーはこれら 2 つのクラスを保護しており、アクセスを許可しませんrrreee
🎜Object.prototype.toString.call()
🎜このメソッドは、プロジェクトで最も一般的に使用されており、現在最も正確です。 まず、オブジェクト プロトタイプの toString メソッドを取得し、メソッドを実行して、メソッド内の this キーワードのポインティングを変更します。このメソッドを理解するには、まず toString
メソッドについて学びます🎜toString
: 文字通り文字列に変換されますが、一部の toString メソッドは文字列に変換されるだけではありません。文字列に変換されます。Number、String、Boolean、Array、RegExp、Date、および Function プロトタイプの場合、toString メソッドは、①現在のデータ型を文字列型に変換します (これらの関数は文字列に変換するためにのみ使用されます)。 ObjectプロトタイプのtoStringメソッドはこれらとは異なります。 ② 現在のメソッドの実行本体(メソッド内のthis)が属するクラスの詳細情報を返す機能です。 🎜最初の型は文字列に変換されます
🎜rrreee🎜オブジェクトのプロトタイプ上
🎜rrreee🎜 比較すると、4番目の方法の精度が最も高いため、私たちのプロジェクトでよく使われます。分かりましたか!!!🎜🎜関連する推奨事項:🎜🎜🎜🎜JavaScript でデータ型を検出するいくつかの方法の詳細な説明概要🎜🎜🎜🎜js データ型を判別するいくつかの方法🎜🎜以上がJS でのデータ型検出の 4 つの方法の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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の複数の顧客にサービスを提供できます

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

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
