Javascript对象属性值比较=== vs indexOf

时间:2017-07-22 09:32:49

标签: javascript

我有一个对象:

var myObj = {name: 'Tom', age : '25'}

假设名称为Tom,我需要在程序中执行某些操作。

这就是我通常会这样做的方式:

if(myObj.name === 'Tom'){
    //doSomething
}

但我也可以使用indexOf方法:

if(myObj.name.indexOf('Tom') > -1){
    // dosomething
}

我想知道的是:

使用indexOf优于===运算符吗?哪一个更好或者还有更好的方法来比较对象的属性值?

在进行字符串比较时使用===运算符是否存在性能开销?

哦,顺便说一句,我在节点环境中使用它。

3 个答案:

答案 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或其他一些基于正则表达式的检查。