Is there a difference between writing localStorage['key'] = value
or localStorage.setItem('key', value)
?
I saw this question marked as duplicate but within Developer Tools the behavior of both notations is different: the bracket notation does not seem to serialize to a string.
For instance:
> localStorage['key'] = [1,2,3]
[1, 2, 3]
> localStorage.setItem('other', [4,5,6])
undefined
> localStorage.key
[1, 2, 3]
> localStorage.other
"4,5,6"
> localStorage.key.length
3
> localStorage.other.length
5
Can anyone explain that difference in behavior? Can I use the bracket notation and forget about always serializing to JSON?
In general, see localStorage - use getItem/setItem functions or access object directly? - you can use properties the same way as getItem
/setItem
. Both ways will stringify the values automatically.
Unless…
you are using one of the predefined methods' names, like of .key()
. That is calling for trouble.
.key
is subsequently accessed. localStorage
object. No stringification happens, and you just will get the object you did put there. It will not be stored.> localStorage.key
function(){ … }
> localStorage.key = [1,2,3]
[1,2,3] // the rvalue
Opera> localStorage.key
"1,2,3"
Opera> localStorage.length
1
Chrome> localStorage.key
[1,2,3]
Chrome> localStorage.length
0