【发布时间】:2014-02-01 14:46:54
【问题描述】:
JavaScript 中(奇怪的)数字转换背后的秘密是什么?
我已经设法在下面介绍的几个测试用例中找出了一些使用isnumeric 函数的方法。
//
function isnumeric(n) {
try {
return (isFinite(n = n.valueOf()) || ((1 / 0 === Math.abs(n)) && (n + n === n)))
&& eval(n) === parseFloat(Number(n));
} catch (b) {}
return false;
}
console.clear();
[
.1, 1, 0, "0", Infinity, 1/0, -1/0, +null, 01, 037, 1 + [],
Math.pow([], 2), 0xff, 0x12ef, +[], -[], -1/[], []/Infinity,
"0x12", 1/null, null/1, Math.sqrt([]), []/1, Infinity/[], new Date,
Math.E, "1.2e-12", 0.1e11, null + +[], Math.sqrt(null), 1/"\t\r\n ",
" \t\r\n\uFEFF\xA0\x0B\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000"/1
].every(isnumeric);
//
// true
//
isFinite(n = n.valueOf()) 处理 numeric-like-values(字符串、数字、日期),
(1 / 0 === Math.abs(n)) && (n + n === n) 从(字符串)"Infinity" 中过滤掉 Infinity,
eval(n) === parseFloat(Number(n)) 部分句柄 string-numerics 包含字符:“x、e”等。
谢谢!
【问题讨论】:
-
你有什么问题?
-
EEK。
evaling 随机字符串是个坏主意。 -
>>> JavaScript 中(奇怪的)数字转换背后的秘密是什么?
-
你能详细说明这意味着什么吗?哪些数字转换?在什么情况下?
-
...'评估随机字符串是个坏主意';它不会评估随机字符串,它们不会在 eval 发生之前通过测试。
标签: javascript numbers type-conversion