Accessing associations with [[ ]] and [ ]

I have a question about my understanding of Associations and referencing them.
I’ve added the code with my question in it.
Essentially, I have an association a which I dereference with:
a[[ “a”]] (The key just happens to be the letter a) and that works. That is the way I understand one accesses data in an association when the key is a string, otherwise I have to use the keyword Key as in a[[ Key[some key] ]]
Where I get confused is that the following also works:
a[“a”] and gives me the same result as a[[“a”]]. Does that mean that I can also use [ ] (as in a function call) to access the data stored in an Association? Or, is there something I am not grasping?

Question about Associations.nb (4.87 KB)

Take a look at the Basic Examples section in the documentation for Association. You can use either, [[ ]] is syntax for Part. Better to avoid using the Part syntax with Association

a2 = AssociateTo[a, b -> c] (* Note b is not a String *)
(* <|"a" -> x, "b" -> y, "c" -> z, b -> c|> *)

a2[b]
(* c *)

a2["b"]
(* y *)

a2[[b]]
(* Part::pkspec1: The expression b cannot be used as a part specification. *)

Thank you so much Rohit. You helped me notice something that somehow I had missed. Towards the end of the example in the documentation they use the Part approach and I guess my mind got stuck on it, I was simply surprised when I noticed that the [ ] worked, and frankly, I prefer it.

Again, thank you for clarifying this for me.
Now off to my code to replace all those uses of [[ ]] with [ ] when used with associations!

I grew up with the principle “everything is an expression” in WL. Then I met Associations and the world crumbled. I was used to this behaviour:

In[58]:= f[a -> b]
%[[1]]

Out[58]= f[a -> b]

Out[59]= a -> b

Now I get this

In[54]:= Association[a -> b]
%[[1]]

Out[54]= <|a -> b|>

Out[55]= b

Hi Gianluca,

Take a look at this thread on MSE. I don’t ever use Part with Association because it’s behavior is not intuitive, at least to me.

Association[a -> b][[1]] (* Your example *)
(* b *)

Association[a -> b][[1 ;; 1]]
(* <|a -> b|> *)

Association[a -> b][[{1}]]
(* <|a -> b|> *)