`
zhouyrt
  • 浏览: 1180012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

这是在阅读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中的isXX系列

 

分享到:
评论
1 楼 382342003 2013-09-07  
NaN.length  === +NaN.length
console.log(); //false

相关推荐

    js 判断输入是否是数字.rar

    本示例“js 判断输入是否是数字.rar”提供了一个JavaScript代码的Demo,用于检查用户输入的内容是否为空或者是否全由数字组成。在实际应用中,这样的功能可以确保用户提交的数据符合预期格式,避免无效数据的提交。 ...

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

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

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

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

    javascript经典特效---数字翻译成英语.rar

    通过学习和理解这个“javascript经典特效---数字翻译成英语.rar”项目,开发者不仅可以掌握数字转换成英文的技巧,还能提升对JavaScript条件判断、字符串操作、函数封装等基础概念的理解。在实际应用中,这个功能...

    javascript层的属性事件写法

    JavaScript层的属性事件写法是前端开发中常见且基础的操作,它涉及到网页动态交互的核心。在JavaScript中,我们可以对HTML元素进行操作,设置其属性,响应用户触发的事件,从而实现丰富的用户界面。 首先,我们要...

    javascript常用判断函数

    此外,JavaScript还有其他很多内置的判断函数,如`isNaN`、`typeof`等,它们分别用于检测一个值是否为非数字和确定变量的类型。 在编写JavaScript代码时,正确使用这些判断函数能提高代码的健壮性和可维护性。理解...

    JavaScript数字格式化

    该文档为javascript的数字格式化方法,可用于保留小数位,强制添0等操作

    原生JavaScript数字时钟-内含29种样式

    在本文中,我们将深入探讨如何使用原生JavaScript创建一个数字时钟,并且涵盖29种不同的样式。这个项目不仅展示了JavaScript的基本概念,还涉及到CSS和HTML的交互,以及动态更新页面内容的技术。让我们一起深入了解...

    javascript数字验证脚本

    this.setCustomValidity('请输入5位整数和2位小数的数字'); } else { this.setCustomValidity(''); } }); }); ``` 在这个例子中,`#yourInputField`是需要验证的输入字段ID,当其值发生变化时,会触发验证函数...

    JavaScript dom操作 删除元素 示例代码

    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 dom操作 dom元素查询 示例代码...

    JavaScript如何删除数组元素!

    本篇文章将详细介绍几种在JavaScript中删除数组元素的方法,帮助开发者更好地理解和应用这些技巧。 1. **pop() 方法** `pop()` 方法用于删除并返回数组的最后一个元素。如果数组为空,它将不执行任何操作并返回 `...

    107个常用Javascript语句参数写法

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

    javascript控制文本框输入数字.doc

    ### JavaScript 控制文本框输入数字知识点详解 #### 一、概述 在Web开发中,经常需要验证用户输入的数据是否符合预期格式。对于数值输入,尤其是涉及到金额或精确度较高的场景时,确保用户输入合法的数字变得尤为...

    JS实现获取数字的各位数的数字

    1. **转换为字符串**:JavaScript中的数字没有内置的方法可以直接获取每一位的数字,所以我们通常会先将数字转换为字符串。使用`toString()`方法可以做到这一点。例如: ```javascript let num = 12345; let ...

    javascript 倒计时程序 图片数字

    在这个程序中,我们通常会用到JavaScript的核心概念,包括时间处理、DOM操作以及可能的CSS动画来实现数字的动态变化。接下来,我将详细讲解如何创建一个基于JavaScript的倒计时程序,并涉及与图片数字相关的实现。 ...

    将数字转成英文的js代码

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

    JS 判断是否是数字

    JavaScript(简称JS)是一种广泛用于Web开发的轻量级脚本语言,它的功能强大且灵活,其中一项常见的任务就是判断一个变量是否为数字。在JS中,数字可以是整数或浮点数,甚至可以是正无穷、负无穷或者NaN(非数字)。...

    javascript实现数字配对游戏的实例讲解

    在本文中,我们将讲解如何使用JavaScript语言来实现一个简单的数字配对游戏。游戏的规则相对简单,需要玩家在限定的时间内,通过记忆和逻辑推断来找出所有数字配对。下面将详细解释数字配对游戏的实现过程,包括游戏...

    JavaScript dom操作 添加和替换元素 示例代码

    JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换元素 示例代码JavaScript dom操作 添加和替换...

Global site tag (gtag.js) - Google Analytics