我感觉 js 的坑特别多

2016-02-18 17:45:17 +08:00
 lxy
ar = [NaN];
for (var i in ar) { console.log(i);};
// 输出 0 ! 至今不知为何。

parseInt(0x9, 16);
// 9
parseInt(0x10, 16)
// 22 <- insteresting!
2007 次点击
所在节点    JavaScript
9 条回复
Arrowing
2016-02-18 17:52:29 +08:00
1 、 for 语句将 ar 当成 object 解析,因为数组本身就是一个 object ,数组的索引值与 object 的 key 对应。这里你可以这样理解 var ar = {0: NaN};for (var i in ar) { console.log(i);};

2 、 http://www.w3school.com.cn/jsref/jsref_parseInt.asp

parseInt(string, radix)

参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0 ,则数字将以 10 为基础来解析。如果它以 “ 0x ” 或 “ 0X ” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36 ,则 parseInt() 将返回 NaN 。
Arrowing
2016-02-18 17:55:55 +08:00
PS: parseInt(0x10, 16) 等于 parseInt(16, 16)
em2046
2016-02-18 17:59:37 +08:00
@Arrowing 哈哈
vghdjgh
2016-02-18 17:59:56 +08:00
object -> for...in
array -> for...of
Troevil
2016-02-18 18:08:16 +08:00
@Arrowing

parseInt(0x10, 16) = 22
parseInt('0x10', 16) = 16
何解
YuJianrong
2016-02-18 18:16:46 +08:00
推荐个文档,特别清楚。里面查一下就知道为什么是那个结果了。
http://www.ecma-international.org/publications/standards/Ecma-262.htm
Arrowing
2016-02-18 18:38:44 +08:00
@Troevil

parseInt(0x10, 16) = parseInt(0x10.toString(), 16) = parseInt('16', 16)
Troevil
2016-02-18 19:02:10 +08:00
@Arrowing ... 晕了,原来如此..
SoloCompany
2016-02-18 21:01:47 +08:00
也真是佩服柯南的耐心

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX