对于我的新JavaScript库,我有一个函数isBinary
,如果传递的值为true
,1
,0
或{,则返回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
?
答案 0 :(得分:2)
严格的平等===
会更快。如果使用==
,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中的类型安全性很难,并且不能“严格平等”的运算符不能用于测试类型。
答案 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")
但当然是缩写版本的缩写。
这些截图为我说话。
Link如果您想自己测试一下。