利用原生js判断数据类型

 function type(target){
            var template = {
                "[object Array]" : "array",
                "[object Object]" : "object",
                "[object Number]" : "number - object",
                "[object Boolean]" : "boolean - object",
                "[object String]" : "string - object"
            }

            if(target == null){
                return null
            }

            if(typeof(target) == "object"){
                var str = Object.prototype.toString.call(target)
                return template[str]
            }else{
                return typeof(target)
            }
        }

思路
首先将null这个值排除掉
接着将函数类型排除出来
然后判断是 原始值还是引用值
最后复盘发现,尽管函数类型是单独的,但是符合原始值的判断方法,归纳到一点即可!

### 如何判断 JavaScript 数据类型 #### 使用 `typeof` 运算符 `typeof` 是一种用于检测原始数据类型的运算符。对于大多数基本数据类型,它能提供准确的结果;然而,在处理函数和 `null` 值时会返回意外的结果。 ```javascript console.log(typeof "string"); // string console.log(typeof 42); // number console.log(typeof true); // boolean console.log(typeof undefined);// undefined console.log(typeof null); // object (这是一个已知的错误)[^1] ``` #### 应用 `instanceof` 关键字 当涉及到对象实例时,`instanceof` 可用来验证某个对象是否属于特定构造器创建的对象类。此方法仅限于引用类型,并不适合测试原生数据类型。 ```javascript let date = new Date(); console.log(date instanceof Date); // true console.log([] instanceof Array); // true ``` #### 调用 `constructor` 属性 每个对象都有一个 `constructor` 属性指向其构造函数。通过访问这个属性也可以识别出对象是由哪个构造器产生的。不过要注意的是,如果存在原型链上的覆盖,则可能得到意想不到的结果[^3]。 ```javascript const num = 5; console.log(num.constructor === Number); // true ``` #### 利用 `Object.prototype.toString.call()` 方法 这是最为推荐的方式之一来获取任何给定值的确切内部标签(即 [[Class]])。这种方法不仅能够正确地区分所有的内置类型,而且还能很好地应对自定义对象的情况[^4]。 ```javascript function getType(value){ return Object.prototype.toString.call(value).slice(8,-1); } console.log(getType('')); // String console.log(getType({})); // Object console.log(getType([])); // Array console.log(getType(function(){}));// Function ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值