这是在阅读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,因为字符串比较理论上是需要遍历所有字符的,性能和字符串长度成正比。此外isNumber3的代码最少。
isNumber3可以满足编程过程中的多数需求,但并不代表它和isNumber1/isNumber2完全等价。比如NaN
isNumber1(NaN) // true isNumber2(NaN) // true isNumber3(NaN) // false
相关:
相关推荐
JavaScript的一个小程序,判断输入是否为数字
在这个场景中,我们讨论的是一个用JavaScript实现的数字时钟,它旨在实时显示当前时间,并且针对不同的浏览器(如Internet Explorer和Firefox)进行了兼容性优化。 首先,让我们深入了解一下JavaScript数字时钟的...
本示例“js 判断输入是否是数字.rar”提供了一个JavaScript代码的Demo,用于检查用户输入的内容是否为空或者是否全由数字组成。在实际应用中,这样的功能可以确保用户提交的数据符合预期格式,避免无效数据的提交。 ...
JavaScript 函数和基础写法大集合 JavaScript 是一种广泛应用于 Web 开发的编程语言,下面总结了 100 多个有用的 JavaScript 函数和基础写法。 输出语句 document.write("") 是 JavaScript 中最基本的输出语句,...
通过学习和理解这个“javascript经典特效---数字翻译成英语.rar”项目,开发者不仅可以掌握数字转换成英文的技巧,还能提升对JavaScript条件判断、字符串操作、函数封装等基础概念的理解。在实际应用中,这个功能...
JavaScript层的属性事件写法是前端开发中常见且基础的操作,它涉及到网页动态交互的核心。在JavaScript中,我们可以对HTML元素进行操作,设置其属性,响应用户触发的事件,从而实现丰富的用户界面。 首先,我们要...
此外,JavaScript还有其他很多内置的判断函数,如`isNaN`、`typeof`等,它们分别用于检测一个值是否为非数字和确定变量的类型。 在编写JavaScript代码时,正确使用这些判断函数能提高代码的健壮性和可维护性。理解...
该文档为javascript的数字格式化方法,可用于保留小数位,强制添0等操作
在本文中,我们将深入探讨如何使用原生JavaScript创建一个数字时钟,并且涵盖29种不同的样式。这个项目不仅展示了JavaScript的基本概念,还涉及到CSS和HTML的交互,以及动态更新页面内容的技术。让我们一起深入了解...
this.setCustomValidity('请输入5位整数和2位小数的数字'); } else { this.setCustomValidity(''); } }); }); ``` 在这个例子中,`#yourInputField`是需要验证的输入字段ID,当其值发生变化时,会触发验证函数...
JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 ...
在JavaScript中,对DOM元素进行判断和操作是前端开发中常见的任务。在本文中,我们将深入探讨如何判断一个元素在DOM中是否存在,以及如何判断它是否在可视的DOM中。 首先,我们来看如何判断元素是否存在于DOM中。...
在JavaScript中,对字符串进行数字判断是常见的操作,特别是在处理用户输入或者解析数据时。本文将详细介绍如何使用JavaScript来判断一个字符串是否可以转换为数字,以及需要注意的一些陷阱。 首先,我们要理解...
JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码...
JavaScript源代码的数字合并游戏是一种基于编程的游戏设计,它通常涉及到使用JavaScript语言来实现一个数字合并的逻辑。这种游戏的灵感可能来源于流行的2048游戏,玩家通过滑动屏幕来合并数字,达到特定的目标值。在...
本篇文章将详细介绍几种在JavaScript中删除数组元素的方法,帮助开发者更好地理解和应用这些技巧。 1. **pop() 方法** `pop()` 方法用于删除并返回数组的最后一个元素。如果数组为空,它将不执行任何操作并返回 `...
8、原生JavaScript判断是否为数字类型 9、原生JavaScript设置cookie值 10、原生JavaScript获取cookie值 11、原生JavaScript加入收藏夹 12、原生JavaScript设为首页 13、原生JavaScript判断IE6 14、原生JavaScript...
从给定的文件信息中,我们可以总结出一系列重要的JavaScript知识点,涵盖了从基本语法到DOM操作、数据类型转换、流程控制以及浏览器API的使用等各个方面。下面是对这些知识点的详细解释和扩展: ### 1. 输出语句:`...
JavaScript(简称JS)是一种广泛用于Web开发的轻量级脚本语言,它的功能强大且灵活,其中一项常见的任务就是判断一个变量是否为数字。在JS中,数字可以是整数或浮点数,甚至可以是正无穷、负无穷或者NaN(非数字)。...
在本文中,我们将讲解如何使用JavaScript语言来实现一个简单的数字配对游戏。游戏的规则相对简单,需要玩家在限定的时间内,通过记忆和逻辑推断来找出所有数字配对。下面将详细解释数字配对游戏的实现过程,包括游戏...