D3教程提供了一个生成随机序列的函数:
var t = 1297110663, // start time (seconds since epoch)
v = 70, // start value (subscribers)
data = d3.range(33).map(next); // starting dataset
function next() {
return {
time: ++t,
value: v = ~~Math.max(10, Math.min(90, v + 10 * (Math.random() - .5)))
};
}注意~ (tilda tilda) in:
value: v = ~~Math.max(10, Math.min(90, v + 10 * (Math.random() - .5)))通过在javascript终端中游玩,我看到:
~~1
1
~~-1
-1
~~-1.3
-1
parseInt(5)
5
parseInt(-5)
-5
parseInt(-5.3)
-5
parseInt(5.3)
5既然~~和parseInt似乎是等价的,那么使用parseInt的理由是什么?
发布于 2012-05-31 21:05:23
parseInt不限于签名的32位数字。
// Top range for a bitwise operator provides a valid result
~~((Math.pow(2,32)/2)-1); // 2147483647
// Beyond the top range provides undesired result
~~(Math.pow(2,32)/2); // -2147483648此外,使用parseInt,您可以指定基数。
发布于 2012-05-31 21:05:10
~~"red" === 0
isNaN(parseInt("red"))parseInt也可以处理32位以上的数字。
发布于 2012-05-31 21:10:33
简单:它的可读性和方便性更强。
按位不使用运算符是为其他用途而设计的,但可能被误用于截断浮点值。在您的示例中,Math.floor也是可能的。
而且,在许多情况下,它们的行为并不相似。parseInt不限于32位,它可以解析以不同位置符号表示的数字,还可以用NaN处理非数字值。
https://stackoverflow.com/questions/10841204
复制相似问题