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,因为字符串比较理论上是需要遍历所有字符的,性能和字符串长度成正比。

(0)

相关推荐

  • JavaScript常用判断写法大全(推荐)

    js验证表单大全,用JS控制表单提交,具体内容如下所示: 1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert("不能超过50个字符!"); document.a.b.focus(); return false; } } </script> <form name=a onsubmit="return test()"> <t

  • JavaScript判断变量是否为undefined的两种写法区别

    工作中我们经常需要判断某个变量/属性是否为undefined.通常有两种写法 复制代码 代码如下: // 方式1 typeof age === 'undefined'; // 方式2 age === undefined 这两种写法有什么区别吗? 应该使用哪一种呢?看看下面的例子 复制代码 代码如下: typeof age === 'undefined'; // true 标识符 age 没有声明过,输出true. 再看另一个例子 复制代码 代码如下: age === undefined; //

  • 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.lengt

  • 解析使用js判断只能输入数字、字母等验证的方法(总结)

    JS判断只能是数字和小数点0.不能输入中文1)<input onpaste="return false;" type="text" name="textfield" style="width:400px; ime-mode:disabled" value="">2)<script>function chkIt(frm){if (frm.n1.value.length>0&

  • 利用JS判断元素是否为数组的方法示例

    此处提供可供验证的数据类型 let a = [1,2,3,4,5,6]; let b = [ {name: '张飞', type: 'tank'}, {name: '关羽', type: 'soldier'}, {name: '刘备', type: 'shooter'}, ]; let c = 123; let d = 'www'; let e = {name: '安琪拉', type: 'mage'}; 1.通过Array.isArray() Array.isArray()能判断一个元素是否为

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

    前言: 在判断之前我们要先知道,js中的var定义的变量默认是字符串,如果单纯的比较字符串的话,会出现错误,需要先转化为int类型在做比较. [备注:110和18在你写的程序中是18大的,因为 这两个数都是字符串,而1和1相等之后比较1和8,当然是8大,所以18大.你在比较之前转换成INT型在比 . if(parseInt(num2)>parseInt(num1))  ] 错误实例: <script> function check() { var num1=document.form1.

  • JS判断是否为数字,是否为整数,是否为浮点数的代码

    正则表达式方法 复制代码 代码如下: function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/ if (!re.test(input.rate.value)) { alert("请输入数字(例:0.02)"); input.rate.focus(); return false; } } 下面为普通函数写法 复制代码 代码如下: function BAS

  • js判断元素是否隐藏的方法

    复制代码 代码如下: if( document.getElementById("div").css("display")==='none') if( document.getElementById("div").css("display")==='block') $("#div").is(":hidden"); // 判断是否隐藏 $("#div").is("

  • JS判断元素是否在数组内的实现代码

    一.JQuery 如果是用JQuery的话,可以用inArray()函数: jquery inarray()函数详解 jquery.inarray(value,array) 确定第一个参数在数组中的位置(如果没有找到则返回 -1 ). determine the index of the first parameter in the array (-1 if not found). 返回值 jquery 参数 value (any) : 用于在数组中查找是否存在 array (array) :

  • JS判断浏览器类型与操作系统的方法分析

    本文实例讲述了JS判断浏览器类型与操作系统的方法.分享给大家供大家参考,具体如下: navigator.userAgent : userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. navigator.platform : platform 属性是一个只读的字符串,声明了运行浏览器的操作系统和(或)硬件平台. 判断浏览器类型 IE浏览器 ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident

  • JavaScript判断是否为数字的几种方式汇总(推荐!)

    目录 前言 1. typeof.instanceof.Number.isInteger 2. parseInt.parseFloat 3. isNaN.isFinite 4. Number.isNaN.Number.isFinite 5. 正则表达式 6. 终极方案(推荐) 7. 结语 前言 js判断是否为数字的方式很多: typeof.instanceof.Number.isNumber parseInt.parseFloat isNaN.isFinite Number.isNaN.Numbe

  • js判断手机号运营商的方法

    本文实例讲述了js判断手机号运营商的方法.分享给大家供大家参考.具体如下: 在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联通.电信或其他,再根据不同的运营商做出相应的处理,下面介绍js中如何判断手机号的运营商的代码. js实现方法: var isChinaMobile = /^134[0-8]\\d{7}$|^(?:13[5-9]|147|15[0-27-9]|178|18[2-478])\\d{8}$/; //移动方面最新答复 var isChinaUnion =

随机推荐