2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Symbolオブジェクト

Last updated at Posted at 2019-07-05

JavaScript本格入門(ISBN 978-4774184111)で基礎からJavaScriptを勉強するシリーズです。今回はChapter3からSymbolオブジェクトについてです。

Symbolオブジェクト

symbol型はES2015から標準化されたデータ型です。

宣言

宣言は下記のように行います。
データ型はsymbolとなります。

let sym = Symbol('説明');
console.log(typeof sym);      // 出力:symbol

特徴

インスタンス化するときに渡す引数はあくまでも説明です。
同じ説明を入力したとしてもSymbolオブジェクトは別のものとみなされます。
因みに説明は省略可能です。

let sym1 = Symbol('Hello symbol');
let sym2 = Symbol('Hello symbol');
console.log(sym1 === sym2);         // 出力:false

使い道

じゃんけんプログラムを作るとして、3種類の決まり手を定義する必要があります。
下記のような実装の仕方が思い浮かびます。

Symbolを使わない実装
const ROCK = 0;
const SCISSOR = 1;
const PAPER = 2; 
let userInput = PAPER;

if(userInput === ROCK) {
    console.log('you choose rock.');
} else if (userInput === SCISSOR) {
    console.log('you choose scissor.');
} else {
    console.log('you choose paper.');
}

この方法でも識別はできますが、しかしながらROCK, SCISSOR, PAPERの数値自体には何の意味もありません。
やりたいことは3種類の概念を識別したいだけです。
ここでsymbolの特徴がうまく使えます。

Symbolを使った実装
const ROCK = Symbol();
const SCISSOR = Symbol();
const PAPER = Symbol();
let userInput = PAPER;

if(userInput === ROCK) {
    console.log('you choose rock.');
} else if (userInput === SCISSOR) {
    console.log('you choose scissor.');
} else {
    console.log('you choose paper.');
}

このような場合、symbolを使ったほうがバグを未然に防げそうです。
Symbolを使わない実装では、別の人が const MONDAY = 0を追加した場合に、ROCK === MONDAY が等しい概念となってしまい困ったことになりますが、Symbolの場合はそれが発生しません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?