题解 | #基本数据类型检测#
基本数据类型检测
https://www.nowcoder.com/practice/7a8d09b2a0d54d9d95b8f47b1f4bbc16
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> /* 填写样式 */ </style> </head> <body> <!-- 填写标签 --> <script type="text/javascript"> // 填写JavaScript function _typeof(value) { return typeof(value) } </script> </body> </html>
typeof
运算符和 Object.prototype.toString.call()
方法都可以用来检测变量的类型,但它们之间有一些重要的区别:
typeof 运算符
- 简单性:
typeof
是一个简单的运算符,直接返回一个基本类型的名称。 - 基本类型:
typeof
主要用于检测基本类型,如undefined
、boolean
、number
、string
和symbol
。 - 对象和函数:对于对象(包括数组)和函数,
typeof
总是返回"object"
和"function"
。 - null:对于
null
,typeof
返回"object"
,这是typeof
的一个已知行为特性。 - 性能:一般来说,
typeof
的性能较好,因为它是一个内置运算符。
Object.prototype.toString.call()
- 复杂性:
Object.prototype.toString.call()
方法调用toString
方法,它返回一个表示对象类别的字符串。 - 具体类型:它可以更精确地识别特定类型的对象,比如数组、日期、正则表达式等。
- null:对于
null
,Object.prototype.toString.call(null)
返回[object Null]
。 - 性能:由于涉及到方法调用,性能可能略低于
typeof
。 - 标准性和一致性:
Object.prototype.toString.call()
在所有现代浏览器中都遵循 ECMAScript 标准,因此结果更为一致。
示例
以下是 typeof
和 Object.prototype.toString.call()
的一些示例:
javascript深色版本1console.log(typeof undefined); // "undefined" 2console.log(typeof true); // "boolean" 3console.log(typeof 42); // "number" 4console.log(typeof ""); // "string" 5console.log(typeof {}); // "object" 6console.log(typeof null); // "object" 7console.log(typeof []); // "object" 8console.log(typeof function() {}); // "function" 9 10console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]" 11console.log(Object.prototype.toString.call(true)); // "[object Boolean]" 12console.log(Object.prototype.toString.call(42)); // "[object Number]" 13console.log(Object.prototype.toString.call("")); // "[object String]" 14console.log(Object.prototype.toString.call({})); // "[object Object]" 15console.log(Object.prototype.toString.call(null)); // "[object Null]" 16console.log(Object.prototype.toString.call([])); // "[object Array]" 17console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
使用场景
- 当你需要快速判断一个值是否为基本类型时,可以使用
typeof
。 - 当你需要更详细的类型信息,特别是需要区分数组、日期等特定对象类型时,使用
Object.prototype.toString.call()
更合适。