在这里按位左移有什么作用?

时间:2019-09-12 05:05:59

标签: javascript

https://stackoverflow.com/a/15106541/10757573

在此线程中,解决方案使用以下代码:

var randomProperty = function (obj) {
    var keys = Object.keys(obj)
    return obj[keys[ keys.length * Math.random() << 0]];
};

在答案的评论中,一位用户将按位移位解释为:

  

它更像是parseInt(keys.length * Math.random(), 0)的简写


请问有人可以解释左移0与parseInt的相同之处,或者它一般如何工作?

我正在使用这种语法,并且效果很好,但是我不知道它在做什么。

2 个答案:

答案 0 :(得分:1)

选择随机数组元素的惯用法是

array[Math.floor(array.length * Math.random())]

此代码正在使用<< 0作为Math.floor()的快捷方式。 keys.length * Math.random()将是一个浮点数。 <<运算符要求其操作数为整数,因此它将自动将浮点数转换为整数,并且它会像Math.floor()一样通过舍入来实现。

答案 1 :(得分:1)

value << 0为非整数时,在JavaScript中执行value具有将value强制转换为整数的效果。在这种情况下,这是必需的,因为Math.random()返回一个浮点数,该浮点数不能用作整数索引器(keysArray,因此由整数索引)。

parseInt( /*string:*/ textValue, /*radix:*/ 0 )不会将数字转换为“基数0”,而是在radix == 0时,parseInt函数会将textValue解析为基数10,除非textValue0x开头,在这种情况下它将解析为基数16。