首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >~~对parseInt?

~~对parseInt?
EN

Stack Overflow用户
提问于 2012-05-31 21:01:37
回答 3查看 6.9K关注 0票数 16

可能重复: JavaScript中的“双倾斜”(~~)算子是什么?

D3教程提供了一个生成随机序列的函数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    value: v = ~~Math.max(10, Math.min(90, v + 10 * (Math.random() - .5)))

通过在javascript终端中游玩,我看到:

代码语言:javascript
复制
~~1
1
~~-1
-1
~~-1.3
-1
parseInt(5)
5
parseInt(-5)
-5
parseInt(-5.3)
-5
parseInt(5.3)
5

既然~~和parseInt似乎是等价的,那么使用parseInt的理由是什么?

EN

回答 3

Stack Overflow用户

发布于 2012-05-31 21:05:23

parseInt不限于签名的32位数字。

代码语言:javascript
复制
   // 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,您可以指定基数。

票数 9
EN

Stack Overflow用户

发布于 2012-05-31 21:05:10

代码语言:javascript
复制
~~"red" === 0

isNaN(parseInt("red"))

parseInt也可以处理32位以上的数字。

票数 2
EN

Stack Overflow用户

发布于 2012-05-31 21:10:33

简单:它的可读性和方便性更强。

按位不使用运算符是为其他用途而设计的,但可能被误用于截断浮点值。在您的示例中,Math.floor也是可能的。

而且,在许多情况下,它们的行为并不相似。parseInt不限于32位,它可以解析以不同位置符号表示的数字,还可以用NaN处理非数字值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10841204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档