1
0

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 3 years have passed since last update.

JavaScriptではプロパティ名にキーワードが使える

Posted at

言われてみればそうだねと思う人も多いと思いますが、JavaScriptではオブジェクトのプロパティ名に予約キーワードを使えます。

動く
const obj = {};
obj.if = 1;
console.log(obj.if); // 1

他の言語だと、例えばPythonだと使えません。

動かない
class A:
  pass
obj = A()
obj.if = 1 # SyntaxError: invalid syntax

他にも使えない言語の方が多い気がします。

ただしJavaScriptでも変数や関数の宣言時の識別子としては使えません。

動かない
const if = 1;    // SyntaxError: Unexpected token 'if'
function for() {
  return 2;
} // SyntaxError: Unexpected token 'for'

当然オブジェクトのプロパティにしてしまえば使えます。

動く
const if_ = 1;
function for_() {
  return 2;
}

const obj = { if: if_, for: for_ };
console.log(obj.if, obj.for()); // 1 2

さらにいうとclass構文のメンバー定義はローカル変数・ローカル関数宣言っぽいですがあくまでオブジェクトのプロパティなのでキーワードが使えます。

動く
class A {
  if = 1;
  for() {
    return 2;
  }
}
const obj = A();
console.log(obj.if, obj.for()); // 1 2

雑記

JavaScriptはオブジェクトを辞書型のように扱うという特徴があります。

オブジェクトを辞書型のように扱っている例
const obj = { prop: 1 };  // 辞書っぽいオブジェクト作成
obj['prop'] === obj.prop; // []を使った辞書っぽいプロパティアクセス

この特徴はあまり注目されていないような気がしますが、私は非常に重要な特徴だと思ってます。JavaScriptの好きなところ3選には絶対入りますね。
この特徴が現れているのが今回のネタでもあります。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?