🌀
Array.prototype[@@iterator] ←この @@ って何?
MDNにはたまにアットマークを2つ並べた @@
という記法が登場します。
Array.prototype[@@iterator]()
The
@@iterator
method is part of The iterable protocol, that defines how to synchronously iterate over a sequence of values.
しかし、この記法をそのままJavaScriptやTypeScriptの処理系に入力しても構文エラーになります。
console.log(Array.prototype[@@iterator]());
// => Uncaught SyntaxError: Invalid or unexpected token
ではこの @@
はどこから来て、何を意味する記法なのでしょうか。
結論
これはドキュメント用のwell-known symbolsの略記法で、ECMAScriptの仕様の中で定義されています。
Within this specification a well-known symbol is referred to by using a notation of the form @@name, where "name" is one of the values listed in Table 1.
「仕様内で頻繁に参照するので、便宜的に略記法が導入されている」というだけで、JavaScriptというプログラミング言語の挙動とは関係ないわけですが、便利なのでMDNなど他の文書でも流用されているということのようです。
@@
を Symbol.
に置き換えることで、だいたい動くコードになると考えてよさそうです。
console.log(Array.prototype[Symbol.iterator]());
// => Array Iterator {}
Discussion