# Dot notation vs Bracket notation
Both notations can access object properties. But the question is often which one should I use 🤔. Wonder no more, just follow Airbnb's style guide. Always use Dot. And when you want to access object property with a variable, use Bracket 👍
// Dot notation vs Bracket notation
const variable = 'cookie';
const snack = {
cookie: '🍪',
};
// ✅ Dot: access property
snack.cookie;
// ✅ Bracket: access property with variable
snack[variable];
# Accessing Object Properties
There are 2 ways to access object properties. Dot and Bracket.
const obj = {
name: 'value',
};
// Dot Notation
obj.name; // 'value'
// Bracket Notation
obj['name']; // 'value'
# Dot Notation for the win
I remember when I was first learning this. Understanding the 2 different ways was simple. Nothing too complicated. But my concern was never about the different notations. My biggest dilemma was, WHICH SHOULD I USE?? 🤯
If you were like me! Here's the breakdown. They both do the same. So here is the simple rule. By default, just use the Dot notation.
✅ Dot Notation 🏆
- It's a lot easier to read
- It's way faster to type.
# Dot Notation's Limitation
With any rule, there are always exceptions 😂. So let's look at some of the limitations.
a. Issue working with Identifiers b. Issue working with Variables
# a. Working with Identifiers
One of the major limits of using the Dot notations is that it only works with valid identifiers. First, let' me define what is an identifier
An identifier is a sequence of characters in the code that identifies a variable, function, or property.
The identifier has the following rules:
- case sensitive
- can contain Unicode letters
$
,-
, are allowed- Digits (0-9) are okay BUT may not start with a digit
So let's sample some of these examples and see what happens when we use the Dot notation.
const obj = {
123: 'digit',
123name: 'start with digit',
name123: 'does not start with digit',
$name: '$ sign',
name-123: 'hyphen',
NAME: 'upper case',
name: 'lower case'
};
Note:
You may notice some property names I had to include quotes. Example: 123name
. I had to do that otherwise the object would be considered invalid and it would throw a Syntax Error.
# Dot Notation
obj.123; // ❌ SyntaxError
obj.123name; // ❌ SyntaxError
obj.name123; // ✅ 'does not start with digit'
obj.$name; // ✅ '$ sign'
obj.name-123; // ❌ SyntaxError
obj.'name-123';// ❌ SyntaxError
obj.NAME; // ✅ 'upper case'
obj.name; // ✅ 'lower case'
See how I tried to be clever and use quotes in the obj.'name-123'
example. Well, don't, cause it still won't work 😂.
# Bracket Notation
But none of this is a problem for the Bracket Notation.
obj['123']; // ✅ 'digit'
obj['123name']; // ✅ 'start with digit'
obj['name123']; // ✅ 'does not start with digit'
obj['$name']; // ✅ '$ sign'
obj['name-123']; // ✅ 'does not start with digit'
obj['NAME']; // ✅ 'upper case'
obj['name']; // ✅ 'lower case'
# Verdict
If you think you have an invalid JavaScript identifier as your property key, use the Bracket Notation 👍
# b. Accessing Property with Variables
Another limitation of the Dot notation is working with variables. You definitely should use the Bracket Notation. Note! When you're referencing a variable in the Bracket Notation, you need to skip the quote. That's kinda how you know you're dealing with a variable instead of accessing the property key.
const variable = 'name';
const obj = {
name: 'value',
};
// Bracket Notation
obj[variable]; // ✅ 'value'
// Dot Notation
obj.variable; // undefined
# Undefined Property
When you're trying to access a property that doesn't exist, it will return undefined
. It doesn't throw an error.
const emptyObj = {};
emptyObj.name; // undefined
emptyObj['name']; // undefined
# Only Bracket Notation works with Variable
Let's return to our variable object example previously. If you used the Dot notation, it will just assume you're trying to access the property with a valid JavaScript identifier. Because it's returning something, you might think everything is working fine. Under the hood, yes it is. But if your intention is to use the variable, it might throw you off. This definitely can be a source of a debugging headache. So watch out for that!!
const variable = 'name';
const obj = {
name: 'value',
variable: '👻',
};
// Bracket Notation
obj[variable]; // ✅ 'value'
// Dot Notation
obj.variable; // '👻'
Never use the Dot Notation when using a Variable
# Which to use?
Knowing the limitations of Dot Notation, let's update our rule.
Use the Dot Notation. But if you're dealing with invalid identifier or variables, use the Bracket notation.
# Community Input
- @Marcello Nicoletti: [Another benefits of the Dot notation] It also looks like object usage in other C-like languages. It will be easier to read and write for people coming from C, C#, and Java.