我有一个对象:
var myObj = {name: 'Tom', age : '25'}
假设名称为Tom
,我需要在程序中执行某些操作。
这就是我通常会这样做的方式:
if(myObj.name === 'Tom'){
//doSomething
}
但我也可以使用indexOf
方法:
if(myObj.name.indexOf('Tom') > -1){
// dosomething
}
我想知道的是:
使用indexOf优于===
运算符吗?哪一个更好或者还有更好的方法来比较对象的属性值?
在进行字符串比较时使用===
运算符是否存在性能开销?
哦,顺便说一句,我在节点环境中使用它。
答案 0 :(得分:3)
if(myObj.name.indexOf('Tom') > -1){ // is true
// dosomething
}
实际上会检查存储在myObj.name中的字符串中'Tom'的位置, 以上if block也适用于:
if(myObj.name.indexOf('To') > -1){ // is true
// dosomething
}
,而
if(myObj.name === 'Tom'){ //is true
//doSomething
}
这将比较完整的字符串myObj.name和'Tom',myObj.name应该等于'Tom',否则这个条件不会通过。
会失败if(myObj.name === 'To'){ //is false
//doSomething
}
indexOf()使用strict将searchElement与Array的元素进行比较 等式(与===或三等号运算符使用的方法相同)。
所以imo,最好在这里使用===,因为你正在搜索完整的字符串,因为indexOf()可能有额外的开销,可以将它与所有子字符串进行比较。
答案 1 :(得分:0)
indexOf返回匹配字符的起始索引。 indexOf不会告诉您原始字符串是否与原始字符串完全相同。
'Blue Whale'.indexOf('Whale'); //返回5:表示字符串中存在鲸鱼。
但另一方面,===运算符将允许精确匹配字符串 'Blue Whale'.indexOf('Whale'); //返回false;
因此,如果你想匹配确切的字符串,使用===运算符,也会比较类型。
你可以阅读indexOf的官方文档
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
答案 2 :(得分:0)
严格比较===
与所有其他类型的比较相比更快,因为不需要类型juggeling或类似indexOf
进行比较,其中indexOf
正在迭代字符串或数组找到一个索引。
在这种情况下,只需要一个值,然后进行直接比较。
如果您需要检查子字符串,请转到indexOf
或其他一些基于正则表达式的检查。