localStorage 和布尔值 'string'
localStorage and boolean 'string'
在localStorage中存储布尔值,这个值被转换成字符串。
现在尝试将此值从 localStorage 转换回布尔值,我需要使用 JSON.parse()
方法,更方便的 !!
不起作用。
代码示例:
var test = false;
localStorage['test'] = test;
console.log("JSON.parse returns: ", JSON.parse(localStorage['test']), "expected: ", test);
console.log("'!!' returns: ", !! localStorage['test'], "expected: ", test);
我很困惑为什么会出现这种行为。有什么解释吗?
PS:使用 getter/setter localStorage 方法在这里无关紧要,结果相同。
本地存储存储字符串,恐怕,无论输入是什么(如果你用一个对象喂它,它会用它的标准 toString()
方法自动转换)...所以你在做!! test
在字符串上,它总是 true
.
在处理存储在 DOM storage
中的内容时,您应该始终使用 JSON.stringify()
和 JSON.parse()
保存对象时使用JSON.stringify()
。如您所知,它将 JavaScript 值转换为 JSON 字符串,因此当使用 JSON.parse()
时,它会正确转换回来。
localStorage['test'] = JSON.stringify(test);
发生这种情况是因为本地存储中的任何存储值都是字符串。
所以你已经执行 !!"false"
并且 !!
对于非空字符串总是 true
。
为了能够在 localStorage 中存储非字符串值,您必须始终使用 JSON.
你想做的很简单 localDataStorage,你可以透明地 set/get 以下任何一项 "types":数组,布尔值、日期、浮点数、整数、Null、对象或字符串。
[免责声明]我是实用程序的作者[/免责声明]
示例:
localDataStorage.set( 'test', false );
localDataStorage.get( 'test' ); --> false
所有转换工作都在后台为您完成:只需 set/get 即可。
在localStorage中存储布尔值,这个值被转换成字符串。
现在尝试将此值从 localStorage 转换回布尔值,我需要使用 JSON.parse()
方法,更方便的 !!
不起作用。
代码示例:
var test = false;
localStorage['test'] = test;
console.log("JSON.parse returns: ", JSON.parse(localStorage['test']), "expected: ", test);
console.log("'!!' returns: ", !! localStorage['test'], "expected: ", test);
我很困惑为什么会出现这种行为。有什么解释吗?
PS:使用 getter/setter localStorage 方法在这里无关紧要,结果相同。
本地存储存储字符串,恐怕,无论输入是什么(如果你用一个对象喂它,它会用它的标准 toString()
方法自动转换)...所以你在做!! test
在字符串上,它总是 true
.
在处理存储在 DOM storage
中的内容时,您应该始终使用JSON.stringify()
和 JSON.parse()
保存对象时使用JSON.stringify()
。如您所知,它将 JavaScript 值转换为 JSON 字符串,因此当使用 JSON.parse()
时,它会正确转换回来。
localStorage['test'] = JSON.stringify(test);
发生这种情况是因为本地存储中的任何存储值都是字符串。
所以你已经执行 !!"false"
并且 !!
对于非空字符串总是 true
。
为了能够在 localStorage 中存储非字符串值,您必须始终使用 JSON.
你想做的很简单 localDataStorage,你可以透明地 set/get 以下任何一项 "types":数组,布尔值、日期、浮点数、整数、Null、对象或字符串。
[免责声明]我是实用程序的作者[/免责声明]
示例:
localDataStorage.set( 'test', false );
localDataStorage.get( 'test' ); --> false
所有转换工作都在后台为您完成:只需 set/get 即可。