Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “什么是”呢&燃气轮机&燃气轮机&燃气轮机&引用;JS中的操作员?_Javascript_Arrays_Iterator_Operators - Fatal编程技术网

Javascript “什么是”呢&燃气轮机&燃气轮机&燃气轮机&引用;JS中的操作员?

Javascript “什么是”呢&燃气轮机&燃气轮机&燃气轮机&引用;JS中的操作员?,javascript,arrays,iterator,operators,Javascript,Arrays,Iterator,Operators,可能重复: 在以下代码行中找到此运算符: var t = Object(this), len = t.length >>> 0; 这个接线员是什么意思 完整代码如下。这是JSsome方法的代码: if (!Array.prototype.some) { Array.prototype.some = function(fun /*, thisp */) { "use strict"; if (this == null) throw ne

可能重复:

在以下代码行中找到此运算符:

var t = Object(this),
        len = t.length >>> 0;
这个接线员是什么意思

完整代码如下。这是JS
some
方法的代码:

if (!Array.prototype.some) {
  Array.prototype.some = function(fun /*, thisp */) {
    "use strict";

    if (this == null) throw new TypeError();

    var t = Object(this),
        len = t.length >>> 0;

    if (typeof fun != "function") throw new TypeError();

    var thisp = arguments[1];

    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisp, t[i], i, t))
        return true;
    }

    return false;
  };
}
if(!Array.prototype.some){
Array.prototype.some=函数(fun/*,thisp*/){
“严格使用”;
如果(this==null)抛出新的TypeError();
var t=对象(此),
len=t.length>>>0;
如果(typeof fun!=“函数”)抛出新的TypeError();
var thisp=参数[1];
对于(变量i=0;i
>
是右移,不带标志扩展

如果对负数使用
>
运算符,则结果也将为负数,因为原始符号位被复制到所有新位中。使用
>
时,将改为复制零


在这种特殊情况下,它只是用来将
长度
字段限制为无符号31位整数,或者换句话说,将Javascript的本机IEEE754“double”数字“强制转换”为整数。

这是一个零填充右移。当您对一个数字进行位移位时,您可以决定用零或符号位填充最左边的位


在2的补码表示法中,负数的前导位是1,而正数的前导位是0。因此,如果你不“扩展符号”(用零代替填充)并移动负数,它将产生一个正数。

看看:谷歌是你的朋友。谢谢你的提醒。但谷歌没有显示任何“什么是运营商>>>”搜索结果。还有这个网站。他们都说“没有结果”。是的,遗憾的是,这个问题已经结束了——为什么在这里使用这个特殊运算符的上下文比它的一般用法的细节更重要。值得一提的是,签名的右移运算符在这里没有什么特别之处。只要在ecmascript中应用按位运算符,值就会转换为32位版本。所以在这里使用
~~t.length
也会有同样的结果。@jAndy实际上不会-
~~n
仍然会为负输入产生负结果。@Alnitak:你说得对。doh,无论如何,如果出于某种原因,一个负数被转换成0,结果将是一个相当大的数字。这是需要的吗?但是,对于32位转换,我的上述陈述仍然正确。
-1>>0
给出了
4294967295
,这对以后的迭代不是很糟糕吗?(正如在OP的脚本中,
;i
)在阅读了解释之后——仍然有点困惑,因为我没有太多地接触到按位场景——在代码示例中用简单的术语来说——这样做是为了防止出现负数吗?我在你的最后一句话里迷路了。谢谢