JS判断元素为数字的奇异写法分享


Posted in Javascript onAugust 01, 2012

这是在阅读underscore(1.3.3)源码中看到的,它的each方法

var each = _.each = _.forEach = function(obj, iterator, context) { 
if (obj == null) return; 
if (nativeForEach && obj.forEach === nativeForEach) { 
obj.forEach(iterator, context); 
} else if (obj.length === +obj.length) { 
for (var i = 0, l = obj.length; i < l; i++) { 
if (iterator.call(context, obj[i], i, obj) === breaker) return; 
} 
} else { 
for (var key in obj) { 
if (_.has(obj, key)) { 
if (iterator.call(context, obj[key], key, obj) === breaker) return; 
} 
} 
} 
};

该方法里有一句
if (obj.length === +obj.length)

看半天没明白,后经高人指点,这句等价于
if (typeof obj.length === 'number')

即是用来判断元素是否为数字类型的。typeof和Object.prototype.toString是常见的写法。而最后一种则不常见,常人难以理解。

一些库有类型判断的工具函数,如

function isNumber1(a){ 
return typeof a === 'number' 
}

又或者用Object.prototype.toString
function isNumber2(a) { 
return Object.prototype.toString.call(a) === '[object Number]' 
}

改成这种写法
function isNumber3(a){ 
return a === +a 
}

用各种类型测试下
var arr = ['1', true, false, undefined, null, {}, [], 1] 
for (var i=0; i<arr.length; i++) { 
console.log(isNumber3(arr[i])) 
}

结果只有数组最后的一项为true。即只有数字类型 a === +a 才为真。
为什么不用typeof,因为字符串比较理论上是需要遍历所有字符的,性能和字符串长度成正比。
Javascript 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
JS经典正则表达式笔试题汇总
Dec 15 Javascript
webpack vue项目开发环境局域网访问方法
Mar 20 Javascript
Vue中props的详解
May 16 Javascript
Java 生成随机字符的示例代码
Jan 13 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 #Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 #Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 #Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 #Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 #Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 #Javascript
jQuery.each()用法分享
Jul 31 #Javascript
You might like
URL Rewrite的设置方法
2007/01/02 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP微信支付实例解析
2016/07/22 PHP
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
python连接池实现示例程序
2013/11/26 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
骨干教师申报材料
2014/12/17 职场文书
五年级语文教学反思
2016/03/03 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
vue引入Excel表格插件的方法
2021/04/28 Vue.js
python 安全地删除列表元素的方法
2022/03/16 Python