小编cli*_*ait的帖子

为什么负数组索引比正数组索引慢得多?

这是一个简单的JavaScript性能测试:

const iterations = new Array(10 ** 7);

var x = 0;
var i = iterations.length + 1;
console.time('negative');
while (--i) {
	x += iterations[-i];
}
console.timeEnd('negative');

var y = 0;
var j = iterations.length;
console.time('positive');
while (j--) {
	y += iterations[j];
}
console.timeEnd('positive');
Run Code Online (Sandbox Code Playgroud)

第一个循环从10,000,000减少到1,并在每次迭代时使用负索引访问长度为1000万的数组.所以它从头到尾遍历数组.

第二个循环从9,999,999开始计数到0,并在每次迭代时使用正索引访问同一个数组.所以它反过来通过数组.

在我的电脑上,第一个循环需要超过6秒才能完成,但第二个循环只需要约400毫秒.

为什么第二个循环比第一个循环更快?

javascript arrays

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

[a] + [b]和[a] .extend([b])之间有什么区别?

在Python中有两种方法将列表合并在一起:

  1. ['a', 'b', 'c'] + ['x', 'y', 'z']

  2. ['a', 'b', 'c'].extend(['x', 'y', 'z'])

两种方法有什么区别?


连接超过2个列表的Pythonic方式是什么?

['a', 'b', 'c'] + [1, 2, 3] + ['x', 'y', 'z']
Run Code Online (Sandbox Code Playgroud)
gucci_list = ['a', 'b', 'c']
gucci_list.extend([1, 2, 3])
gucci_list.extend(['x', 'y', 'z'])
Run Code Online (Sandbox Code Playgroud)

结合两者怎么样?

['a', 'b', 'c'].extend([1, 2, 3] + ['x', 'y', 'z'])
Run Code Online (Sandbox Code Playgroud)

python arrays list addition python-3.x

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

如何获取正在编辑的元素?

我正在开发一个webapp,我遇到了JavaScript问题.

以下是导致问题的HTML的简化版本.我有一些嵌套contenteditable divs(我用占位符文本替换了真实内容):

<div contenteditable="true" id="div1">
    text
    <div contenteditable="inherit" id="div2">
        text
        <div contenteditable="inherit" id="div3">
            text
        </div>
        text
    </div>
    text
</div>
Run Code Online (Sandbox Code Playgroud)

我想通过JavaScript获取所选元素(由用户编辑),但到目前为止我还没有找到一种方法(成功).


我尝试了什么,为什么它不起作用:

我尝试过使用document.activeElement,它应该返回焦点中的任何一个元素.通常这是有效的,但在使用嵌套contenteditable元素时它不会产生所需的结果.它返回最上面的contenteditable祖先,而不是返回用户正在编辑的元素.

例如,如果div2选择/正在编辑,则document.activeElement返回div1.如果div3选择/正在编辑,document.activeElement也会返回div1.

所以我想document.activeElement这不是正确的方法.


如何获得正在编辑的最具体元素,而不是其最重要的contenteditable祖先?

html javascript focus contenteditable browser-extension

-2
推荐指数
1
解决办法
1378
查看次数

将字符串中的花括号转义为未定义的次数

有关的:

使用花括号 ( {•••}) 表示要格式化的字符串部分。如果您想使用文字花括号字符,以便它们被 忽略.format(),您可以使用双花括号 ( {{•••}})。MCVE:

string = "{format} {{This part won't be formatted. The final string will have literal curly braces here.}}"
print string.format(format='string')
Run Code Online (Sandbox Code Playgroud)

如果您有.format()s链,则每次使用.format(). 最后一个被 4 个大括号包围,并在最终输出中以文字花括号结束。MCVE:

string = "{format1} {{format2}} {{{{3rd one won't be formatted. The final string will have literal curly braces here.}}}}"
print string.format(format1='string1').format(format2='string2')
Run Code Online (Sandbox Code Playgroud)

也可以将另一个格式字符串格式化为格式字符串。最后一个被 4 个大括号包围,并在最终输出中以文字花括号结束。MCVE:

string = "{format1} {{{{3rd one won't be formatted. The final string will have …
Run Code Online (Sandbox Code Playgroud)

python escaping string-formatting python-2.x python-2.7

-2
推荐指数
1
解决办法
4142
查看次数

什么HTTP响应状态代码用于随机机会的无关重定向?

我的网站有1%的随机机会将访问者重定向到此YouTube视频.

服务器当前发送旧的302,但我希望它具有更好的语义.

我不知道重定向是永久的还是临时的.从某种意义上说,它是永久性的,人们总是有1%的机会被重定向,而且这是暂时的,因为人们不会每次都被重定向.

当前的3xx响应状态代码都不符合我网站的行为.

HTTP 3xx重定向(来源:维基百科)

301永久移动
此以及将来的所有请求都应该指向给定的URI.[21]

"这和所有未来的要求" - 不,不是所有未来的要求.

