type check

type check


Node.js

function typeOf(obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0,-1).toLowerCase()
}

const values = [
  true,
  10,
  'foo',
  Symbol('bar'),
  null,
  undefined,
  NaN,
  {},
  [],
  function(){},
  new Error(),
  new Date(),
  /a/,
  new Map(),
  new Set(),
  Promise.resolve(),
  function *() {},
  class {},
]

for (value of values) {
  console.log(typeOf(value))
}

Output

boolean
number
string
symbol
null
undefined
number
object
array
function
error
date
regexp
map
set
promise
generatorfunction
function

Go

package main

import (
    "fmt"
    "reflect"
    "regexp"
    "time"
)

func main() {
    values := []interface{}{
        true,
        int8(10),
        int16(10),
        int32(10),
        int64(10),
        uint(10),
        uint8(10),
        uint16(10),
        uint32(10),
        uint64(10),
        uintptr(10),
        float32(10.5),
        float64(10.5),
        complex64(-1 + 10i),
        complex128(-1 + 10i),
        "foo",
        byte(10),
        'a',
        rune('a'),
        struct{}{},
        []string{},
        map[string]int{},
        func() {},
        make(chan bool),
        nil,
        new(int),
        time.Now(),
        regexp.MustCompile(`^a$`),
    }

    for _, value := range values {
        fmt.Println(reflect.TypeOf(value))
    }
}

Output

bool
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
uintptr
float32
float64
complex64
complex128
string
uint8
int32
int32
struct {}
[]string
map[string]int
func()
chan bool
<nil>
*int
time.Time
*regexp.Regexp