quote-props
オブジェクトリテラルのプロパティ名は、リテラルまたは文字列を使用して2つの方法で定義できます。たとえば、次の2つのオブジェクトは同等です。
var object1 = {
property: true
};
var object2 = {
"property": true
};
多くの場合、文字列の代わりに識別子を使用するか、その逆にするかを選択しても問題ありません。それでも、コードで一貫したスタイルを強制することに決めるかもしれません。
ただし、引用符を使用する必要がある場合がいくつかあります。
- ECMAScript 3 JavaScript エンジン(IE8など)を使用していて、キーワード(
if
など)をプロパティ名として使用したい場合。この制限は ECMAScript 5 で削除されました。 "one two"
のようにスペースを含むプロパティを持つなど、プロパティ名に非識別子文字を使用したい場合。
引用符が問題になる別の例は、数値リテラルをプロパティキーとして使用する場合です。
var object = {
1e2: 1,
100: 2
};
最初は問題ないように見えるかもしれませんが、このコードは実際には ECMAScript 5 の厳格モードで構文エラーをスローします。これは、1e2
と100
がプロパティ名として使用される前に文字列に強制変換されるために発生します。String(1e2)
とString(100)
の両方が"100"
と等しくなるため、「厳格モードではオブジェクトリテラルでの重複データプロパティは許可されていません」というエラーが発生します。このような問題はデバッグが難しい場合があるため、すべてのプロパティ名を引用符で囲むことを要求することを好む人もいます。
ルールの詳細
このルールは、オブジェクトリテラルのプロパティ名を引用符で囲むことを要求します。
オプション
このルールには、文字列オプションとオブジェクトオプションの2つのオプションがあります。
文字列オプション
"always"
(デフォルト)は、オブジェクトリテラルのすべてのプロパティ名を引用符で囲むことを要求します。"as-needed"
は、厳密には必要ないオブジェクトリテラルのプロパティ名を引用符で囲むことを許可しません。"consistent"
は、一貫した引用符スタイルを強制します。特定のオブジェクトでは、プロパティのすべてを引用符で囲むか、プロパティを引用符で囲まないかのいずれかにする必要があります。"consistent-as-needed"
は、いずれかの名前が厳密に引用符を必要とする場合は、すべてのオブジェクトリテラルのプロパティ名を引用符で囲むことを要求し、それ以外の場合はオブジェクトプロパティ名を引用符で囲むことを許可しません。
オブジェクトオプション
"keywords": true
は、オブジェクトプロパティ名として使用される言語キーワードを引用符で囲むことを要求します(as-needed
またはconsistent-as-needed
を使用する場合にのみ適用されます)。"unnecessary": true
(デフォルト)は、厳密には必要ないオブジェクトリテラルのプロパティ名を引用符で囲むことを許可しません(as-needed
を使用する場合にのみ適用されます)。"unnecessary": false
は、厳密には必要ないオブジェクトリテラルのプロパティ名を引用符で囲むことを許可します(as-needed
を使用する場合にのみ適用されます)。"numbers": true
は、オブジェクトプロパティ名として使用される数字を引用符で囲むことを要求します(as-needed
を使用する場合にのみ適用されます)。
always
デフォルトの"always"
オプションを使用したこのルールの不正なコードの例
/*eslint @stylistic/quote-props: ["error", "always"]*/
var object = {
foo: "bar",
baz: 42
};
デフォルトの"always"
オプションを使用したこのルールの正しいコードの例
/*eslint @stylistic/quote-props: ["error", "always"]*/
/*eslint-env es6*/
var object1 = {
"foo": "bar",
"baz": 42,
"qux-lorem": true
};
var object2 = {
'foo': 'bar',
'baz': 42,
'qux-lorem': true
};
var object3 = {
foo() {
return;
}
};
as-needed
"as-needed"
オプションを使用したこのルールの不正なコードの例
/*eslint @stylistic/quote-props: ["error", "as-needed"]*/
var object = {
"a": 0,
"0": 0,
"true": 0,
"null": 0
};
"as-needed"
オプションを使用したこのルールの正しいコードの例
/*eslint @stylistic/quote-props: ["error", "as-needed"]*/
/*eslint-env es6*/
var object1 = {
"a-b": 0,
"0x0": 0,
"1e2": 0
};
var object2 = {
foo: 'bar',
baz: 42,
true: 0,
0: 0,
'qux-lorem': true
};
var object3 = {
foo() {
return;
}
};
consistent
"consistent"
オプションを使用したこのルールの不正なコードの例
/*eslint @stylistic/quote-props: ["error", "consistent"]*/
var object1 = {
foo: "bar",
"baz": 42,
"qux-lorem": true
};
var object2 = {
'foo': 'bar',
baz: 42
};
"consistent"
オプションを使用したこのルールの正しいコードの例
/*eslint @stylistic/quote-props: ["error", "consistent"]*/
var object1 = {
"foo": "bar",
"baz": 42,
"qux-lorem": true
};
var object2 = {
'foo': 'bar',
'baz': 42
};
var object3 = {
foo: 'bar',
baz: 42
};
consistent-as-needed
"consistent-as-needed"
オプションを使用したこのルールの不正なコードの例
/*eslint @stylistic/quote-props: ["error", "consistent-as-needed"]*/
var object1 = {
foo: "bar",
"baz": 42,
"qux-lorem": true
};
var object2 = {
'foo': 'bar',
'baz': 42
};
"consistent-as-needed"
オプションを使用したこのルールの正しいコードの例
/*eslint @stylistic/quote-props: ["error", "consistent-as-needed"]*/
var object1 = {
"foo": "bar",
"baz": 42,
"qux-lorem": true
};
var object2 = {
foo: 'bar',
baz: 42
};
keywords
"as-needed", { "keywords": true }
オプションを使用したこのルールの追加の不正なコードの例
/*eslint @stylistic/quote-props: ["error", "as-needed", { "keywords": true }]*/
var x = {
while: 1,
volatile: "foo"
};
"consistent-as-needed", { "keywords": true }
オプションを使用したこのルールの追加の不正なコードの例
/*eslint @stylistic/quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/
var x = {
"prop": 1,
"bar": "foo"
};
unnecessary
"as-needed", { "unnecessary": false }
オプションを使用したこのルールの追加の正しいコードの例
/*eslint @stylistic/quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/
var x = {
"while": 1,
"foo": "bar" // Would normally have caused a warning
};
numbers
"as-needed", { "numbers": true }
オプションを使用したこのルールの追加の不正なコードの例
/*eslint @stylistic/quote-props: ["error", "as-needed", { "numbers": true }]*/
var x = {
100: 1
}
使用しない場合
プロパティ名が引用符で一貫してラップされているかどうかを気にせず、従来のES3環境をターゲットにしていない場合は、このルールをオフにしてください。