Blame view

天文台pc/tianwentai-ui/node_modules/redux/src/utils/kindOf.js 1.45 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  // Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of
  function miniKindOf(val) {
    if (val === void 0) return 'undefined'
    if (val === null) return 'null'
  
    const type = typeof val
    switch (type) {
      case 'boolean':
      case 'string':
      case 'number':
      case 'symbol':
      case 'function': {
        return type
      }
      default:
        break
    }
  
    if (Array.isArray(val)) return 'array'
    if (isDate(val)) return 'date'
    if (isError(val)) return 'error'
  
    const constructorName = ctorName(val)
    switch (constructorName) {
      case 'Symbol':
      case 'Promise':
      case 'WeakMap':
      case 'WeakSet':
      case 'Map':
      case 'Set':
        return constructorName
      default:
        break
    }
  
    // other
    return type.slice(8, -1).toLowerCase().replace(/\s/g, '')
  }
  
  function ctorName(val) {
    return typeof val.constructor === 'function' ? val.constructor.name : null
  }
  
  function isError(val) {
    return (
      val instanceof Error ||
      (typeof val.message === 'string' &&
        val.constructor &&
        typeof val.constructor.stackTraceLimit === 'number')
    )
  }
  
  function isDate(val) {
    if (val instanceof Date) return true
    return (
      typeof val.toDateString === 'function' &&
      typeof val.getDate === 'function' &&
      typeof val.setDate === 'function'
    )
  }
  
  export function kindOf(val) {
    let typeOfVal = typeof val
  
    if (process.env.NODE_ENV !== 'production') {
      typeOfVal = miniKindOf(val)
    }
  
    return typeOfVal
  }