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

    与 [buf.indexOf()] 的区别是,查找的是 value 最后一次出现的索引,而不是首次出现。

    1. const buf = Buffer.from('this buffer is a buffer');
    2. console.log(buf.lastIndexOf('this'));
    3. // 打印: 0
    4. console.log(buf.lastIndexOf('buffer'));
    5. // 打印: 17
    6. console.log(buf.lastIndexOf(Buffer.from('buffer')));
    7. // 打印: 17
    8. console.log(buf.lastIndexOf(97));
    9. // 打印: 15(97 是 'a' 的十进制 ASCII 值)
    10. console.log(buf.lastIndexOf(Buffer.from('yolo')));
    11. // 打印: -1
    12. console.log(buf.lastIndexOf('buffer', 5));
    13. // 打印: 5
    14. console.log(buf.lastIndexOf('buffer', 4));
    15. // 打印: -1
    16. const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
    17. console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
    18. // 打印: 6
    19. console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
    20. // 打印: 4

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

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

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

    如果 value 是一个空字符串或空 Buffer,则返回 byteOffset