Přístup k vlastnostem JavaScript:tečková notace vs. závorky?

Kromě zřejmého faktu, že první forma by mohla používat proměnnou a ne pouze řetězcový literál, existuje nějaký důvod používat jednu přes druhou, a pokud ano, v jakých případech?

V kódu:

// Given:
var foo = {'bar': 'baz'};

// Then
var x = foo['bar'];

// vs. 
var x = foo.bar;

Kontext:Napsal jsem generátor kódu, který vytváří tyto výrazy, a zajímalo by mě, který je výhodnější.

Odpověď

(Zdroj zde.)

Závorka s hranatými závorkami umožňuje použití znaků, které nelze použít s tečkovou notací:

var foo = myForm.foo[]; // incorrect syntax
var foo = myForm["foo[]"]; // correct syntax

včetně znaků mimo ASCII (UTF-8), jako v myForm["ダ"] (další příklady).

Zadruhé, zápis hranatých závorek je užitečný při práci s názvy vlastností, které se liší předvídatelným způsobem:

for (var i = 0; i < 10; i++) {
  someFunction(myForm["myControlNumber" + i]);
}

Souhrn:

  • Tečkový zápis je rychlejší na zápis a jasnější na čtení.
  • Závorka umožňuje přístup k vlastnostem obsahujícím speciální znaky a výběr vlastností pomocí proměnných

Dalším příkladem znaků, které nelze použít s tečkovou notací, jsou názvy vlastností, které samy o sobě obsahují tečku .

Odpověď json může například obsahovat vlastnost nazvanou bar.Baz .

var foo = myResponse.bar.Baz; // incorrect syntax
var foo = myResponse["bar.Baz"]; // correct syntax