博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一记: JS变量类型判断(VUE源码解读)
阅读量:6969 次
发布时间:2019-06-27

本文共 1360 字,大约阅读时间需要 4 分钟。

学习摘要 :

以前总是对js变量类型的判断模糊不清楚,今天看到vue源码后才恍然大悟原来大神都是这样弄的,所以加以总结,写的不好的请大神们多多吐槽吐槽!!!!!!

Vue 源码

/*     获取值的原始类型字符串, 如 [object Object].   */  var _toString = Object.prototype.toString;    //通过call的特性获取类型,在通过.slice截取方括号最后的类型想必大家都知道  function toRawType (value) {    return _toString.call(value).slice(8, -1)  }    /**    严格的对象类型检查。只返回true,    这里主要用于普通的javascript对象   */  function isPlainObject (obj) {    return _toString.call(obj) === '[object Object]'  }复制代码
  • Object:大家都知道这是 对象的构造函数
  • Object.prototype: 对象构造函数的原型对象
  • Object.prototype.toString:对象构造函数的原型对象上的toString方法
  • toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。

[提问] : 为什么字符串调用toString方法和对象原型上的toString方法的结果不一样?

Object.prototype.toString('123') // "[object String]"'123'.toString() // "123"在控制台输入 new String('123')会发现实列对象的__proto__上面会有内置toString方法.复制代码

总结 :

  • 数组、字符串、函数、Date 对象调用toString方法,并不会返回[object Object],因为它们都自定义了toString方法,覆盖原始方法。

封装

/*	判断数据类型	@param s {Object Number Function Symbol}*/export const type = s => Object.prototype.toString.call(s).slice(8, -1).toLowerCase();[	'Array',	'Undefined',	'Boolean',	'Number',	'Function',	'Symbol',	'Object'].forEach(v=>type['is'+v] = s => type(s) === v.toLowerCase())eg: type.isNumber(123) // true    type.isString(123) // false复制代码

-每记一问,考考你的小脑袋-

1.如何判断一个变量是空对象{};    2.如何截取[object String]里面的String,使用正则,注意,String只是举例,还可能是Array,Function等等    3.写一方法获取字符串中出现次数最多的字符?复制代码

查看答案请阅读第二记

转载地址:http://jcpsl.baihongyu.com/

你可能感兴趣的文章
我也来发段代码,二叉树的遍历
查看>>
java String包含子串和包含字符
查看>>
swift可选类型
查看>>
让程序只启动一个实例
查看>>
我的友情链接
查看>>
Ubuntu 监控惠普服务器的整列和硬盘
查看>>
安装sql sever 2008 r2时,提示“必须使用“角色管理工具”安装或配置microsoft.net framework3.5”...
查看>>
解决file_get_contents无法请求https连接的方法
查看>>
JEPLUS平台列表字段配置之统计类型的介绍——JEPLUS软件快速开发平台
查看>>
简要介绍DES、RSA MD5 sha1 四种加密算法的优缺点,以及使用场合
查看>>
SAP云计算产品线关键功能扩展升级
查看>>
Com0com+com2tc 试用
查看>>
http请求方式
查看>>
web版文本编辑器
查看>>
x86基础之数与数据类型
查看>>
spring与spring MVC的区别
查看>>
linux学习----日志
查看>>
活动目录的综合应用(二)
查看>>
Java中的静态绑定和动态绑定
查看>>
Java compiler level does not match the version of
查看>>