javascript��算转整型存在风险 - 凡事预则立,�预则废

上�看到�徒正美�的�文,,看的时候自己也觉得推断的挺好的;�过刚好下�写了一个团购倒计时页�,�事拿过去用之�,�现时间过长会出现倒计时�走的情况,伪代�如下


var timer, timeout = ~~elem.getAttribute('data-timeout');
if(timeout > 0){
	timer = startTimeout(timeout, function(queue){
		//...
	});
}

其中的~~elem.getAttribute('data-timeout')(elem.getAttribute('data-timeout')|0,效果相�)就是�懒的方�去强制转整型,其类似的等价于parseInt(elem.getAttribute('data-timeout'),10)||0,以�一直认为是等价的,但是现在�能说是类似等价。

但是�事输出的数值为:2703986000,在断点调试时,�现没有进if也就是说转�或的数值�于0了,为了验��了如下测试:


~~'2703986000'; //-1590981296

'2703986000' | 0; //-1590981296

parseInt('2703986000'); //2703986000

~~'-15909812967'; //1270056217

'-15909812967' | 0; //1270056217

parseInt('-15909812967', 10); //-15909812967

测试�现��算强制转整型有边界值,而且边界值�于Number.MAX_VALUE,并且大于Number.MIN_VALUE,所以当在处�大数值的时候,使用��算是有风险的;

然���部分测试,求了一下��算的边界值(对��算�了解,�能与平�也有关系)


~~'2147483647'; //2147483647

~~'2147483648'; //-2147483648

~~'-2147483648'; //-2147483648

~~'-2147483649'; //2147483647

其实仔细看的�,上�还是有规律的;涉�到��算,�对之处请�砖�

共1评论

  1. 试试 1024*1024*1024*4 >> 0
    1024*1024*1024*2 >> 0
    1024*1024*1024 >> 0

    回�

�表评论

  • [URL] [URL2] [EMAIL] [QUOTE] UBB表情 [B] [I] [S] [U]

最新评论�回�

    loading

最近�表

    loading

网站分类

    loading

文章归档

    loading

�情链接

Top Comments Footer