`prop in localStorage` vs `localStorage.getItem('prop')!==null`
`prop in localStorage` vs `localStorage.getItem('prop')!==null`
this问题的答案推荐:
localStorage.getItem('prop') !== null
但是,我想保持我的代码一致,我想使用:
'prop' in localStorage
第二种形式有什么问题吗?从速度上来说,应该快的差不多了。
您应该使用 getItem(prop) !== null
测试,因为 in
无法区分存储在 localStorage
中的值与该对象的不可枚举属性(或从其原型链继承的属性) ).
一个很好的例子是'getItem' in localStorage === true
这个区别是 the in
operator 会遍历原型链,但是 getItem
只会 return 对象本身的数据集。
所以像这样的东西总是 return true
,即使你从来没有用那个键设置项目:
'toString' in localStorage
这可能不是预期的行为,因此在这种情况下您可能希望避免它。
您可以获得更一致的代码的一种方法是使用 the hasOwnProperty
method。此方法适用于所有对象,包括 localStorage
。请记住,它的行为确实不同于 getItem
和 in
,因为它 return 是布尔值,不会遍历原型链。
this问题的答案推荐:
localStorage.getItem('prop') !== null
但是,我想保持我的代码一致,我想使用:
'prop' in localStorage
第二种形式有什么问题吗?从速度上来说,应该快的差不多了。
您应该使用 getItem(prop) !== null
测试,因为 in
无法区分存储在 localStorage
中的值与该对象的不可枚举属性(或从其原型链继承的属性) ).
一个很好的例子是'getItem' in localStorage === true
这个区别是 the in
operator 会遍历原型链,但是 getItem
只会 return 对象本身的数据集。
所以像这样的东西总是 return true
,即使你从来没有用那个键设置项目:
'toString' in localStorage
这可能不是预期的行为,因此在这种情况下您可能希望避免它。
您可以获得更一致的代码的一种方法是使用 the hasOwnProperty
method。此方法适用于所有对象,包括 localStorage
。请记住,它的行为确实不同于 getItem
和 in
,因为它 return 是布尔值,不会遍历原型链。