做'邪恶''平等减慢代码?

时间:2015-02-12 01:46:46

标签: javascript performance operators equality

对于我的新JavaScript库,我有一个函数isBinary,如果传递的值为true10或{,则返回true {1}}。我使用下面的代码来轻松编写,但我想知道我是否正在减慢处理速度,并且毫秒很重要,因为该函数在某些地方被解析了多达1万次。代码:

false

但是,我并不确定运营商是否相等或isBinary = function(ins) { return ins == 0 || ins == 1; //returns true if ins is true, false, 0, or 1 }; 是否会比严格相等更快或更慢,更多==' s。 最清晰的问题:
使用||ins === 1 || ins === 0 || ins === true || ins === false

会更快吗?

2 个答案:

答案 0 :(得分:2)

严格的平等===会更快。如果使用==,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中的类型安全性很难,并且不能“严格平等”的运算符不能用于测试类型。

答案 1 :(得分:1)

基于我在询问此问题后不久进行的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")

但当然是缩写版本的缩写。
这些截图为我说话。 enter image description here
Link如果您想自己测试一下。