diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/string/indexof')
-rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/string/indexof/index.html | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/string/indexof/index.html b/files/zh-cn/web/javascript/reference/global_objects/string/indexof/index.html new file mode 100644 index 0000000000..5bb7b532fc --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/string/indexof/index.html @@ -0,0 +1,181 @@ +--- +title: String.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/String/indexOf +tags: + - JavaScript + - String + - 原型 + - 参考 + - 字符串 + - 方法 +translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf +--- +<div>{{JSRef}}</div> + +<p><code><strong>indexOf()</strong></code> 方法返回调用它的 {{jsxref("String")}} 对象中第一次出现的指定值的索引,从 <code>fromIndex</code> 处进行搜索。如果未找到该值,则返回 -1。</p> + +<div>{{EmbedInteractiveExample("pages/js/string-indexof.html")}}</div> + + + +<div class="note"><strong>Note:</strong> For the Array method, see {{jsxref("Array.prototype.indexOf()")}}.</div> + +<h2 id="语法">语法</h2> + +<pre class="notranslate"><var>str</var>.indexOf(<var>searchValue [</var>, <var>fromIndex]</var>)</pre> + +<h3 id="参数">参数</h3> + +<dl> + <dt><code>searchValue</code></dt> + <dd>要被查找的字符串值。</dd> + <dd>如果没有提供确切地提供字符串,<a href="https://tc39.github.io/ecma262/#sec-tostring"><var>searchValue</var> 会被强制设置为 <code>"undefined"</code></a>, 然后在当前字符串中查找这个值。</dd> + <dd>举个例子:<code>'undefined'.indexOf()</code> 将会返回0,因为 <code>undefined</code> 在位置0处被找到,但是 <code>'undefine'.indexOf()</code> 将会返回 -1 ,因为字符串 <code>'undefined'</code> 未被找到。</dd> + <dt><code>fromIndex</code> {{optional_inline}}</dt> + <dd>数字表示开始查找的位置。可以是任意整数,默认值为 <code>0</code>。</dd> + <dd>如果 <code>fromIndex</code> 的值小于 <code>0</code>,或者大于 <code><var>str</var>.length</code> ,那么查找分别从 <code>0</code> 和<code><var>str</var>.length</code> 开始。(译者注: <code>fromIndex</code> 的值小于 <code>0</code>,等同于为空情况; <code>fromIndex</code> 的值大于或等于 <code><var>str</var>.length</code> ,那么结果会直接返回 <code>-1</code> 。)</dd> + <dd>举个例子,<code>'hello world'.indexOf('o', -5)</code> 返回 <code>4</code> ,因为它是从位置<code>0</code>处开始查找,然后 <code>o</code> 在位置<code>4</code>处被找到。另一方面,<code>'hello world'.indexOf('o', 11)</code> (或 <code>fromIndex</code> 填入任何大于<code>11</code>的值)将会返回 <code>-1</code> ,因为开始查找的位置<code>11</code>处,已经是这个字符串的结尾了。</dd> +</dl> + +<h3 id="返回值">返回值</h3> + +<p>查找的字符串 <code><var>searchValue</var></code><var> </var>的第一次出现的索引,如果没有找到,则返回 <code>-1</code>。</p> + +<p>若被查找的字符串 <code><var>searchValue</var></code><var> </var>是一个空字符串,将会产生“奇怪”的结果。如果 <code>fromIndex</code> 值为空,或者 <code>fromIndex</code> 值小于被查找的字符串的长度,返回值和以下的 <code>fromIndex</code> 值一样:</p> + +<pre class="brush: js notranslate">'hello world'.indexOf('') // 返回 0 +'hello world'.indexOf('', 0) // 返回 0 +'hello world'.indexOf('', 3) // 返回 3 +'hello world'.indexOf('', 8) // 返回 8</pre> + +<p>另外,如果 <code>fromIndex</code> 值大于等于字符串的长度,将会直接返回字符串的长度(<code>str.length</code>):</p> + +<pre class="brush: js notranslate">'hello world'.indexOf('', 11) // 返回 11 +'hello world'.indexOf('', 13) // 返回 11 +'hello world'.indexOf('', 22) // 返回 11</pre> + +<p>从前面一个例子可以看出,被查找的值是空值时,Javascript将直接返回指定的索引值。从后面一个例子可以看出,被查找的值是空值时,Javascript将直接返回字符串的长度。</p> + +<h2 id="描述">描述</h2> + +<p>字符串中的字符被从左向右索引。第一个字符的索引(index)是 <code>0</code>,变量名为 <code>stringName</code> 的字符串的最后一个字符的索引是 <code>stringName.length - 1</code> 。</p> + +<pre class="brush: js notranslate">"Blue Whale".indexOf("Blue") // 返回 0 +"Blue Whale".indexOf("Blute") // 返回 -1 +"Blue Whale".indexOf("Whale", 0) // 返回 5 +"Blue Whale".indexOf("Whale", 5) // 返回 5 +"Blue Whale".indexOf("", -1) // 返回 0 +"Blue Whale".indexOf("", 9) // 返回 9 +"Blue Whale".indexOf("", 10) // 返回 10 +"Blue Whale".indexOf("", 11) // 返回 10</pre> + +<p id="Example_indexOf_and_case-sensitivity"><code>indexOf</code> 方法是区分大小写的。例如,下面的表达式将返回 <code>-1</code>:</p> + +<pre class="brush: js notranslate">"Blue Whale".indexOf("blue") // 返回 -1 +</pre> + +<h3 id="检测是否存在某字符串">检测是否存在某字符串</h3> + +<p>注意 <code>0</code> 并不会被当成 <code>true</code> ,<code>-1</code> 不会被当成 <code>false</code> 。所以当检测某个字符串是否存在于另一个字符串中时,可使用下面的方法:</p> + +<pre class="notranslate">'Blue Whale'.indexOf('Blue') !== -1 // true +'Blue Whale'.indexOf('Bloe') !== -1 // false +~('Blue Whale'.indexOf('Bloe')) // 0, 这是一种错误用法</pre> + +<h2 id="示例">示例</h2> + +<h3 id="Example_Using_indexOf_and_lastIndexOf" name="Example:_Using_indexOf_and_lastIndexOf">使用<code>indexOf()</code> 和 <code>lastIndexOf()</code></h3> + +<p>下例使用 <code>indexOf()</code> 和 <code>lastIndexOf()</code> 方法定位字符串中 "<code>Brave new world</code>" 的值。</p> + +<pre class="brush: js notranslate">var anyString = "Brave new world"; + +console.log("The index of the first w from the beginning is " + anyString.indexOf("w")); +// logs 8 +console.log("The index of the first w from the end is " + anyString.lastIndexOf("w")); +// logs 10 + +console.log("The index of 'new' from the beginning is " + anyString.indexOf("new")); +// logs 6 +console.log("The index of 'new' from the end is " + anyString.lastIndexOf("new")); +// logs 6 +</pre> + +<h3 id="indexOf_和区分大小写"><code>indexOf</code> 和区分大小写</h3> + +<p>下例定义了两个字符串变量。两个变量包含相同的字符串,除了第二个字符串中的某些字符为大写。第一个 <code>log</code> 方法输出 19。但是由于 <code>indexOf</code> 方法区分大小写,因此不会在 <code>myCapString</code> 中发现字符串 <code>“cheddar"</code>,所以,第二个 <code>log</code> 方法会输出 -1。</p> + +<pre class="brush: js notranslate">var myString = "brie, pepper jack, cheddar"; +var myCapString = "Brie, Pepper Jack, Cheddar"; + +console.log('myString.indexOf("cheddar") is ' + myString.indexOf("cheddar")); +// logs 19 +console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf("cheddar")); +// logs -1</pre> + +<h3 id="使用_indexOf_统计一个字符串中某个字母出现的次数">使用 <code>indexOf</code> 统计一个字符串中某个字母出现的次数</h3> + +<p>在下例中,设置了 <code>count</code> 来记录字母 <code><font face="Consolas, Liberation Mono, Courier, monospace">e</font></code> 在字符串 <code>str</code> 中出现的次数:</p> + +<pre class="brush: js notranslate">// 翻译:生存还是毁灭?这是个问题。(莎士比亚《哈姆雷特》) +var str = 'To be, or not to be, that is the question.'; +var count = 0; +var pos = str.indexOf('e'); + +while (pos !== -1) { + count++; + pos = str.indexOf('e', pos + 1); +} + +console.log(count); // displays 4 +</pre> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">规范</th> + <th scope="col">状态</th> + <th scope="col">说明</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ES1')}}</td> + <td>{{Spec2('ES1')}}</td> + <td>Initial definition.</td> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.5.4.7', 'String.prototype.indexOf')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}</td> + <td>{{Spec2('ES6')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + + + +<p>{{Compat("javascript.builtins.String.indexOf")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li>{{jsxref("String.prototype.charAt()")}}</li> + <li>{{jsxref("String.prototype.lastIndexOf()")}}</li> + <li>{{jsxref("String.prototype.includes()")}}</li> + <li>{{jsxref("String.prototype.split()")}}</li> + <li>{{jsxref("Array.prototype.indexOf()")}}</li> +</ul> |