Skip to content

Thoughts on "Use dot notation when accessing properties" #642

Description

@AlicanC

This is my rule for accessing properties:

If the object has properties that is not accessible with dot notation, use subscript notation. Use dot notation otherwise.

So:

const objOne = {
  'facebook': 'no idea',
  'google-plus': 'no idea',
};

objOne['facebook'] = 'thanks';
objOne['google-plus'] = 'no thanks';

const objTwo = {
  'facebook': 'no idea',
  'googlePlus': 'no idea',
};

objTwo.facebook = 'thanks';
objTwo.googlePlus = 'no thanks';

With Airbnb style, you have to write like this:

obj.foo = true;
obj.bar = true;
obj['foo-bar'] = true;
obj.baz = true;
obj['foo-baz'] = true;

This looks very ugly to be honest.


My suggestion is this (which is also different from my own rule):

Prefer dot notation when accessing properties. Only use subscript notation when you have to. If you used subscript notation when accessing a property, use subscript for other all cases.

So:

function foo(providers) {
  const myProvider = 'google-plus';

  if (providers.facebook) { // This is okay
    // ...
  } else if (providers[myProvider]) { // This is okay
    // ...
  }
}

function bar(providers) {
  if (providers['google-plus']) { // This is okay
    // ...
  } else if (providers['facebook']) { // This is okay
    // ...
  }
}

function baz(providers) {
  if (providers['google-plus']) { // This is okay
    // ...
  } else if (providers.facebook) { // This is not okay
    // ...
  }
}

function boo(providers) {
  if (providers['facebook']) { // This is not okay
    // ...
  }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions