> For the complete documentation index, see [llms.txt](https://lochiwei.gitbook.io/web/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lochiwei.gitbook.io/web/js/val/type/type-functions/isclass.md).

# isClass()

[JS](/web/js.md) ⟩ [values](/web/js/val.md) ⟩ [custom functions](/web/js/val/type/type-functions.md) ⟩ isClass()

{% hint style="success" %}
check if value is a [class](/web/js/val/class.md). (Note：class is also a [Function](/web/js/val/builtin/func.md))
{% endhint %}

{% tabs %}
{% tab title="💾 程式" %}

* replit：[typeName() (v.2)](https://replit.com/@pegasusroe/typeName-from-MDN#index.js)
* require： [isFunction()](/web/js/val/type/type-functions/isfunction.md), [functionDefinition()](/web/js/val/type/type-functions/func-def.md)
* (to use it, copy and paste from 📁 module file： [typeName()](/web/js/val/type/name/typename.md))

```javascript
// ⭐️ check if value is a "class"
// - require: 
//   • isFunction()
//   • functionDefinition()
function isClass(value) {
    return (
        // `value` is a function
        isFunction(value) &&
        // `value` is a "class" definition
        functionDefinition(value).startsWith("class")
    );
}
```

{% endtab %}

{% tab title="💈範例" %}

* replit：[isClass()](https://replit.com/@pegasusroe/isClass#index.js)
* require： [isFunction()](/web/js/val/type/type-functions/isfunction.md), [functionDefinition()](/web/js/val/type/type-functions/func-def.md)

```javascript
// normal function
function foo() {
    console.log('hello');
}

let a = 1;               // number
class User {}            // class
let user = new User();   // instance

// test cases
isClass(foo),    // ❌ false
isClass(a),      // ❌ false

isClass(User),   // ✅ true
isClass(user),   // ❌ false

// built-in objects
isClass(Object),        // ❌ false❗ 
isClass(Array),         // ❌ false❗ 
isClass(Promise),       // ❌ false❗
isClass(Proxy),         // ❌ false❗

isFunction(Object),     // ✅ true
isFunction(Array),      // ✅ true

// functionDefinition(a),   // ⛔ TypeError

functionDefinition(foo),    // function foo() {
                            //     console.log('hello');
                            // }
functionDefinition(Array),
// function Array() { [native code] }

functionDefinition(Promise),
// function Promise() { [native code] }
```

{% endtab %}

{% tab title="⬇️ 應用" %}

* [typeName()](/web/js/val/type/name/typename.md)
  {% endtab %}

{% tab title="🗣 討論" %}

* [How to check if a variable is an ES6 class declaration?](https://stackoverflow.com/q/30758961/5409815) ([my answer](https://stackoverflow.com/a/72326559/5409815))
  {% endtab %}
  {% endtabs %}
