相关疑难解决方法(0)

1603
推荐指数
22
解决办法
132万
查看次数

什么是JavaScript >>>运算符以及如何使用它?

我正在查看Mozilla的代码,它为Array添加了一个过滤方法,它有一行代码让我很困惑.

var len = this.length >>> 0;
Run Code Online (Sandbox Code Playgroud)

我以前从未见过用于JavaScript的>>>.
它是什么,它做了什么?

javascript operators bit-shift

141
推荐指数
6
解决办法
3万
查看次数

为什么setTimeout()"中断"大毫秒延迟值?

当传递一个大的毫秒值时,我遇到了一些意想不到的行为setTimeout().例如,

setTimeout(some_callback, Number.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

setTimeout(some_callback, Infinity);
Run Code Online (Sandbox Code Playgroud)

两者都导致some_callback几乎立即运行,好像我已经通过0而不是大量的延迟.

为什么会这样?

javascript settimeout

95
推荐指数
4
解决办法
3万
查看次数

JavaScript三倍大于

我在另一个StackOverflow帖子上看到了这种语法,并对它的作用感到好奇:

var len = this.length >>> 0;

什么>>>意味着什么?

javascript

83
推荐指数
3
解决办法
2万
查看次数

为什么0乘以截断小数?

我最近发现了这段JavaScript代码:

Math.random() * 0x1000000 << 0
Run Code Online (Sandbox Code Playgroud)

我知道第一部分只是生成0到0x1000000(== 16777216)之间的随机数.

但第二部分似乎很奇怪.执行0位移位有什么意义?我不认为它会做任何事情.然而,经过进一步调查,我注意到0的偏移似乎截断了数字的小数部分.此外,无论是右移,左移,还是无符号右移,都无关紧要.

> 10.12345 << 0
10
> 10.12345 >> 0
10
> 10.12345 >>> 0
10
Run Code Online (Sandbox Code Playgroud)

我用Firefox和Chrome测试过,行为是一样的.那么,这个观察的原因是什么?它只是JavaScript的细微差别,还是也出现在其他语言中?我以为我理解了位移,但这令我感到困惑.

javascript numbers operators bit-shift bitwise-operators

20
推荐指数
3
解决办法
5713
查看次数

x >>> 0做什么?

可能重复:
零填充位移0有什么用?(a >>> 0)

我一直在尝试我的一个项目中的一些函数式编程概念,我正在阅读Array.prototype.map,这是ES5中的新功能,看起来像这样:

Array.prototype.map = function(fun) {
    "use strict";
    if (this === void 0 || this === null) {
        throw new TypeError();
    }
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function") {
        throw new TypeError();
    }
    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
        if (i in t) {
            res[i] = fun.call(thisp, t[i], i, t);
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

javascript bitwise-operators

15
推荐指数
1
解决办法
1700
查看次数

为什么MDC原型函数以这种方式编写?

在MDC中,有大量代码片段意味着在不支持它们的浏览器中实现对新ECMAScript标准的支持,例如Array.prototype.map函数:

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

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        res[i] = fun.call(thisp, t[i], i, t);
    }

    return res;
  };
}
Run Code Online (Sandbox Code Playgroud)

使用此功能的好处是什么(如果有的话)而不是 …

javascript

12
推荐指数
1
解决办法
804
查看次数

在JavaScript中在数组中找到连续子阵列的优雅方法?

我想编写一个函数,从给定的起始索引中查找给定数组中的连续子数组,如果找到则返回数组中子数组的索引,如果找不到,则返回-1.这类似于String.indexOf,但是对于数组和子数组而不是字符串和子字符串.

这是我的工作代码:

var find_csa = function (arr, subarr, from_index) {
    if (typeof from_index === 'undefined') {
        from_index = 0;
    }

    var i, found, j;
    for (i = from_index; i < 1 + (arr.length - subarr.length); ++i) {
        found = true;
        for (j = 0; j < subarr.length; ++j) {
            if (arr[i + j] !== subarr[j]) {
                found = false;
                break;
            }
        }
        if (found) return i;
    }
    return -1;
};
Run Code Online (Sandbox Code Playgroud)

这些是我的测试和他们的期望值:

console.log(find_csa([1, 2, 3, 4, 5], [2, 3, …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

12
推荐指数
2
解决办法
4254
查看次数

在javascript中执行"整数"转换/类型转换的惯用方法是什么?

另一个问题是关于a >>> 0Javascript中代码片段的含义.事实证明,这是一种确保变量是无符号32位整数的聪明方法.

这很漂亮,但我不喜欢它有两个原因.

  • 表达的意图并不清楚,至少对我来说不是这样.
  • 它不适用于负数

这让我想问:在Javascript中将任意值转换为"整数"的最惯用方法是什么? 它应该适用于有符号整数,而不仅仅是非负数.由于整数只是在Javascript中伪装成浮点这一事实导致的这种情况是可以接受的,但是应该被承认.它不应该返回undefinedNaN在任何情况下(这些不是整数),但返回0非数字值.

javascript integer idioms

6
推荐指数
1
解决办法
263
查看次数

>>>(零填充右移)详细说明

可能重复:
零填充位移0有什么用?(a >>> 0)

我在看array.indexOf(),我知道IE7本身不支持它.我正在阅读MDC,并看到了如何将其原型化为不支持它的浏览器的示例.我正在阅读它,试图了解一切是如何运作的,但我不确定我是否100%理解它.混淆的主要原因是位运算符,特别是>>>.我不确定这个运算符对什么有用.以下是他们使用它的方式.任何人都可以确切地解释它有用的内容以及为什么不能这么做if (t.length === 0)

 var t = Object(this);  
 var len = t.length >>> 0;  
 if (len === 0)  
   return -1; 
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
1475
查看次数

什么是array.length &gt;&gt;&gt; 0; 用于?

可能的重复项:
1. 零填充位移位0有什么用?(a >>> 0)
2. JavaScript的三倍大于

我正在研究一些MooTools代码,并注意到此代码段已在每种数组方法中使用:

var length = this.length >>> 0;
Run Code Online (Sandbox Code Playgroud)

这样做有什么好处?在我看来,这似乎不是最大长度的东西,因为3247823748372 >>> 0 === 8284725963247823748373 >>> 0 === 828472597(因此,两者都高1,如果是因为maxLength,那么做类似的事情会更好var length = Math.min(this.length, MAX_LENGTH)吗?)。

javascript

5
推荐指数
1
解决办法
1587
查看次数

符号>>在javascript中的含义是什么

什么是>>符号是什么意思?在这个页面上,有一行如下所示:

var i = 0, l = this.length >> 0, curr;
Run Code Online (Sandbox Code Playgroud)

javascript

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