'evil' 等式会减慢代码速度吗?

Do the 'evil' equalities slow down code?

对于我的新 JavaScript 库,我有一个函数 isBinary returns true 如果传递的值为 10truefalse。我使用以下代码是为了方便编写,但我想知道我是否正在减慢处理速度,毫秒 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 === falseins == 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 解释器必须尝试将类型强制转换为有意义的类型。

不过,我确实想指出,您的函数并没有真正检查传入的值是 01false 还是 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" 的运算符不能指望测试类型。