こんな基本的なことはもう記録すべきではありませんが、過去を振り返って新しいことを学びましょう~データ型から始めましょう
JS の 6 つの主要なデータ型: 数値、文字列、オブジェクト、ブール型、ヌル、未定義
文字列: 一重引用符で囲むか、「文字列」のように二重引用符で囲みます
数値: 整数と浮動小数点数はすべて数値と呼ばれます~
ブール: true と false です
未定義: 未定義、つまり、変数を作成した後ですが、値は割り当てられていません~
null: したがって、Sijiu という名前です。null は何も意味せず、何も意味しません
オブジェクト: これを説明するのは難しいです。つまり、上記5種類以外の種類です
-----上は全て浮雲、下は神です----- -- -----------------------
データ型判定 typeof
typeof はほとんどのデータ型判定を解決できます。これは単項演算であり、 a 演算値の前に、戻り値はオペランドの型を表す文字列であるため、オペランドが String 型であるかどうかを判断するには、直接 if(typeof(your value) == "string"){}
以下は、さまざまなデータ型の戻り結果です:
var a="string"; console.log(a); //string var a=1; console.log(a); //number var a=false; console.log(a); //boolean var a; console.log(typeof a); //undfined var a = null; console.log(typeof a); //object var a = document; console.log(typeof a); //object var a = []; console.log(a); //object var a = function(){}; console.log(typeof a) //function 除了可以判断数据类型还可以判断function类型
最初の 4 つの型を除いて、null、オブジェクト、および配列はオブジェクト型を返すことは明らかです。
関数型の場合は、関数が返されます。 typeof(Date)、typeof(eval) などです。
それでは、これはもう 1 つの非常に一般的な問題につながりますが、その解決策は、データが配列型であるかどうかをどのように判断するかということになります。
------------------------------------------実はこれが私の目的なのです、え~---------------------------------------------- -
js 配列の型を判定するメソッドの一つ
instanceof
instanceは、その名の通り、instance、exampleなので、変数がオブジェクトのインスタンスかどうかを判定するためにinstanceofが使われます。算術式 --- typeof に最も似ています 実質的な違い
ainstanceof b?alert("true"):alert("false") // b の値は文字列ではなく、判断したいデータ型であることに注意してください、Array
など、例: Chestnut:
var a=[]; console.log(a instanceof Array) //返回true
メソッド 2 コンストラクター
は W3C 定義で定義されています。コンストラクター属性は、このオブジェクトを作成した配列関数への参照を返します
は、に対応するコンストラクター関数です返されたオブジェクト。定義は、instanceof と一致しませんが、効果は同じです
例: (instanceof Array) // は Array のインスタンスですか? true or false
(a.constructor == Array) // インスタンスに対応するコンストラクタは Array ですか? true か false
例:
function employee(name,job,born){ this.name=name; this.job=job; this.born=born; } var bill=new employee("Bill Gates","Engineer",1985); console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}
次に、さまざまな型を判断する方法は次のとおりです:
console.log([].constructor == Array); console.log({}.constructor == Object); console.log("string".constructor == String); console.log((123).constructor == Number); console.log(true.constructor == Boolean);
-----------------------------------------------------以下はそうではありませんオリジナル -- -----------------------------------
より厳密で普遍的な方法:
function isArray(object){ return object && typeof object==='object' && Array == object.constructor; }
! !注:
instanceof と construcor を使用する場合、判定される配列は現在のページで宣言する必要があります。例えば、ページ(親ページ)にはフレームがあり、そのフレーム内でページ(子ページ)が参照されます。このとき、子ページ内で配列が宣言され、親ページの変数に代入されます。 Array == object.constructor; は false を返します。
理由: 1. 配列は参照アドレスの転送のみです。
2. 各ページの Array ネイティブ オブジェクトによって参照されるアドレスは異なります。サブページで宣言された配列の対応するコンストラクターは、親ページが判断し、使用される Array になります。はサブページの配列と等しくないことを覚えておいてください。そうしないと、問題を追跡するのが難しくなります。
方法 3: 特性を判断する方法
function isArray(object){ return object && typeof object==='object' && typeof object.length==='number' && typeof object.splice==='function' && //判断length属性是否是可枚举的 对于数组 将得到false !(object.propertyIsEnumerable('length')); }
はい、オブジェクトに属性を追加できるため、長さとスプライスは必ずしも配列である必要はありませんが、最も重要な判断要素である長さ属性を列挙することはできません。
var a = new Array("apple", "banana", "cactus"); document.write(a.propertyIsEnumerable(1));
方法 4 最も簡単な方法
function isArray(o) { return Object.prototype.toString.call(o) === ‘[object Array]‘; }