小编una*_*ist的帖子

为什么for..of + push()可能比Array.from(foo)和[... foo]更快?

我经常使用Array.from()[...foo]从可迭代对象中获取数组.我也可以迭代它并手动推送到一个数组,但我更喜欢原生数据,因为它很简单,我认为本机实现会更有效率.

但是,我发现一些基准测试结果显示那些原生方式较慢.

https://jsperf.com/set-iterator-vs-foreach/4

我还在Chrome和Firefox上运行了更少(50)和更多(10k)元素的测试,但最终得到了类似的结果.

https://jsfiddle.net/unarist/k0cu8wta/2/

我可以理解[...foo]Array.from()因为Array.from()必须处理类似数组的对象和mapFn参数更快,但我找不到关于之间[...foo]for..of+ push()方式的合理理由.

是什么让for..of+ push()Array.from()和更快[...foo]

更新:我关心的不是速度,也不应该使用.我很惊讶本机版本比JS版本慢,我想知道为什么,因为我认为"一般来说,本机版本很快".

(例如,本地人比循环+推送方式做更多的工作,对某事物进行特殊优化等)

我在Windows 10 x64上测试了Chrome 60和Firefox 54.

javascript ecmascript-6

6
推荐指数
0
解决办法
184
查看次数

location.reload()的缓存行为在浏览器之间是不同的

MDNlocation.reload()一个可选参数.

forcedReload

是一个布尔标志,如果为true,则会导致始终从服务器重新加载页面.如果为false或未指定,则浏览器可以从其缓存重新加载页面.

但是这个论点在IE和Chrome中不起作用.

下表显示了发送到服务器的标头(no-cache均值Pragma: no-cache):

+---------------+----------+-------------------+-------------------+
|               |   IE11   |     Firefox47     |      Chrome54     |
+---------------+----------+-------------------+-------------------+
| reload(false) | no-cache | If-Modified-Since | If-Modified-Since |
+---------------+----------+-------------------+-------------------+
| reload(true)  | no-cache | no-cache          | If-Modified-Since |
+---------------+----------+-------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)

IE和Chrome会发送不同的缓存标头,不仅会忽略forcedReload参数.

此外,这种方法的W3C Spec似乎没有提到缓存.

所以我的问题是......

  • location.reload()关于缓存,我应该期待什么?
  • 有关于此的任何(标准化)讨论吗?

javascript browser-cache

5
推荐指数
0
解决办法
73
查看次数

构造函数是否返回null?

我正在编写C#程序,而VisualStudio的VSTO向导会生成以下代码.

private static string GetResourceText(string resourceName)
{
    Assembly asm = Assembly.GetExecutingAssembly();
    string[] resourceNames = asm.GetManifestResourceNames();
    for (int i = 0; i < resourceNames.Length; ++i)
    {
        if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
        {
            using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
            {
                if (resourceReader != null)
                {
                    return resourceReader.ReadToEnd();
                }
            }
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我认为 if (resourceReader != null)是多余的,因为构造函数总是返回非null.不是吗?

c#

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

在 ES2015 中 for 循环计数器可以是 const 声明吗?

首先,let可用于循环计数器声明。这也在MDN 中进行了描述

for(let i = 0; i < 2; ++i) {
  setTimeout(function(){
    document.write(i + "<br>");
  }, 0);
}
Run Code Online (Sandbox Code Playgroud)

结果:

0
1
Run Code Online (Sandbox Code Playgroud)

由于let使用了,i可以在for块内部更改值。

for(let i = 0; i < 2; ++i) {
  setTimeout(function(){
    document.write(i + "<br>");
  }, 0);
  i = 123; // I want to block this assignment!!
}
Run Code Online (Sandbox Code Playgroud)

所以我考虑使用const而不是let.

for(const i = 0; i < 2; ++i) { // throws Assignment to constant variable
  setTimeout(function(){
    document.write(i …
Run Code Online (Sandbox Code Playgroud)

javascript for-loop ecmascript-6

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

标签 统计

javascript ×3

ecmascript-6 ×2

browser-cache ×1

c# ×1

for-loop ×1