鍍金池/ 問答/HTML/ 一個非空字符串indexOf空字符串,返回的為什么是0,不是-1?

一個非空字符串indexOf空字符串,返回的為什么是0,不是-1?

我在做表格搜索時遇到這樣一個問題:

我們都知道str.indexOf(子字符串)返回的是子字符串在str中的位置。如果str中不存在子字符串,就返回-1.

可是一個非空字符串indexOf空字符串,返回的為什么是0,不是-1?

請下面的小例子:

var str1='ascfg';
for(var i=0;i<str1.length;i++){
    console.log('第'+i+'位:'+str1[i]);
}
console.log("str1.indexOf(''):"+str1.indexOf(''));

打印結(jié)果:

第0位:a
第1位:s
第2位:c
第3位:f
第4位:g
str1.indexOf(''):0

但是,如果子字符串是""空字符串,str.indexOf("")返回的是卻0。
可是上面的例子中,第0位明明是a啊.

為什么會這樣呢?

回答
編輯回答
墨沫

內(nèi)置函數(shù), 官方文檔寫的很清楚
An empty string searchValue will match at any index between 0 and str.length

參考https://developer.mozilla.org...

2018年3月9日 14:02
編輯回答
夕顏

源碼里有個條件是如果字符串長度等于0,返回0 (沒有為什么,人家就說這樣定義的)

clipboard.png

2017年5月15日 09:53
編輯回答
掛念你

這個問題還真不好解釋,要看明白為什么就要看JS解釋器的源碼,好在解釋器也是在語言規(guī)范的基礎(chǔ)上編寫出來的,這是最新語言規(guī)范上這個方法的執(zhí)行步驟。
‘sjdf'.indexOf('') // 0;
'sjdf'.indexof('',2) //2;

圖片描述

2017年11月9日 23:54