这是在阅读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 中,判断语句是非常常见的,但是当判断条件变得复杂时,代码就会变得冗长、难以阅读。因此,我们需要优化我们的代码,使其变得更加优雅/highlights。 一元判断 ---...
JavaScript 函数和基础写法大集合 JavaScript 是一种广泛应用于 Web 开发的编程语言,下面总结了 100 多个有用的 JavaScript 函数和基础写法。 输出语句 document.write("") 是 JavaScript 中最基本的输出语句,...
通过学习和理解这个“javascript经典特效---数字翻译成英语.rar”项目,开发者不仅可以掌握数字转换成英文的技巧,还能提升对JavaScript条件判断、字符串操作、函数封装等基础概念的理解。在实际应用中,这个功能...
JavaScript层的属性事件写法是前端开发中常见且基础的操作,它涉及到网页动态交互的核心。在JavaScript中,我们可以对HTML元素进行操作,设置其属性,响应用户触发的事件,从而实现丰富的用户界面。 首先,我们要...
javascript和后台程序对比的缺点 1、不易读性; 2、不好调试性; ............ 有了以上特点,那么我们就要进行好的注释; javascript 注释的标准写法
此外,JavaScript还有其他很多内置的判断函数,如`isNaN`、`typeof`等,它们分别用于检测一个值是否为非数字和确定变量的类型。 在编写JavaScript代码时,正确使用这些判断函数能提高代码的健壮性和可维护性。理解...
该文档为javascript的数字格式化方法,可用于保留小数位,强制添0等操作
在本文中,我们将深入探讨如何使用原生JavaScript创建一个数字时钟,并且涵盖29种不同的样式。这个项目不仅展示了JavaScript的基本概念,还涉及到CSS和HTML的交互,以及动态更新页面内容的技术。让我们一起深入了解...
JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 删除元素 示例代码JavaScript dom操作 ...
JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码...
在JavaScript中,对字符串进行数字判断是常见的操作,特别是在处理用户输入或者解析数据时。本文将详细介绍如何使用JavaScript来判断一个字符串是否可以转换为数字,以及需要注意的一些陷阱。 首先,我们要理解...
从给定的文件信息中,我们可以总结出一系列重要的JavaScript知识点,涵盖了从基本语法到DOM操作、数据类型转换、流程控制以及浏览器API的使用等各个方面。下面是对这些知识点的详细解释和扩展: ### 1. 输出语句:`...
### JavaScript 控制文本框输入数字知识点详解 #### 一、概述 在Web开发中,经常需要验证用户输入的数据是否符合预期格式。对于数值输入,尤其是涉及到金额或精确度较高的场景时,确保用户输入合法的数字变得尤为...
在这个程序中,我们通常会用到JavaScript的核心概念,包括时间处理、DOM操作以及可能的CSS动画来实现数字的动态变化。接下来,我将详细讲解如何创建一个基于JavaScript的倒计时程序,并涉及与图片数字相关的实现。 ...
JavaScript(简称JS)是一种广泛用于Web开发的轻量级脚本语言,它的功能强大且灵活,其中一项常见的任务就是判断一个变量是否为数字。在JS中,数字可以是整数或浮点数,甚至可以是正无穷、负无穷或者NaN(非数字)。...
在本文中,我们将讲解如何使用JavaScript语言来实现一个简单的数字配对游戏。游戏的规则相对简单,需要玩家在限定的时间内,通过记忆和逻辑推断来找出所有数字配对。下面将详细解释数字配对游戏的实现过程,包括游戏...
JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换...