◆ めったに使わなくても時々使うし 使いどきがわかる
◆ ほんとに一度も使った覚えがなくて使うシーンが思い当たらないのが 1 つだけ

なんだかんだ ES2015+ 以降で新規追加された構文やメソッドはほぼ使ってます
気に入らないのもありますが 嫌でも使わざるを得ないものがありますし 一部のものは理由が他人が書いたものが読みづらくなるからなので 自分で書いて読む分には便利になります

メソッド一覧を見ててもどれも使うなーと思ってましたが ひとつ一度も使った覚えのないものがありました
それ以外の JavaScript の基本型のメソッドは 廃止予定にでもなってるものでもなければ頻繁でなくともたいてい使うケースがあります
しかしコレに関してはまずユースケースすら思いつかないです

まずはあまり使わないどころから

数値型

Number.prototype
// constructor: ƒ Number()
// toExponential: ƒ toExponential()
// toFixed: ƒ toFixed()
// toLocaleString: ƒ toLocaleString()
// toPrecision: ƒ toPrecision()
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// __proto__: Object

toFixed は以外はそこまで使わないです
toExponential や toPrecision はあまり使いません
それでも使う目的ははっきりしてますし 数値を文字列化して表示するものを作る場合には使うこともあります
toLocaleString は 3 桁ごとにカンマをいれてくれるので 金額表示する場合には重宝します

真偽値型

Boolean.prototype
// constructor: ƒ Boolean()
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// __proto__: Object

Boolean 型は特にメソッドがないです

シンボル型

Symbol.prototype
// constructor: ƒ Symbol()
// description: (...)
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// Symbol(Symbol.toPrimitive): ƒ [Symbol.toPrimitive]()
// Symbol(Symbol.toStringTag): "Symbol"
// get description: ƒ description()
// __proto__: Object

Symbol 型も特にメソッドがないです

文字列型

String.prototype
// anchor: ƒ anchor()
// big: ƒ big()
// blink: ƒ blink()
// bold: ƒ bold()
// charAt: ƒ charAt()
// charCodeAt: ƒ charCodeAt()
// codePointAt: ƒ codePointAt()
// concat: ƒ concat()
// constructor: ƒ String()
// endsWith: ƒ endsWith()
// fixed: ƒ fixed()
// fontcolor: ƒ fontcolor()
// fontsize: ƒ fontsize()
// includes: ƒ includes()
// indexOf: ƒ indexOf()
// italics: ƒ italics()
// lastIndexOf: ƒ lastIndexOf()
// length: 0
// link: ƒ link()
// localeCompare: ƒ localeCompare()
// match: ƒ match()
// matchAll: ƒ matchAll()
// normalize: ƒ normalize()
// padEnd: ƒ padEnd()
// padStart: ƒ padStart()
// repeat: ƒ repeat()
// replace: ƒ replace()
// search: ƒ search()
// slice: ƒ slice()
// small: ƒ small()
// split: ƒ split()
// startsWith: ƒ startsWith()
// strike: ƒ strike()
// sub: ƒ sub()
// substr: ƒ substr()
// substring: ƒ substring()
// sup: ƒ sup()
// toLocaleLowerCase: ƒ toLocaleLowerCase()
// toLocaleUpperCase: ƒ toLocaleUpperCase()
// toLowerCase: ƒ toLowerCase()
// toString: ƒ toString()
// toUpperCase: ƒ toUpperCase()
// trim: ƒ trim()
// trimEnd: ƒ trimEnd()
// trimLeft: ƒ trimStart()
// trimRight: ƒ trimEnd()
// trimStart: ƒ trimStart()
// valueOf: ƒ valueOf()
// Symbol(Symbol.iterator): ƒ [Symbol.iterator]()
// __proto__: Object

数が多いですが anchor や big など deprecated になってるメソッドが多いです
この辺は HTML タグでラップしてくれるものです
あと substr も非推奨らしいです
厳密には deprecated ではないものの legacy function をという扱いで可能なら使うことを避けるべきだそうです
それらを除くと

charAt: ƒ charAt()
charCodeAt: ƒ charCodeAt()
codePointAt: ƒ codePointAt()
concat: ƒ concat()
constructor: ƒ String()
endsWith: ƒ endsWith()
includes: ƒ includes()
indexOf: ƒ indexOf()
lastIndexOf: ƒ lastIndexOf()
length: 0
localeCompare: ƒ localeCompare()
match: ƒ match()
matchAll: ƒ matchAll()
normalize: ƒ normalize()
padEnd: ƒ padEnd()
padStart: ƒ padStart()
repeat: ƒ repeat()
replace: ƒ replace()
search: ƒ search()
slice: ƒ slice()
split: ƒ split()
startsWith: ƒ startsWith()
substring: ƒ substring()
toLocaleLowerCase: ƒ toLocaleLowerCase()
toLocaleUpperCase: ƒ toLocaleUpperCase()
toLowerCase: ƒ toLowerCase()
toString: ƒ toString()
toUpperCase: ƒ toUpperCase()
trim: ƒ trim()
trimEnd: ƒ trimEnd()
trimLeft: ƒ trimStart()
trimRight: ƒ trimEnd()
trimStart: ƒ trimStart()
valueOf: ƒ valueOf()

余り使わないのは concat, localCompare, normalize, substring です

concat は基本 + 演算子でいいのでほぼ使う機会はないですが 全くないわけではありません
配列と同じように扱えるので データが配列か文字列か問わず同じように扱いたいケースで使います

localCompare は sort メソッドで -1 か 0 か 1 を返すときに使えるメソッドです
多くはないですが使うケースはあります

