`
greemranqq
  • 浏览: 975678 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

阅读更多

转自:http://www.cnblogs.com/snandy/archive/2012/08/01/2618815.html

Snandy停下来,思考才是进步的本质。


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

这是在阅读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 
 

 

分享到:
评论

相关推荐

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

    ### JS判断元素为数字的奇异写法解析 #### 背景介绍 在JavaScript编程过程中,经常需要对数据类型进行判断。例如,在处理数组时,我们可能需要知道数组中的某个元素是否为数字类型。通常情况下,我们会使用`typeof`...

    将数字转成英文的js代码

    将数字翻译成英语的JavaScript,可以自动判断出你输入的数字是多大,它会自动拼合,按亿、千万、百万的语法翻译出来,挺实用。

    常用js正则的写法

    ### 常用JS正则表达式写法详解 #### 1. 手机号码验证 在进行手机号码验证时,通常需要确保输入的是中国大陆有效的手机号码格式。根据描述中的代码示例,我们可以看到几种不同的正则表达式来匹配不同类型的手机号码...

    如何用JS判断两个数字的大小

    在JavaScript(JS)编程中,判断两个数字的大小是一个基础而重要的操作。它广泛应用于各种场景,例如数据排序、用户输入验证等。本文将详细阐述在JavaScript中如何正确判断两个数字的大小,并通过实例演示错误和正确...

    javascript版数字转化为中文传统的数字写法

    在JavaScript编程语言中,将阿拉伯数字转化为中文传统数字是一项实用的技术,尤其在处理财务、会计或者需要展示中文信息的场景下。本文将深入探讨如何使用JavaScript实现这一功能。 首先,我们需要了解中文数字的...

    JS复杂判断的更优雅写法代码详解

    我们编写js代码时经常遇到复杂逻辑判的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更...

    100多个很有用的javascript函数以及基础写法集合

    JavaScript 函数和基础写法大集合 JavaScript 是一种广泛应用于 Web 开发的编程语言,下面总结了 100 多个有用的 JavaScript 函数和基础写法。 输出语句 document.write("") 是 JavaScript 中最基本的输出语句,...

    javascript 注释的标准写法

    javascript和后台程序对比的缺点 1、不易读性; 2、不好调试性; ............ 有了以上特点,那么我们就要进行好的注释; javascript 注释的标准写法

    JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    JS(JavaScript)是广泛用于网页开发的一种编程语言。在日常开发中,掌握一些实用的编程小技巧,不仅能提高开发效率,还可以使代码更加优雅和健壮。接下来,我们将详细介绍一些JS中的小技巧,这些技巧有助于提升编程...

    js验证数字方法js验证数字方法

    ### JS验证数字方法详解 #### 一、背景介绍 在Web开发中,经常需要对用户输入的数据进行合法性检查,特别是当涉及到数字时。JavaScript作为前端脚本语言,提供了丰富的工具来帮助开发者完成这一任务。本文将详细...

    delphi阿拉伯数字转换成中文写法

    把阿拉伯数字转为汉字写法比如123456789转化为零壹贰叁肆伍陆柒捌玖,以及几百几千几万的数字都可以转化

    107个常用Javascript语句参数写法

    从给定的文件信息中,我们可以总结出一系列重要的JavaScript知识点,涵盖了从基本语法到DOM操作、数据类型转换、流程控制以及浏览器API的使用等各个方面。下面是对这些知识点的详细解释和扩展: ### 1. 输出语句:`...

    0~9数字田字格写法.doc

    数字田字格写法 数字田字格写法是一种特殊的写法,用于帮助人们更好地记忆和书写数字0-9。这种写法将数字与不同的物体或形状联系起来,使得数字更易于记忆和识别。下面是数字0-9的田字格写法详解: 0:像鸡蛋。...

    正则表达式大于50万的判断js与php写法.docx

    [0-9]`匹配1到9之间的数字,后面跟着任意数量的0至9的数字,`(500000)*`则匹配500000的任意倍数。`|`符号用于连接两种可能的匹配模式。 此外,代码还检查了投资金额是否超过用户的账户余额。如果输入的投资金额无效...

    IE、FF的JS兼容写法

    这篇博客文章“IE、FF的JS兼容写法”探讨了如何编写能够同时在IE和FF下运行的兼容性JavaScript代码。 首先,我们需要理解这两个浏览器对于DOM(Document Object Model)操作的处理方式有所不同。例如,IE使用的是`...

    【JavaScript源代码】JavaScript中判断的优雅写法示例.docx

    JavaScript 中判断的优雅写法示例 在 JavaScript 中,判断语句是非常常见的,但是当判断条件变得复杂时,代码就会变得冗长、难以阅读。因此,我们需要优化我们的代码,使其变得更加优雅/highlights。 一元判断 ---...

    人教版小学数学四年级上册《多位数的写法及改写》PPT课件.ppt

    多位数的写法是指用数字来表示大数的方法。这种方法可以帮助学生更好地理解和操作大数。 多位数的写法法则有两点:(1)从高位起,一级一级地往下写;(2)哪个数位上一个单位也没有就在那个数位上写0。例如,三亿...

    js写法规范.docx

    JS 编写规范 JS 编写规范是前端开发中必不可少的一部分,它不仅可以提高团队协作效率和代码维护性,还可以输出高质量的文档。以下是 JS 编写规范的要点: 一、规范目的 JS 编写规范的主要目的是为了提高团队协作...

    阿拉伯数字怎么写手写体好看.doc

    今天,我们将详细介绍阿拉伯数字的写法,从数字 0 到数字 9,我们将一步一步地指导您如何写出漂亮的阿拉伯数字。 首先,让我们从数字 1 开始。数字 1 的写法是从右上角开始,斜线到左下角,不是简单的将两角连起来...

Global site tag (gtag.js) - Google Analytics