我真的很感兴趣,因为扩展了String.prototype性能这个问题,因为仅添加"use strict"
一种String.prototype
方法就可以将性能提高10倍。该解释由BERGI是短暂的,并没有向我解释。为什么两种几乎完全相同的方法之间有如此巨大的差异,只是"use strict"
顶部之间存在差异?您能否更详细地解释其背后的理论?
String.prototype.count = function(char) {
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
String.prototype.count_strict = function(char) {
"use strict";
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
// Here is how I measued speed, using Node.js 6.1.0
var STR = '0110101110010110100111010011101010101111110001010110010101011101101010101010111111000';
var REP = 1e4;
console.time('proto');
for (var i = 0; i < REP; i++) STR.count('1');
console.timeEnd('proto');
console.time('proto-strict');
for (var i = 0; i < REP; i++) STR.count_strict('1');
console.timeEnd('proto-strict');
结果:
proto: 101 ms
proto-strict: 7.5 ms
我
—
CristianTraìna16年
this[i] === char
在DOM环境中进行了测试,结果是一样的
bergi的解释说,当您调用该
—
尼克·拉尔森
count
函数时,必须将this
参数强制转换为字符串对象而不是字符串文字,而在严格模式下则不必强制参数才能正确操作。为什么是这种情况超出了我,我对答案非常感兴趣。
现在是时候
—
Jonathan
"use strict";
到处放男孩了!Goooold
this[i] === char
看看是否有相同的区别吗?