サーチ…
タイプ
typeof
は、javascriptでtype
を取得するために使用する「公式」関数ですが、場合によっては予期しない結果が生じる可能性があります。
1.文字列
typeof "String"
または
typeof Date(2011,01,01)
"文字列"
2.番号
typeof 42
"数"
3.ブール
typeof true
(有効な値はtrue
およびfalse
)
"ブール値"
4.オブジェクト
typeof {}
または
typeof []
または
typeof null
または
typeof /aaa/
または
typeof Error()
"オブジェクト"
5.機能
typeof function(){}
"関数"
6.未定義
var var1; typeof var1
"未定義"
コンストラクタ名によるオブジェクト型の取得
typeof
演算子で型object
取得すると、多少の無駄なカテゴリに分類されます...
実際には、オブジェクトの実際の種類を絞り込む必要があります。オブジェクトのObject.prototype.toString.call(yourObject)
名を使用してオブジェクトの実際の味を取得する方法がありますObject.prototype.toString.call(yourObject)
1.文字列
Object.prototype.toString.call("String")
"[オブジェクト文字列]"
2.番号
Object.prototype.toString.call(42)
"[オブジェクト番号]"
3.ブール
Object.prototype.toString.call(true)
"[オブジェクトのブール値]"
4.オブジェクト
Object.prototype.toString.call(Object())
または
Object.prototype.toString.call({})
"[オブジェクトオブジェクト]"
5.機能
Object.prototype.toString.call(function(){})
"[オブジェクト関数]"
6.日付
Object.prototype.toString.call(new Date(2015,10,21))
"[オブジェクト日付]"
7.正規表現
Object.prototype.toString.call(new RegExp())
または
Object.prototype.toString.call(/foo/);
"[オブジェクトRegExp]"
8.アレイ
Object.prototype.toString.call([]);
"[オブジェクト配列]"
9.ヌル
Object.prototype.toString.call(null);
"[オブジェクトのヌル]"
10.未定義
Object.prototype.toString.call(undefined);
"[オブジェクト未定義]"
11.エラー
Object.prototype.toString.call(Error());
"[オブジェクトエラー]"
オブジェクトのクラスを見つける
オブジェクトが特定のコンストラクタによって構築されたものか、それを継承したものかを調べるには、 instanceof
コマンドを使用しinstanceof
。
//We want this function to take the sum of the numbers passed to it
//It can be called as sum(1, 2, 3) or sum([1, 2, 3]) and should give 6
function sum(...arguments) {
if (arguments.length === 1) {
const [firstArg] = arguments
if (firstArg instanceof Array) { //firstArg is something like [1, 2, 3]
return sum(...firstArg) //calls sum(1, 2, 3)
}
}
return arguments.reduce((a, b) => a + b)
}
console.log(sum(1, 2, 3)) //6
console.log(sum([1, 2, 3])) //6
console.log(sum(4)) //4
プリミティブ値は、どのクラスのインスタンスとも見なされないことに注意してください。
console.log(2 instanceof Number) //false
console.log('abc' instanceof String) //false
console.log(true instanceof Boolean) //false
console.log(Symbol() instanceof Symbol) //false
null
およびundefined
以外のJavaScriptのすべての値には、それをconstructor
するために使用された関数を格納するconstructor
プロパティもあります。これはプリミティブでも機能します。
//Whereas instanceof also catches instances of subclasses,
//using obj.constructor does not
console.log([] instanceof Object, [] instanceof Array) //true true
console.log([].constructor === Object, [].constructor === Array) //false true
function isNumber(value) {
//null.constructor and undefined.constructor throw an error when accessed
if (value === null || value === undefined) return false
return value.constructor === Number
}
console.log(isNumber(null), isNumber(undefined)) //false false
console.log(isNumber('abc'), isNumber([]), isNumber(() => 1)) //false false false
console.log(isNumber(0), isNumber(Number('10.1')), isNumber(NaN)) //true true true