buf.indexOf(value[, byteOffset][, encoding])


  • value <string> | <Buffer> | <Uint8Array> | <integer> 要搜索的内容。

    ¥value <string> | <Buffer> | <Uint8Array> | <integer> What to search for.

  • byteOffset <integer> 开始搜索 buf 的位置。如果为负数,则从 buf 的末尾开始计算偏移量。默认值:0

    ¥byteOffset <integer> Where to begin searching in buf. If negative, then offset is calculated from the end of buf. Default: 0.

  • encoding <string> 如果 value 是字符串,则这是用于确定将在 buf 中搜索的字符串的二进制表示的编码。默认值:'utf8'

    ¥encoding <string> If value is a string, this is the encoding used to determine the binary representation of the string that will be searched for in buf. Default: 'utf8'.

  • 返回:<integer> buf 中第一次出现 value 的索引,如果 buf 不包含 value,则为 -1

    ¥Returns: <integer> The index of the first occurrence of value in buf, or -1 if buf does not contain value.

如果 value 是:

¥If value is:

  • 字符串,value 根据 encoding 中的字符编码进行解释。

    ¥a string, value is interpreted according to the character encoding in encoding.

  • BufferUint8Array, value 将全部使用。要比较部分 Buffer,则使用 buf.subarray

    ¥a Buffer or Uint8Array, value will be used in its entirety. To compare a partial Buffer, use buf.subarray.

  • 数字,value 将被解释为 0255 之间的无符号 8 位整数值。

    ¥a number, value will be interpreted as an unsigned 8-bit integer value between 0 and 255.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('this is a buffer');

console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6const { Buffer } = require('node:buffer');

const buf = Buffer.from('this is a buffer');

console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6

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

¥If value is not a string, number, or Buffer, this method will throw a TypeError. If value is a number, it will be coerced to a valid byte value, an integer between 0 and 255.

如果 byteOffset 不是数字,则会被强制为数字。如果强制转换的结果是 NaN0,则将搜索整个缓冲区。此行为与 String.prototype.indexOf() 匹配。

¥If byteOffset is not a number, it will be coerced to a number. If the result of coercion is NaN or 0, then the entire buffer will be searched. This behavior matches String.prototype.indexOf().

import { Buffer } from 'node:buffer';

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));

// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));const { Buffer } = require('node:buffer');

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));

// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));

如果 value 为空字符串或空 BufferbyteOffset 小于 buf.length,则返回 byteOffset。如果 value 为空且 byteOffset 至少为 buf.length,则返回 buf.length

¥If value is an empty string or empty Buffer and byteOffset is less than buf.length, byteOffset will be returned. If value is empty and byteOffset is at least buf.length, buf.length will be returned.