302 Found(以前"暂时移动")
告诉客户查看(浏览)另一个URL.302已被303和307取代.这是与该标准相矛盾的行业惯例的一个例子.HTTP/1.0规范(RFC 1945)要求客户端执行临时重定向(原始描述短语是"暂时移动"),[22]但是流行的浏览器实现302具有303 See Other的功能.因此,HTTP/1.1添加了状态代码303和307来区分这两种行为.[23] 但是,一些Web应用程序和框架使用302状态代码,就像它是303一样.[24]

这令人困惑.它确实说,"302已经被303和307取代了",所以我想这已经过时但仍然常用?

303请参阅其他(自HTTP/1.1起)
可以使用GET方法在另一个URI下找到对请求的响应.当收到POST(或PUT/DELETE)时,客户端应该假设服务器已经收到数据,并且应该向给定的URI发出新的GET请求.[25]

"可以在另一个URI下找到对请求的响应" - Rickroll不是对原始请求的响应.它与我的网站无关!"当收到POST(或PUT/DELETE)响应时,客户端应该假设服务器已经收到了数据,并且应该向给定的URI发出新的GET请求." 303描述的最后一句不适用于我的重定向.

307临时重定向(自HTTP/1.1起)
在这种情况下,请求应该使用另一个URI重复; 但是,未来的请求仍应使用原始URI.与历史上实现302的方式相反,在重新发出原始请求时不允许更改请求方法.例如,应该使用另一个POST请求重复POST请求.[30]

"在这种情况下,请求应该使用另一个URI重复;但是,将来的请求仍应使用原始URI." 是! 这就是我的重定向."...重新发出原始请求时,不允许更改请求方法.例如,应使用另一个POST请求重复POST请求." 不幸的是,这不适用于我的重定向.我的网站甚至在他们提交表单(POST方法)时随机Rickrolls用户.

308永久重定向(RFC 7538)
应使用另一个URI重复请求和所有将来的请求.307和308并行302和301的行为,但不允许HTTP方法改变.因此,例如,将表单提交给永久重定向的资源可能会顺利进行.[31]

308具有与301相同的问题,因为并非所有将来的请求都应该转到Rickroll视频.此外,不允许改变该方法.

我的服务器应该为与我的实际站点无关的随机机会重定向发送什么HTTP响应状态代码?

redirect http http-status-codes http-redirect server

-2
推荐指数
1
解决办法
293
查看次数

如何使用表单(POST请求)获取非输入元素来发送数据?

我有一个发送POST请求的HTML表单.但是,并非所有需要在POST请求中发送的数据都与input元素一起输入.POST当用户提交表单时,我有一个我希望与其余数据一起发送的数值.我该怎么做(不使用AJAX)?

html javascript css forms post

-3
推荐指数
2
解决办法
1589
查看次数

YouTube如何运作?

Google Chrome浏览器不尊重autoplayHTML5 <video>元素上的属性。video.play()页面加载后立即使用JavaScript会引发错误:

未捕获(承诺)的DOMException:play()失败,因为用户没有首先与文档进行交互。

可以,但是YouTube视频是HTML5,可以自动播放。YouTube使用什么技术绕过Chrome的限制?所有网页都能做到相同(或否,可能是因为YouTube拥有Google拥有的例外)吗?

javascript youtube jquery autoplay html5-video

-9
推荐指数
1
解决办法
205
查看次数

如何定义变量后如何不对其进行评估?

我有这个变量赋值:

var a = 2 + 2;
Run Code Online (Sandbox Code Playgroud)

值为a4.但我不希望它立即评估2 + 2表达式.如何使变量保持为,2 + 2而不是更改为4,直到程序到达我a要求评估的行?

2 + 2 我不是一个很好的例子,为什么我真的想要这样做,所以这里有一个非常简单的例子,我需要一个变量来评估,直到我想要它:

var a = (c > d); // and stay as an unevaluated condition
function b() {
    var c = 5;
    var d = 3;
    // evaluate B here
    return b;
}
Run Code Online (Sandbox Code Playgroud)

如果a在分配后立即解析,则会出现未定义的变量错误,因为c并且d未定义.我想延迟对条件的评估,直到我想要使用它(在所说的那一行evaluate B here).我怎么做?

javascript variables if-statement global-variables conditional-statements

-11
推荐指数
1
解决办法
845
查看次数

JavaScript setTimeout无限循环,不带递归

我不能使用Obfuscator.io来uglify我的JS脚本,因为它包含一个setTimeout调用自身的函数.
MCVE:

function repeater() {
    // DO SOME STUFF...
    setTimeout(repeater, 100);
}
repeater();
Run Code Online (Sandbox Code Playgroud)

重现所需的自定义模糊处理设置:
- 标识符名称生成器:Mangled
- 保留名称:$- jQuery

Obfuscator.io的错误消息:

错误:类t中的@postConstruct错误:类t中的@postConstruct错误:超出了最大调用堆栈大小

我已经阅读了其他一些Stack Overflow问题.据我所知,调用setTimeout(func)里面func实际的递归.

但是,Obfuscator.io的算法仍然无法处理自我调用的setTimeout延迟.

如何在setTimeout不在函数本身中调用它的情况下使用重复执行的函数?我不想使用,setInterval因为我想在函数代码运行后每次都开始延迟. setInterval忽略了这一点.

javascript stack-overflow obfuscation jquery settimeout

-16
推荐指数
1
解决办法
562
查看次数