• value {string|Buffer|Uint8Array|integer} 要查找的值。
    • byteOffset {integer} buf 中开始查找的偏移量。默认值: 0
    • encoding {string} 如果 value 是字符串,则指定 value 的字符编码。默认值: 'utf8'
    • 返回: {integer} buf 中首次出现 value 的索引,如果 buf 没包含 value 则返回 -1

    如果 value 是:

    • 一个字符串,则 value 根据 encoding 的字符编码进行解析。
    • 一个 Buffer 或 [Uint8Array],则 value 会整个进行对比。如果要对比部分 Buffer,可使用 [buf.slice()]。
    • 一个数值, 则 value 会被解析成 0255 之间的无符号八位整数值。
    1. const buf = Buffer.from('this is a buffer');
    2. console.log(buf.indexOf('this'));
    3. // 打印: 0
    4. console.log(buf.indexOf('is'));
    5. // 打印: 2
    6. console.log(buf.indexOf(Buffer.from('a buffer')));
    7. // 打印: 8
    8. console.log(buf.indexOf(97));
    9. // 打印: 8(97 是 'a' 的十进制 ASCII 值)
    10. console.log(buf.indexOf(Buffer.from('a buffer example')));
    11. // 打印: -1
    12. console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
    13. // 打印: 8
    14. const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
    15. console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
    16. // 打印: 4
    17. console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
    18. // 打印: 6

    如果 value 不是一个字符串、数值、或 Buffer,则此方法将会抛出 TypeError。 如果 value 是一个数值,则会被转换成介于 0 到 255 之间的整数值。

    如果 byteOffset 不是一个数值,则会被转换成数值。 如果转换后的值为 NaN0, 则会查找整个 buffer。 这与 [String#indexOf()] 是一致的。

    1. const b = Buffer.from('abcdef');
    2. // 传入一个数值,但不是有效的字节。
    3. // 打印:2,相当于查找 99 或 'c'。
    4. console.log(b.indexOf(99.9));
    5. console.log(b.indexOf(256 + 99));
    6. // 传入被转换成 NaN 或 0 的 byteOffset。
    7. // 打印:1,查找整个 buffer。
    8. console.log(b.indexOf('b', undefined));
    9. console.log(b.indexOf('b', {}));
    10. console.log(b.indexOf('b', null));
    11. console.log(b.indexOf('b', []));

    如果 value 是一个空字符串或空 Buffer,且 byteOffset 小于 buf.length,则返回 byteOffset。 如果 value 是一个空字符串,且 byteOffset 大于或等于 buf.length,则返回 buf.length