質問者さんが挙げている3つの書き方のいずれでも質問者さんが実現したいことは行えると思いますが、それぞれ多少異なる挙動をする点があります。
if ( navigator.userAgent.indexOf('iPhone') > 0 )
とすると、indexOf関数では一番最初の文字のインデックスは0になっているので、最初にiPhoneという文字があったときはindexOf関数が0を返し、これはfalse
となります(下コード例1)。また、見つからなかった場合は、indexOf関数は-1を返すので、これもfalse
になります(下コード例2)。
javascript
1// 例1.
2if ("iPhone Blue Green".indexOf("iPhone") > 0) {
3 console.log("text1");
4}
5console.log("iPhone Blue Green".indexOf("iPhone") > 0); // false
6
7// 例2.
8if ("Blue iPhone Green".indexOf("Red") > 0) {
9 console.log("text1");
10}
11console.log("Blue iPhone Green".indexOf("Red") > 0); // false
12
13// 補足.
14// 2文字目以降ならばtrueになる。
15if ("Blue iPhone Green".indexOf("iPhone") > 0) {
16 console.log("text1");
17}
18console.log("Blue iPhone Green".indexOf("iPhone") > 0); // true
if ( navigator.userAgent.indexOf('iPhone') >= 0 )
というように記述すると、indexOf関数では一番最初の文字のインデックスは0になっているので、最初にiPhoneという文字があったときもtrue
になります(下コード例1)。見つからなかった場合indexOf関数は-1を返すので、これはfalse
になります(下コード例2)。
javascript
1// 例1.
2if ("iPhone Blue Green".indexOf("iPhone") >= 0) {
3 console.log("text2");
4}
5console.log("iPhone Blue Green".indexOf("iPhone") >= 0); // true
6
7// 例2.
8if ("iPhone Blue Green".indexOf("Red") >= 0) {
9 console.log("text2");
10}
11console.log("iPhone Blue Green".indexOf("Red") >= 0); // false
if ( navigator.userAgent.indexOf('iPhone') > -1 )
とするとiPhoneという文字列が見つかるとindexOf関数は指定した値があったインデックスを返すので、必ずtrue
になります(下コード例1)。これは、indexOf関数が返すインデックスの値は、一番最初の文字から一番最後の文字(0~(str.length-1))までなので、必ず-1よりも大きくなるためです。見つからなかった場合indexOf関数は-1を返すので、これはfalse
になります(下コード例2)。
javascript
1// 例1.
2if ("iPhone Blue Green".indexOf("iPhone") > -1) {
3 console.log("text3");
4}
5console.log("iPhone Blue Green".indexOf("iPhone") > -1); // true
6
7// 例2.
8if ("iPhone Blue Green".indexOf("Red") > -1) {
9 console.log("text3");
10}
11console.log("iPhone Blue Green".indexOf("Red") > -1); // false