普通写法
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
| 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 和数组时会更好
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
| 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()));
|