我在JavaScript中遇到了烦人的问题.
> parseInt(1 / 0, 19)
> 18
Run Code Online (Sandbox Code Playgroud)
为什么要parseInt回来18?
好吧,所以我正在搞乱parseInt来看看它如何处理尚未初始化的值,我偶然发现了这个宝石.对于任何24或以上的基数,都会发生以下情况.
parseInt(null, 24) === 23 // evaluates to true
Run Code Online (Sandbox Code Playgroud)
我在IE,Chrome和Firefox中对它进行了测试,它们都是警告的,所以我认为它必须在某个地方的规范中.一个快速的谷歌搜索没有给我任何结果所以我在这里,希望有人可以解释.
我记得听过他说的Crockford演讲,typeof null === "object"因为疏忽导致Object和Null在内存中有一个几乎相同的类型标识符,或者沿着这些行,但我现在找不到那个视频了.
试一试:http://jsfiddle.net/robert/txjwP/
编辑校正:较高的基数返回不同的结果,32返回785077
编辑2来自zzzzBov:[24...30]:23, 31:714695, 32:785077, 33:859935, 34:939407, 35:1023631, 36:1112745
TL;博士
解释为什么parseInt(null, 24) === 23是真实的陈述.
我只是想知道是否有更好的解决方案来解析字符串中的字符中的数字(假设我们知道索引n处的字符是数字).
String element = "el5";
String s;
s = ""+element.charAt(2);
int x = Integer.parseInt(s);
//result: x = 5
Run Code Online (Sandbox Code Playgroud)
(没用说,这只是一个例子)
我正在阅读这篇文章,但我对parseInt中使用radix参数章节所写的内容感到困惑
为什么parseInt(8, 3)→ NaN和parseInt(16, 3)→ 1?
据我所知8和16不基地,3个数字,所以parseInt(16, 3)应该返回NaN太
可能重复:
在Javascript中截断字符串的前导零
在Javascript中从数字中删除前导零的最简单和跨浏览器兼容的方法是什么?
例如,如果我有一个文本框值为014或065,它应该只返回14或65
我读过一篇关于JavaScript parseInt 的文章,其中有这个问题:
parseInt(0.5); // => 0
parseInt(0.05); // => 0
parseInt(0.005); // => 0
parseInt(0.0005); // => 0
parseInt(0.00005); // => 0
parseInt(0.000005); // => 0
parseInt(0.0000005); // => 5
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
parseFloat("NaN")
Run Code Online (Sandbox Code Playgroud)
返回"NaN",但是
parseFloat("NaN") == "NaN"
Run Code Online (Sandbox Code Playgroud)
返回false.现在,这确实是一件好事,它确实会返回错误,但我不明白这是怎么回事.JavaScript创建者是否只是将此作为特例?因为否则我无法理解这是如何返回false的.
在JavaScript中使用随机数字时,我发现了一个令人惊讶的错误,可能是谷歌Chrome中的V8 JavaScript引擎.考虑:
// Generate a random number [1,5].
var rand5 = function() {
return parseInt(Math.random() * 5) + 1;
};
// Return a sample distribution over MAX times.
var testRand5 = function(dist, max) {
if (!dist) { dist = {}; }
if (!max) { max = 5000000; }
for (var i=0; i<max; i++) {
var r = rand5();
dist[r] = (dist[r] || 0) + 1;
}
return dist;
};
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时,testRand5()我得到以下结果(当然,每次运行略有不同,您可能需要将"max"设置为更高的值以显示错误):
var d = testRand5();
d = {
1: …Run Code Online (Sandbox Code Playgroud) 我正在将一些JSON文件导入到我的Parse.com项目中,并且我不断收到错误"无效密钥:值对".
它表示存在意外的"8".
这是我的JSON的一个例子:
}
"Manufacturer":"Manufacturer",
"Model":"THIS IS A STRING",
"Description":"",
"ItemNumber":"Number12345",
"UPC":083456789012,
"Cost":"$0.00",
"DealerPrice":" $0.00 ",
"MSRP":" $0.00 ",
}
Run Code Online (Sandbox Code Playgroud)
如果我通过删除0from "UPC":083456789012,或将其转换为JSON来更新JSON "UPC":"083456789012",变为有效.
JSON真的不能接受以问题开头的整数0,或者是否有办法解决问题?
所以,在Java中,您知道如何声明这样的整数:
int hex = 0x00ff00;
Run Code Online (Sandbox Code Playgroud)
我认为你应该能够扭转这个过程.我有这个代码:
Integer.valueOf(primary.getFullHex());
Run Code Online (Sandbox Code Playgroud)
其中primary是自定义Color类的对象.它的构造函数采用Integer表示不透明度(0-99)和十六进制字符串(例如00ff00).
这是getFullHex方法:
public String getFullHex() {
return ("0x" + hex);
}
Run Code Online (Sandbox Code Playgroud)
当我调用这个方法时,它给出了我的NumberFormatException:
java.lang.NumberFormatException: For input string: "0xff0000"
Run Code Online (Sandbox Code Playgroud)
我无法理解发生了什么.有人可以解释一下吗?