diff options
author | dcposch@dcpos.ch <dcposch@dcpos.ch> | 2016-12-07 00:36:16 -0800 |
---|---|---|
committer | Roman Reiss <me@silverwind.io> | 2017-01-25 00:37:38 +0100 |
commit | d0112fc7164bd42022843ae289c11cd640a16bf4 (patch) | |
tree | bbbe4d0ac551819e88b6e5b3c21dc2a144f3816e /doc/api/buffer.md | |
parent | dd50cd9e4f4a5b994d709c1eaa3ab978a6d0bf98 (diff) | |
download | android-node-v8-d0112fc7164bd42022843ae289c11cd640a16bf4.tar.gz android-node-v8-d0112fc7164bd42022843ae289c11cd640a16bf4.tar.bz2 android-node-v8-d0112fc7164bd42022843ae289c11cd640a16bf4.zip |
doc: clarify Buffer.indexOf/lastIndexOf edge cases
PR-URL: https://github.com/nodejs/node/pull/10162
Fixes: https://github.com/nodejs/node/issues/9801
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'doc/api/buffer.md')
-rw-r--r-- | doc/api/buffer.md | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/doc/api/buffer.md b/doc/api/buffer.md index f4ef0b5bd1..5d39edbe13 100644 --- a/doc/api/buffer.md +++ b/doc/api/buffer.md @@ -1164,6 +1164,30 @@ console.log(utf16Buffer.indexOf('\u03a3', 0, 'ucs2')); console.log(utf16Buffer.indexOf('\u03a3', -4, 'ucs2')); ``` +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. + +If `byteOffset` is not a number, it will be coerced to a number. Any arguments +that coerce to `NaN` or 0, like `{}`, `[]`, `null` or `undefined`, will search +the whole buffer. This behavior matches [`String#indexOf()`]. + +```js +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', [])); +``` + ### buf.includes(value[, byteOffset][, encoding]) <!-- YAML added: v5.3.0 @@ -1284,6 +1308,33 @@ console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'ucs2')); console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'ucs2')); ``` +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. + +If `byteOffset` is not a number, it will be coerced to a number. Any arguments +that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer. +This behavior matches [`String#lastIndexOf()`]. + +```js +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.lastIndexOf(99.9)); +console.log(b.lastIndexOf(256 + 99)); + +// Passing a byteOffset that coerces to NaN +// Prints: 1, searching the whole buffer +console.log(b.lastIndexOf('b', undefined)); +console.log(b.lastIndexOf('b', {})); + +// Passing a byteOffset that coerces to 0 +// Prints: -1, equivalent to passing 0 +console.log(b.lastIndexOf('b', null)); +console.log(b.lastIndexOf('b', [])); +``` + ### buf.length <!-- YAML added: v0.1.90 @@ -2463,6 +2514,8 @@ console.log(buf); [RFC1345]: https://tools.ietf.org/html/rfc1345 [RFC4648, Section 5]: https://tools.ietf.org/html/rfc4648#section-5 [`String.prototype.length`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length +[`String#indexOf()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf +[`String#lastIndexOf()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf [`TypedArray`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray [`TypedArray.from()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from [`Uint32Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array |