現代的JavaScriptおれおれアドベントカレンダー2017 – 16日目
概要
{ foo: foo } を { foo } のように省略できます。
const name = 'Alice';
const obj = { name };
console.log(obj.name); // => "Alice"
使い方
値が入っている変数の名前とプロパティの名前が一致する場合、省略して書くことができます。
const name = 'Alice';
const obj1 = { name: name };
console.log(obj1.name); // => "Alice"
const obj2 = { name };
console.log(obj2.name); // => "Alice"
混ぜて書く
コロン : と値とを書く普通のやり方と一緒に使えます。
const data;
const result = {
data,
date: Date.now(),
};
関数の引数で
頑張って作った結果を突っ込んだ変数とか、仮引数でもらったやつをそのまま突っ込むこともできます。
function foo({ message }) {
const date = Date.now();
bar({ data, message });
}
ちなみに関数の仮引数( foo() のやつ)の方は「分割代入」の類です。別稿参照。
Vue.jsで
components でよく使ってます。
const ThemeItem = require('./ThemeItem.vue')
module.exports = {
components: {
ThemeItem,
},
// ...
};
その他
混ぜてかくと気持ち悪いような
ひとつのオブジェクトを作る場合はどちらかに統一して、 : 使う場合は省略できるものもしない方が良いかなあ。
const id = nanika.id;
const status = { ... }; // なんか複雑なアレ
const obj = {
date: Date.now(),
id,
name: regularize(user.name),
status,
};
違うオブジェクトならファイル内で両方あって良いんだけど。
参考
- ECMAScript® 2017 Language Specification
- 12.2.6 Object Initializer
- 12.2.6.8 Runtime Semantics: PropertyDefinitionEvaluation
- オブジェクト初期化子 – JavaScript | MDN