小编Rog*_*ier的帖子

iPad上的javascript unsigned shift操作符出了什么问题?

我不小心碰到了iPad上Safari的javascript引擎中一个非常奇怪的错误.

无符号移位运算符>>>应该按位右移数字.我在脚本中遇到了一些错误,这些错误在其他平台上运行良好,将其剥离并最终得到:

<html><head><script type='text/javascript'>

var one = 1;

function Zero()
{
    return one*0;
}

function Strange()
{
     return one = (Zero()+1) >>> 0;
}

var s = 'A bunch of ones: '; // except on iPad :(
for (var i=0; i<200; i++) 
{
     s += Strange()+' ';
}
document.write(s);

</script></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)

现场演示

奇怪的是,它正确地生成了一堆,但在某个时刻,某些东西会中断并且从那时起它只会输出零.

显然>>> 0在这里毫无意义(零位置的移位通常什么都不做,尽管如果javascript做出这种区分,它可能会强制整数变为无符号).这只是为了证明这个问题,如果你省略了>>> 0它没有显示出来.在我的实际情况中,有不同的数字和更复杂的表达涉及,但同样的事情发生:一切都工作,直到一些迭代,然后一些'休息'和变量突然变成并保持为零,即使在后续计算真正应该做他们非零.

适用于Android和PC浏览器.奇怪吧?

javascript unsigned shift ipad operator-keyword

10
推荐指数
1
解决办法
251
查看次数

JavaScript 源代码中的换行符或空格/制表符有何不同?(甚至在评论中!?)

我总是假设 JavaScript 源代码中的所有空白(空格、制表符、换行符)都是“相等的”,即它们对于分隔语言元素(例如标识符、关键字、运算符等)都是有效的。

然而,我注意到换行符与空格或制表符之间有一个奇怪的区别。甚至在评论里面!

这工作正常:(函数定义和函数调用之间的换行符,但没有分号)

var bla = function() { alert('hello') }
bla();
Run Code Online (Sandbox Code Playgroud)

这也有效:(结束 } 字符和 bla() 函数调用之间的分号)

var bla = function() { alert('hello') };bla();
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用:(无论只有一个空格或制表符,还是多个,或没有,都没有区别)

var bla = function() { alert('hello') } bla();
Run Code Online (Sandbox Code Playgroud)

事情变得更奇怪了。

这也不起作用:(由包含空格、制表符和分号的注释分隔)

var bla = function() { alert('hello') } /*  ; */ bla();
Run Code Online (Sandbox Code Playgroud)

但这确实:(包含换行符的注释)

var bla = function() { alert('hello') }/*
*/bla();
Run Code Online (Sandbox Code Playgroud)

现场 jsfiddle 演示:

这是 JavaScript 中的错误,还是我遗漏了什么?

javascript whitespace comments

4
推荐指数
1
解决办法
958
查看次数