type check


Node.js

  1. function typeOf(obj) {
  2. return {}.toString.call(obj).split(' ')[1].slice(0,-1).toLowerCase()
  3. }
  4. const values = [
  5. true,
  6. 10,
  7. 'foo',
  8. Symbol('bar'),
  9. null,
  10. undefined,
  11. NaN,
  12. {},
  13. [],
  14. function(){},
  15. new Error(),
  16. new Date(),
  17. /a/,
  18. new Map(),
  19. new Set(),
  20. Promise.resolve(),
  21. function *() {},
  22. class {},
  23. ]
  24. for (value of values) {
  25. console.log(typeOf(value))
  26. }

Output

  1. boolean
  2. number
  3. string
  4. symbol
  5. null
  6. undefined
  7. number
  8. object
  9. array
  10. function
  11. error
  12. date
  13. regexp
  14. map
  15. set
  16. promise
  17. generatorfunction
  18. function

Go

  1. package main
  2. import (
  3. "fmt"
  4. "reflect"
  5. "regexp"
  6. "time"
  7. )
  8. func main() {
  9. values := []interface{}{
  10. true,
  11. int8(10),
  12. int16(10),
  13. int32(10),
  14. int64(10),
  15. uint(10),
  16. uint8(10),
  17. uint16(10),
  18. uint32(10),
  19. uint64(10),
  20. uintptr(10),
  21. float32(10.5),
  22. float64(10.5),
  23. complex64(-1 + 10i),
  24. complex128(-1 + 10i),
  25. "foo",
  26. byte(10),
  27. 'a',
  28. rune('a'),
  29. struct{}{},
  30. []string{},
  31. map[string]int{},
  32. func() {},
  33. make(chan bool),
  34. nil,
  35. new(int),
  36. time.Now(),
  37. regexp.MustCompile(`^a$`),
  38. }
  39. for _, value := range values {
  40. fmt.Println(reflect.TypeOf(value))
  41. }
  42. }

Output

  1. bool
  2. int8
  3. int16
  4. int32
  5. int64
  6. uint
  7. uint8
  8. uint16
  9. uint32
  10. uint64
  11. uintptr
  12. float32
  13. float64
  14. complex64
  15. complex128
  16. string
  17. uint8
  18. int32
  19. int32
  20. struct {}
  21. []string
  22. map[string]int
  23. func()
  24. chan bool
  25. <nil>
  26. *int
  27. time.Time
  28. *regexp.Regexp