ความแตกต่างระหว่าง indexOf () และ search () คืออะไร?


180

เป็นธรรมใหม่ของ JavaScript ฉันไม่สามารถแยกแยะว่าจะใช้แต่ละอย่างเมื่อใด

มีใครช่วยอธิบายเรื่องนี้ให้ฉันได้บ้าง?

คำตอบ:


211

search()หากคุณจำเป็นต้องมีการแสดงออกปกติใช้ มิฉะนั้นindexOf()จะเร็วขึ้น


32
มีการอ้างอิงเพื่อสนับสนุนข้อเรียกร้องนี้หรือไม่?
robisrob

16
นอกจากนี้searchจะประเมินสตริงเป็น regex แม้ว่าคุณไม่ต้องการ
cregox

26
ความคิดเห็นของ @ cregox มีความสำคัญ - ลอง"hello.".search(".")- ส่งคืน 0 ไม่ใช่ 5 เพราะ.โทเค็น regex สำหรับ "อักขระใด ๆ "


14

ฟังก์ชั่นการค้นหา ( คำอธิบายเดียวที่นี่ ) ใช้นิพจน์ทั่วไปซึ่งช่วยให้คุณสามารถจับคู่กับส่วนที่ซับซ้อนมากขึ้นสตริงตัวพิมพ์เล็กและตัวพิมพ์เล็ก ฯลฯ ในขณะที่ indexOf ( คำอธิบายเดียวที่นี่ ) จะจับคู่สตริงตัวอักษร อย่างไรก็ตาม indexOf ยังอนุญาตให้คุณระบุดัชนีเริ่มต้น


7

ฉันคิดว่าความแตกต่างที่สำคัญคือการค้นหายอมรับการแสดงออกปกติ

ตรวจสอบข้อมูลอ้างอิงนี้:


4

IndexOf () - มันยอมรับตัวอักษรสตริงหรือวัตถุสตริง แต่ไม่ได้แสดงออกปกติ นอกจากนี้ยังยอมรับค่าจำนวนเต็มแบบ zero-based เพื่อเริ่มการค้นหาเช่น:

  1. "babyelephant" .indexOf ( "E"); // ให้ 4
  2. "babyelephant" .indexOf ( "E", 5) // ให้คุณ 6 เมื่อการค้นหาเริ่มต้นจากอันดับที่ 6 หรือดัชนีที่ 5
  3. var m = / e /; "babyelephant" .indexOf (m); // ให้ -1 เพราะมันไม่ยอมรับการแสดงออกปกติ

ค้นหา () - ยอมรับทั้งตัวอักษรสตริงหรือวัตถุสตริงและการแสดงออกปกติ แต่ไม่ยอมรับดัชนีเพื่อเริ่มการค้นหา


มันกลับมาเพื่อ"baby/e/lephant".indexOf(m);อะไร?
RamenChef

1
สิ่งที่ดี .. มันจะกลับมา 4. เนื่องจากมี / e / string ปรากฏอยู่ แต่ถ้าคุณต้องการค้นหา "e" regex คุณจะไม่ได้ผลลัพธ์ที่ต้องการ UMM อาจฉันควรแก้ไขคำตอบของฉันเพื่อ indexOf () พยายามค้นหา regex เป็นตัวอักษรสตริงและไม่เป็น regex
bablue

4

indexOf () และค้นหา ()

  • พบได้ทั่วไปในทั้งสอง

    i) คืนค่าการค้นหาครั้งแรกที่เกิดขึ้น

    ii) ส่งคืน -1 หากไม่พบคู่ที่ตรงกัน

    let str='Book is booked for delivery'
    str.indexOf('b')   // returns position 8
    str.search('b')    // returns position 8 

  • พิเศษใน indexOf ()

    i) คุณสามารถให้ตำแหน่งการค้นหาเริ่มต้นเป็นอาร์กิวเมนต์ที่สอง

    str.indexOf('k')   // 3
    str.indexOf('k',4) // 11 (it start search from 4th position) 

  • พิเศษในการค้นหา ()

ค่าการค้นหาสามารถเป็นนิพจน์ปกติ

str.search('book') // 8
str.search(/book/i)  // 0   ( /i =case-insensitive   (Book == book)

การอ้างอิง



-1

โดยไม่ต้องregex , ไม่มีความแตกต่างในทางปฏิบัติระหว่างindexOfและค้นหา

ตัวอย่างด้านล่างให้การสาธิตสด:

function FromSearch() {

  var str = document.getElementById("demo").innerText;
  var n = str.search("difference");
  document.getElementById("Location").innerHTML = n;
}

function FromindexOf() {
  var str = document.getElementById("demo").innerText;
  var n = str.indexOf("difference");
  document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>

<button onclick="FromSearch()">From search</button>

<button onclick="FromindexOf()">From indexOf</button>

<p>Location of difference in the above sentence is:</p>

<mark id="Location"></mark>


1
มีความแตกต่างอย่างมีนัยสำคัญ: searchแปลงสตริงเป็น a RegExpดังนั้นstr.search("d........e");จะจับคู่ที่อักขระ 39
1j01
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.