Object.prototype.toString()方法进行类型判断

第一次写博客,写的不好期请见谅呢!!

接触这个东西,是我在学习写组件的的时候监听鼠标点击,点击下拉框意外的元素,自动收缩下拉框,在下拉框内点击了一个icon 图标,一直报错,显示无法识别thisClassName.indexOf('xxx'),

功能能正常使用,但是控制器老是报错,百度了,也没查到什么原因(具体就是说我谷歌浏览器打开了自动翻译导致的,尝试了但是没有用),后面我寻思我点击的图标是属于一个对象,所以所以使用indexOf() 所以就报错了,于是我写了如下代码,就不在报错了 

init() {
      /* 监听click事件,点击下拉选择框以外的元素,自动收缩下拉框 */
      window.document.addEventListener('click', (e) => {
        const thisClassName = e.target.className
        // 判断是否点击的是图标
        //这里首先打印了 Object.prototype.toString.call(thisClassName) 返回的是[object SVGAnimatedString]
        //于是我在外套了一层判断 ,最后控制器没有报错
        if (!Object.prototype.toString.call(thisClassName) === '[object SVGAnimatedString]') {
          if (
            thisClassName &&
            this.selectListDisplay &&
            thisClassName.indexOf('amber-select-box') < 0 &&
            thisClassName.indexOf('amber-select-list') < 0 &&
            thisClassName.indexOf('amber-select-option') < 0
          ) {
            this.selectListDisplay = false
          }
        }

        e.stopPropagation()
      })
      this.hasSuffixIcon = !!this.$slots.suffixIcon
    },

 下面这里我参考了新世界| 忧伤 的一些对Object.prototype.toString() 理解

作者:新世界丨忧伤

链接:理解Object.prototype.toString()_perwhy_wang的博客-CSDN博客

来源:csdn

每个对象都有一个toString() 方法,默认情况下,toString() 方法被每一个Object对象继承

作用: 
  使用toString()来检测对象类型,为了每一个对象能通过Object,prototy.toString来检测,需要以Function
.prototype.call() 或者Function.prototype().apply()的形式来调用,传递要检查的对象作为第一个参数

需要判断是什么数据类型时可以这么用:

下面这段我写了一个监测类型的公共方法 ,可以写在公共方法里面,用的时候可以用

console.log(Object.prototype.toString.call(item);//例如打印出 [object object]

if(Object.prototype.toString.call(item) === '[object object]' ){
   // ...
}

//这里我写了一个监测类型的公共方法
function typeOf(obj) {
  const {toString} = Object.prototype;
  const map = {
    '[object Boolean]'  : 'boolean',
    '[object Number]'   : 'number',
    '[object String]'   : 'string',
    '[object Function]' : 'function',
    '[object Array]'    : 'array',
    '[object Date]'     : 'date',
    '[object RegExp]'   : 'regExp',
    '[object Undefined]': 'undefined',
    '[object Null]'     : 'null',
    '[object Object]'   : 'object'
    //... 
  };
  return map[toString.call(obj)];
}
// 如何使用
const t = typeOf(data)
if(t==='array'){
    //...
}
...

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值