ホームページ > 記事 > ウェブフロントエンド > JavaScript トピック 6: 型検出
#JavaScriptデータ型検出に関する特別なトピック
# #Directory
(無料学習の推奨事項: javascript ビデオ チュートリアル)
序文
「JavaScript データ型」では、単純な型を使用します。検出の問題についても言及されました。 フロントエンドの学習者として、typeof と instanceof を使用して実行時に JavaScript データの型を決定できることを知っておく必要があります。千人が千通りの判断方法を書くでしょうか? この記事では、一般的な typeof からオブジェクト固有のinstanceof、isNull、isNumber、isString、その他のメソッドまで、データ型を決定する方法について説明します。一緒に作業しましょう~1. typeof
typeof: Operator未計算のオペランドの型を示す文字列を返します。
#Number
Number
typeof [] === 'object'; //truetypeof {} === 'object'; //truetypeof null === 'object'; //true
概要
Jの元の型を検出する場合、
を除き、object
を返し、それ以外はすべて返します。 is 対応する型名の小文字を返します。
2. Instanceof
オブジェクト タイプを決定するときは、instanceof を使用できます: プロトタイプとプロトタイプ チェーンに詳しくない場合は、この記事を参照してください。プロトタイプからプロトタイプ チェーンへ
#定義
instanceof 演算子は、コンストラクターのプロトタイプ属性がプロトタイプ チェーンに表示されるかどうかを検出するために使用されます。インスタンスオブジェクトのプロトタイプチェーンの上位。
Instance
const arr = [];const obj = {};console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // trueconsole.log(obj instanceof Array); // falseconsole.log(obj instanceof Object); // trueinstanceof は型の親クラスと一致する可能性があることに注意してください。つまり、Object が親クラスであるため、arr instanceof Array と arr instanceof Object は両方とも true になります。配列の 。
class extends
および
プロトタイプ チェーン ルールの親子クラス関係を満たすオブジェクトは、一致させることができます:
classclass Base {}class Current extends Base {}const obj = new Current();console.log(obj instanceof Current); // trueconsole.log(obj instanceof Base); // true#プロトタイプ チェーン
<pre class="brush:php;toolbar:false">function Foo() {}function Bar() {}Bar.prototype = new Foo();const obj = new Bar();console.log(obj instanceof Bar); // trueconsole.log(obj instanceof Foo); // true</pre>
obj のプロトタイプ チェーンを変更すると、instanceof の結果が変更される可能性があることに注意してください。
function Other() {}obj.__proto__ = new Other();console.log(obj instanceof Other); // trueconsole.log(obj instanceof Foo); // false
summary
Instanceof はプロトタイプ チェーンを使用して判断します。実際、タイプType のプロトタイプがプロトタイプ チェーン上にある限り、 object obj
の場合、obj instanceof Type
は true、それ以外の場合は false。
3. コンストラクター
親の型と一致させたくないが、現在の型だけを一致させたい場合は、コンストラクターを使用して判断できます。 プロトタイプやプロトタイプ チェーンに詳しくない場合は、この記事を読んでください。プロトタイプからプロトタイプ チェーンへ
定義
戻るインスタンス オブジェクトを作成するオブジェクト コンストラクターへの参照。このプロパティの値は、関数名を含む文字列ではなく、関数自体への参照であることに注意してください。
インスタンスconst arr = [];console.log(arr.constructor === Array); // trueconsole.log(arr.constructor === Object); // false
オブジェクトのコンストラクターはその型を返し、その型が定義されると、値が次のとおりである name 読み取り専用属性が作成されます。タイプの名前。
class Foo {}console.log(Foo.name); // Fooconst foo = new Foo();console.log(foo.constructor === Foo); // trueconsole.log(foo.constructor.name === 'Foo'); // true
質問
constructor.name は必ずしも正しいのでしょうか? 変更できますか?
4.1 stringTag—タグ型
4.2 Object.prototype.toString
DefinitiontoString()
メソッドは、オブジェクトを表す文字列を返します。 すべてのオブジェクトには
メソッドが使用されます。オブジェクトは継承します。 如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。以下代码说明了这一点: 实例 比如这是requirejs里面的代码片段。 toString时都做了什么? 这里直接将冴羽大大的总结搬了过来: When the toString method is called, the following steps are taken: 当 toString 方法被调用的时候,下面的步骤会被执行: 注意 有几点我们需要注意: 五、实现几个数据检测的方法 好了看了几款常用的类型判断方法后,我们可不可以实现自己的类型判断工具?就利用上述提到的一个或多个方法。我们自己动手丰衣足食~ 注意,我们认为null不是一个对象,它就是null~ 好了到最后,大家平时对类型检测的态度是什么样的呢? 相关免费学习推荐:javascript(视频)var ostring = Object.prototype.toString;function isArray(it) {
return ostring.call(it) === '[object Array]';}
对象
;5.1 isObject
function isObject(value) {
const type = typeof value;
return value != null && (type === 'object' || type === 'function');}
5.2 isNull
function isNull(value) {
return value === null;}
5.3 isFunction
function isFunction(value) {
return typeof value === 'function';}
5.4 isArray
var isArray = Array.isArray || function( value ) {
return type(value) === "array";}
5.5 stringTag
const toString = Object.prototype.toString;function getTag(value) {
// if (value === null) return '[object Null]';
// if (value == null) return '[object Undefined]'
if (value == null) {
return value === undefined ? '[object Undefined]' : '[object Null]'
}
return toString.call(value)}
以上がJavaScript トピック 6: 型検出の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。