2015-02-12 53 views
0

对于我的新JavaScript库,我有一个功能isBinary,如果传递值为10,truefalse,则返回true。为了便于编写,我使用了以下代码,但是我想知道是否会减慢处理速度,并且毫秒很重要,因为在某些地方该函数最多可解析一万次。代码:'邪恶'平等减慢代码吗?

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会更快吗?

回答

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中的类型安全是困难的,并且不是“严格相等”的操作符不能被指向测试类型。

+0

因此无论哪种方式,'==='或运营商会更好地为此? – Travis 2015-02-12 02:22:57

+0

是的,严格的平等是将要走的路。由于解释类型 - 强制,它会更快并且不会给你带来其他类型的误报。 – Eclecticist 2015-02-12 02:24:17

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如果你想测试自己。