normalize もあまり使わないのですがユーザ入力を正規化する用途では便利です

"AAあアア①".normalize("NFKD")
// "AAあアア1"

といったことができます
アルファベットは半角化してカタカナは全角化 さらに◯付き数字は◯をとってくれます
これ以外にもいろいろ変換される文字はあります

substring は今では全部 slice にしてしまってるので使ってませんが以前は substr / substring で使い分けてたので一度も使ってないわけではないです
またほぼ同じメソッドがあってそれを使ってるだけで使い所がわからないというわけではないです

関数型

dir(Function.prototype)
// apply: ƒ apply()
// arguments: (...)
// bind: ƒ bind()
// call: ƒ call()
// caller: (...)
// constructor: ƒ Function()
// length: 0
// name: ""
// toString: ƒ toString()
// Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
// get arguments: ƒ ()
// set arguments: ƒ ()
// get caller: ƒ ()
// set caller: ƒ ()
// __proto__: Object
// [[FunctionLocation]]: <unknown>
// [[Scopes]]: Scopes[0]

メソッドは apply と bind と call だけです
apply は ...args でまとめて引数を渡せるので使うところは減りましたが this を設定したい場合には使います

fn.call(this_value, ...args)
fn.apply(this_value, args)

は一緒なのでどっちかだけでもいいのですが せっかく 2 つあるので使い分けてます

オブジェクト型

Object.prototype
// constructor: ƒ Object()
// hasOwnProperty: ƒ hasOwnProperty()
// isPrototypeOf: ƒ isPrototypeOf()
// propertyIsEnumerable: ƒ propertyIsEnumerable()
// toLocaleString: ƒ toLocaleString()
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// __defineGetter__: ƒ __defineGetter__()
// __defineSetter__: ƒ __defineSetter__()
// __lookupGetter__: ƒ __lookupGetter__()
// __lookupSetter__: ƒ __lookupSetter__()
// get __proto__: ƒ __proto__()
// set __proto__: ƒ __proto__()

どれもあんまり使いませんが hasOwnProperty や isPrototypeOf などは使うシーンはあります

配列型

Array.prototype
// concat: ƒ concat()
// constructor: ƒ Array()
// copyWithin: ƒ copyWithin()
// entries: ƒ entries()
// every: ƒ every()
// fill: ƒ fill()
// filter: ƒ filter()
// find: ƒ find()
// findIndex: ƒ findIndex()
// flat: ƒ flat()
// flatMap: ƒ flatMap()
// forEach: ƒ forEach()
// includes: ƒ includes()
// indexOf: ƒ indexOf()
// join: ƒ join()
// keys: ƒ keys()
// lastIndexOf: ƒ lastIndexOf()
// length: 0
// map: ƒ map()
// pop: ƒ pop()
// push: ƒ push()
// reduce: ƒ reduce()
// reduceRight: ƒ reduceRight()
// reverse: ƒ reverse()
// shift: ƒ shift()
// slice: ƒ slice()
// some: ƒ some()
// sort: ƒ sort()
// splice: ƒ splice()
// toLocaleString: ƒ toLocaleString()
// toString: ƒ toString()
// unshift: ƒ unshift()
// values: ƒ values()
// Symbol(Symbol.iterator): ƒ values()
// Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …}
// __proto__: Object

配列はほとんどのものを使いますね
concat は [...array] が使えるので使うシーンは減りましたが メソッドで使いたい場合はありますし文字列と同じ用に扱う場合には助かります

entries, keys, values は使わない人はあまり使わないかもですが結構便利です
entries は for-of でインデックス付きで欲しいときに使います
keys は Array(10).keys() のようにすると 0 から指定した数まで増えるイテレータになります
values は for-of のデフォルトなのであまり使いませんが 直接イテレータがほしいときに使います
またこれらは Map や Set などと同じように扱えるメリットがあります

flatMap は map で単純に 1 つのデータが 1 つのデータに対応しない場合に使います
1 つのデータが 複数になったり場合によっては空になったりするときに使えます

reduceRight は個人的にはあんまり使いませんが reduce で足し算みたいな順番問わないものではなく順番に意味がある場合には必要です
reverse して reduce でもいいですが 両方向版のメソッドがあっていいと思います

使わなかったものは……

使わなかったものはこれまであげた一覧の中にあります
それは……


copyWithin

です
追加されたときに試しに使った以降 一度も使った記憶がありません
機能としては理解してるはずですが使いみちがないです

配列の指定範囲を同じ配列の特定の場所からコピーするというものですが その処理が必要なシーンがありません
別の配列にコピーするなら 使いたいケースはありました
fill でデフォルト値を詰めた上で特定の場所に別配列のデータを追加するというものです
copyWithin の使い所がとうとう来たかと思ったのに 同じ配列内のみだったので使えませんでした
その処理は結局 splice で対処しました

ほんとにどこで使うのでしょうね
いろいろ考えた結果思いついたのは 配列をメモリ代わりにするような処理をする場合です
WebAssembly が出る前の asm.js はデータはひとつの配列上に置くみたいな特別な処理だったと思います
配列をメモリと考えて最初にすべて確保しておいて C 言語みたいに数値の処理のみを行うものです
それなら メモリコピーと考えれば特定範囲を空いている部分にコピーするというのはわかります
配列拡張したいけど後ろに空きがないから移動しようとか 単にコピー処理をしたいとか
ただそういうのになると Uint8Array のほうが向いていて Array では要らない気がします
slice や concat みたいに配列系をあわせただけで Uint8Array などでバイナリ処理を頑張る系の人が使ってるのでしょうか?
そんな特殊なことしない場合でも便利な使いみちがあったら教えてほしいです