为什么'' (空字符串)渗透所有字符串?

时间:2015-10-14 18:27:17

标签: javascript string standards language-lawyer ecma262

我今天遇到了一些困惑,if(x>=0)总是返回"string".indexOf('');,但我希望0(对于-1);相反,false始终返回"string".lastIndexOf('');

6更容易理解,因为字符串长度为6个字母(lastIndexOf,零索引返回"string".length),但我看不到ECMAscript规范中的任何位置(5.16.0)描述为什么 5将被视为单词/字符边界

究竟是什么发生在这里?

1 个答案:

答案 0 :(得分:6)

规范说:

  

返回不小于 start 的最小整数 k    k + searchLen 不大于 len ,并且对所有人而言   非负整数 j 小于 searchLen ,    S 的位置 k + j j 位置的字符相同   of searchStr ;但是如果没有这样的整数 k ,那么返回   值-1。

因为vacuous truth而在第0位满足了这个条件:因为你正在搜索空字符串,所以你能想到的任何一个语句都适用于每个字符,因为它没有字符。

更正式地说,对于任何声明//tr[./td[.='Steve']][./td[.='Smith']]/td[.='Edit'] ,如果package com.mkyong; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class cool { public static void main(String[] args) { Document doc; try { // need http protocol doc = Jsoup.connect("http://google.com").get(); // get page title String title = doc.title(); System.out.println("title : " + title); // get all links Elements links = doc.select("a[href]"); for (Element link : links) { // get the value from href attribute System.out.println("\nlink : " + link.attr("href")); System.out.println("text : " + link.text()); } } catch (IOException e) { e.printStackTrace(); } } } P保留S = ∅