`
zhouyrt
  • 浏览: 1171977 次
  • 性别: 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

相关推荐

    JavaScript 判断输入是否为数字

    JavaScript的一个小程序,判断输入是否为数字

    基于JavaScript的数字时钟

    在这个场景中,我们讨论的是一个用JavaScript实现的数字时钟,它旨在实时显示当前时间,并且针对不同的浏览器(如Internet Explorer和Firefox)进行了兼容性优化。 首先,让我们深入了解一下JavaScript数字时钟的...

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

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

    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中的方法

    在JavaScript中,对DOM元素进行判断和操作是前端开发中常见的任务。在本文中,我们将深入探讨如何判断一个元素在DOM中是否存在,以及如何判断它是否在可视的DOM中。 首先,我们来看如何判断元素是否存在于DOM中。...

    javaScript 判断字符串是否为数字的简单方法

    在JavaScript中,对字符串进行数字判断是常见的操作,特别是在处理用户输入或者解析数据时。本文将详细介绍如何使用JavaScript来判断一个字符串是否可以转换为数字,以及需要注意的一些陷阱。 首先,我们要理解...

    JavaScript dom操作 dom元素查询 示例代码

    JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码...

    JavaScript源代码的数字合并游戏.zip

    JavaScript源代码的数字合并游戏是一种基于编程的游戏设计,它通常涉及到使用JavaScript语言来实现一个数字合并的逻辑。这种游戏的灵感可能来源于流行的2048游戏,玩家通过滑动屏幕来合并数字,达到特定的目标值。在...

    JavaScript如何删除数组元素!

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

    100个直接可以拿来用的JavaScript实用功能代码片段(1-10)

    8、原生JavaScript判断是否为数字类型 9、原生JavaScript设置cookie值 10、原生JavaScript获取cookie值 11、原生JavaScript加入收藏夹 12、原生JavaScript设为首页 13、原生JavaScript判断IE6 14、原生JavaScript...

    107个常用Javascript语句参数写法

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

    JS 判断是否是数字

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

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

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

Global site tag (gtag.js) - Google Analytics