今天群里讨论高效判断值为非负整数,司徒正美整理了一些算法,见"判定是否为非负整数"。
我也想了3个算法
function(n) { return ( n << 1 >>> 1 === n ); // 没有考虑到大于int32最大正整数的情况 }, function(n) { return ( +n === n && n >= 0 ); // 没有考虑到小数的情况-_-! }, function(n) { return ( parseInt(n) === n && n >= 0 ); // 貌似只有这个靠谱 },
全部算法测试:http://dishuostec.sinaapp.com/javascript/jasmine/nonnegative_integer/test.html
最终只有这个靠谱
function(n) { return ( parseInt(n) === n && n >= 0 ); }
结果截图