《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—类型判断

lodash的类型判断源码

《饿了么大前端 Node.js 进阶教程》地址:https://github.com/ElemeFE/node-interview

 lodash介绍:lodash是目前很流行的JS工具库,它封装了许多JS常用到的工具方法,在阅读源码时,你会发现代码冗长;官网说这是性能优化,不管你信不信,反正我信了!

(1)null 类型

function isNull(value) {

  return value === null;

}

(2)number类型

function isNumber(value) {

  return typeof value == ‘number‘ ||

    (isObjectLike(value) && baseGetTag(value) == ‘[object Number]‘);

}

细心地同学会问:“我去,这么长!”,没错,就是这么长。因为Number类型要包含很多种情况在里面;

例如:这一种new Number()出来的情况,typeof就是个对象

(3)string类型

function isString(value){

  const type = typeof value;

  return type == ‘string‘ || (type == ‘object‘ && value != null && !Array.isArray(value) && getTag(value) == ‘[object String]‘);

}

和判断number类型一样,排除new String()的状况,你会说:Object.prototype.toString.call就一步搞定,但是这会影响性能,反正官网是这么解释的;

(4)arguments

function isArguments(value) {

  return typeof value == ‘object‘ && value !== null && getTag(value) == ‘[object Arguments]‘;

}

(5)function

function isFunction(value) {

  if (!isObject(value)) {

    return false

  }

  const tag = baseGetTag(value)

  return tag == ‘[object Function]‘ || tag == ‘[object AsyncFunction]‘ ||

    tag == ‘[object GeneratorFunction]‘ || tag == ‘[object Proxy]‘

}

主要是增加了对于原生方法的判断

(6)boolean

function isBoolean(value) {

  return value === true || value === false ||

    (isObjectLike(value) && baseGetTag(value) == ‘[object Boolean]‘)

}

总结:总的来说,类型判断是从typeof、Object.prototype.toString.call和值,3个方面来配合进行判断的;

时间: 2024-12-23 23:14:49

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—类型判断的相关文章

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—引用传递

<饿了么大前端 Node.js 进阶教程>地址:https://github.com/ElemeFE/node-interview 1.如何编写一个 json 对象的拷贝函数 function clone(obj){ var result; if (Array.isArray(obj)) { result = []; obj.forEach((item) => { result.push(clone(item)); }); } else if (typeof obj === 'objec

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—作用域

<饿了么大前端 Node.js 进阶教程>地址:https://github.com/ElemeFE/node-interview 作用域从某种意义上来说是个难点,它需要你真真正正的了解JS的分词.词法分析,语法分析,代码生成,LHS查询,RHS查询等深层的东西. 如果不知道可以读一下<你不知道的JavaScript:上卷> let和var的区别 1.let只在声明的代码块中有效,{}中使用let声明变量,外面是访问不到的,这就是块级作用域 2.不存在变量提升问题 3.重复声明会报

005_解密饿了么大前端团队

最近,"大前端"这个词被频繁提及,很多团队也在重新思考"大前端团队"和"移动团队+前端团队"这两种模式的优劣.而在大家还在热火朝天地讨论概念的时候,饿了么大前端团队已经茁壮成长,有了很多先人一步的实践了.InfoQ 特别邀请了饿了么大前端部门负责人林建锋,请他结合饿了么大前端团队的实践,向大家分享如何落地和管理一个大前端团队.    平时大家会叫我小鱼或 Sofish,尴尬的是只有屈指可数的同行知道我真名叫林建锋.曾经,为了逃离数学,大学我选了法

006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!

作者|Sofish编辑|小智 & 尾尾本文是前端之巅向 sofish 的约稿<什么样的人可以称为架构师?>.采访< 饿了么大前端团队究竟是如何落地和管理的?>以及 sofish 做客大咖说直播节目的总结和整理,希望能帮助各位淀粉更清晰地理解 sofish 的观点.获取大咖说视频下载链接,请关注前端之巅并回复"鱼老板",查看饿了么大前端更多实践请回复"饿了么".视频回顾 程序员成长之:跨界.困惑与架构师1. 如何看待"大跨度入

24个很赞的 Node.js 免费教程和在线指南

JavaScript 最初是用来创建动态网站效果的的前端语言.而如今,这门脚本语言也可以用作后端开发,用于搭建 Web 服务器,开发接口,甚至创建博客.在下面这个列表中包括24个 Node.js 教程和在线指南.这些资源对于任何想要学习更多的关于 Node.js 的知识的开发人员都是很有用的. 您可能感兴趣的相关文章 经典网页设计:超炫动画效果单页网站 30个独具匠心的精美单页网站设计案例 25个以全屏照片为背景的精美网页作品 20个与众不同的网页联系表单设计案例 20个模糊背景在网站中的经典应

安装使用Mongoose配合Node.js操作MongoDB的基础教程【转载】

这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下 安装mongoose 使用express准备一个TestMongoDB项目,命令序列如下: express TestMongoDB cd TestMongoDB npm install 执行完上面的命令后,使用下面的命令安装mongoose: npm install mongoose -

hexo+git+node.js详细教程

这里默认安装了git+github: 安装Hexo $ cd d:/hexo $ npm install hexo-cli -g $ hexo init blog $ cd blog $ npm install $ hexo g # 或者hexo generate $ hexo s # 或者hexo server,可以在http://localhost:4000访问 这里有必要提下Hexo常用的几个命令:hexo generate (hexo g) 生成静态文件,会在当前目录下生成一个新的叫做p

Vue框架下的node.js安装教程

Vue框架下的node.js安装教程 python服务器.php  ->aphche.java ->tomcat.   iis -->它是一个可以运行JAVASCRIPTR 的运行环境 -->它可以作为后端语言(websocket \ ) --强大的包管理工具npm,可以使用它安装插件 -->VUE框架是基于node.js平台运行的 --->它是基于chrome浏览器的V8引擎,运行速度快,性能高效 安装淘宝镜像:npm install cnpm -g --regist

Node.js模块化教程

Node.js模块化教程 下载安装node.js 创建项目结构 |-modules |-module1.js |-module2.js |-module3.js|-app.js|-package.json {   "name": "commonJS-node",   "version": "1.0.0" } 下载第三方模块 npm install uniq --save 模块化编码 module1.js module.expo