普通写法
| 12
 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
 
 | function typeOf(value) {if (value === null) {
 return 'null';
 }
 
 if (value === undefined) {
 return 'undefined';
 }
 
 
 const type = typeof value;
 
 if (type !== 'object') {
 return type;
 }
 
 
 if (Array.isArray(value)) {
 return 'array';
 }
 
 
 if (value instanceof Date) {
 return 'date';
 }
 
 
 if (value instanceof RegExp) {
 return 'regexp';
 }
 
 
 return 'object';
 }
 
 
 
 console.log(typeOf(123));
 console.log(typeOf("Hello"));
 console.log(typeOf(true));
 console.log(typeOf(undefined));
 console.log(typeOf(null));
 console.log(typeOf([1, 2, 3]));
 console.log(typeOf({ key: "value" }));
 console.log(typeOf(function() {}));
 console.log(typeOf(new Date()));
 console.log(typeOf(/abc/));
 console.log(typeOf(Symbol('symbol')));
 console.log(typeOf(BigInt(123)));
 
 
 | 
优雅写法
可以通过 Object.prototype.toString 方法来判断各种类型,这种方法比 typeof 更加精确,尤其是在判断 null 和数组时会更好
| 12
 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
 
 | function typeOf(value) {
 const type = Object.prototype.toString.call(value);
 
 
 switch (type) {
 case '[object Null]':
 return 'null';
 case '[object Undefined]':
 return 'undefined';
 case '[object Array]':
 return 'array';
 case '[object Object]':
 return 'object';
 case '[object Date]':
 return 'date';
 case '[object RegExp]':
 return 'regexp';
 case '[object Function]':
 return 'function';
 case '[object String]':
 return 'string';
 case '[object Number]':
 return 'number';
 case '[object Boolean]':
 return 'boolean';
 case '[object Symbol]':
 return 'symbol';
 case '[object BigInt]':
 return 'bigint';
 default:
 return 'unknown';
 }
 }
 
 
 console.log(typeOf(123));
 console.log(typeOf("Hello"));
 console.log(typeOf(true));
 console.log(typeOf(undefined));
 console.log(typeOf(null));
 console.log(typeOf([1, 2, 3]));
 console.log(typeOf({ key: "value" }));
 console.log(typeOf(function() {}));
 console.log(typeOf(new Date()));
 console.log(typeOf(/abc/));
 console.log(typeOf(Symbol('symbol')));
 console.log(typeOf(BigInt(123)));
 console.log(typeOf(new Set()));
 
 |