サーチ…


タイプ

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow