'evil' 等式会减慢代码速度吗?
Do the 'evil' equalities slow down code?
对于我的新 JavaScript 库,我有一个函数 isBinary
returns true
如果传递的值为 1
,0
、true
或 false
。我使用以下代码是为了方便编写,但我想知道我是否正在减慢处理速度,毫秒 do 很重要,因为该函数在某些地方被解析了多达 10,000 次。代码:
isBinary = function(ins) {
return ins == 0 || ins == 1; //returns true if ins is true, false, 0, or 1
};
但我不确定运算符等于或 ==
是否会比严格等于更快或更慢,更多 ||
。
最清晰的问题:
使用 ins === 1 || ins === 0 || ins === true || ins === false
或 ins == 1 || ins == 0
会更快吗?
基于我在问这个问题后不久进行的 jsPerf,编写版本越长似乎 多 更快。准备代码是:
<script>
function isBinaryShort(ins) {
return ins == 1 || ins == 0;
}
function isBinaryLong(ins) {
return ins === 1 || ins === 0 || ins === true || ins === false;
}
</script>
然后对于我使用的两个测试:
isBinaryLong(1)
isBinaryLong(false)
isBinaryLong("tree")
但当然是简写版本的简称。
这些屏幕截图为我说话。
Link如果你想测试自己。
严格相等===
会更快。如果您使用 ==
,JavaScript 解释器必须尝试将类型强制转换为有意义的类型。
不过,我确实想指出,您的函数并没有真正检查传入的值是 0
、1
、false
还是 true
.
例如:
function isBinary(ins) {
return ins == 0 || ins ==1;
}
var arrayOne = [1];
var arrayOneString = ['1'];
console.log(isBinary(arrayOne)); //returns true
console.log(isBinary(arrayOneString)); //returns true
console.log(isBinary("1")); //returns true
我只是想证明您的代码并没有完全按照您的想法行事。 JavaScript 中的类型安全很困难,不属于 "strictly equal" 的运算符不能指望测试类型。
对于我的新 JavaScript 库,我有一个函数 isBinary
returns true
如果传递的值为 1
,0
、true
或 false
。我使用以下代码是为了方便编写,但我想知道我是否正在减慢处理速度,毫秒 do 很重要,因为该函数在某些地方被解析了多达 10,000 次。代码:
isBinary = function(ins) {
return ins == 0 || ins == 1; //returns true if ins is true, false, 0, or 1
};
但我不确定运算符等于或 ==
是否会比严格等于更快或更慢,更多 ||
。
最清晰的问题:
使用 ins === 1 || ins === 0 || ins === true || ins === false
或 ins == 1 || ins == 0
会更快吗?
基于我在问这个问题后不久进行的 jsPerf,编写版本越长似乎 多 更快。准备代码是:
<script>
function isBinaryShort(ins) {
return ins == 1 || ins == 0;
}
function isBinaryLong(ins) {
return ins === 1 || ins === 0 || ins === true || ins === false;
}
</script>
然后对于我使用的两个测试:
isBinaryLong(1)
isBinaryLong(false)
isBinaryLong("tree")
但当然是简写版本的简称。
这些屏幕截图为我说话。
Link如果你想测试自己。
严格相等===
会更快。如果您使用 ==
,JavaScript 解释器必须尝试将类型强制转换为有意义的类型。
不过,我确实想指出,您的函数并没有真正检查传入的值是 0
、1
、false
还是 true
.
例如:
function isBinary(ins) {
return ins == 0 || ins ==1;
}
var arrayOne = [1];
var arrayOneString = ['1'];
console.log(isBinary(arrayOne)); //returns true
console.log(isBinary(arrayOneString)); //returns true
console.log(isBinary("1")); //returns true
我只是想证明您的代码并没有完全按照您的想法行事。 JavaScript 中的类型安全很困难,不属于 "strictly equal" 的运算符不能指望测试类型。