Cuando asigno un valor entero al elemento localStorage
localStorage.setItem('a',1)
y comprobar su tipo
typeof(localStorage.a)
"string"
vuelve cadenapuedo encasillarlo en En t para mi uso
parseInt(localStorage.a)
Mi pregunta, ¿es posible almacenar un valor entero dentro de localStorage como puedo hacer para los objetos de Javascript sin encasillar?
a={};
a.number=1;
typeof(a.number)
"number"
Mi pregunta, ¿es posible almacenar un valor entero dentro de localStorage como puedo hacer para los objetos de Javascript sin encasillar?
No.
Los objetos de almacenamiento son simples almacenes de clave-valor, similares a los objetos, pero permanecen intactos durante las cargas de página. Las claves pueden ser cadenas o números enteros, pero los valores son siempre cadenas. [source]
-
lo que significa que cada vez que necesito encasillarlo para hacer cálculos matemáticos?
– Nickalchemist
27 de noviembre de 2015 a las 7:38
-
Sí (suponiendo que no pueda hacer el cálculo en la cadena en sí, lo que probablemente no pueda, y aún más probablemente no debería).
– Adam Zerner
27 de noviembre de 2015 a las 7:41
-
Resolví ese problema con números decimales como este: Si tengo una variable local llamada x con un valor de 1.54, la almacenaré en el almacenamiento local como x*100 (que es 154) Y luego, cuando la leeré desde el local almacenamiento lo leeré y dividiré por 100 . De esa manera podría mantener los números después del punto.
– Uri Bruto
25 de abril de 2021 a las 5:45
kaiido
En realidad, puede, si estamos de acuerdo en que analizar no es lo mismo que encasillar:
let val = 42;
localStorage.answer = JSON.stringify(val);
let saved = JSON.parse(localStorage.answer);
console.log( saved === val ); // true
Violín ya que los stacksnippets sobreprotegidos no permiten almacenamiento local.
Para simplificar, de todos modos siempre debe asignar a JSON lo que está guardando en localStorage, de esta manera no tiene que pensar en lo que está guardando/recuperando, y evitará "[object Object]"
siendo salvado.
Puede almacenar en formato numérico usando:
localStorage.setItem('object', JSON.stringify({
//Insert Number(value)
number: Number(1)
}));
// After get item
var object = localStorage.getItem('object');
console.log(JSON.parse(object));
-
Incluso si no analiza directamente el valor a int, el JSON es una cadena y cuando analiza el objeto, analiza sus valores. JSON sabe que ese valor en particular es un número entero y lo analizará automáticamente a un int, pero aún lo analiza.
– Shaedrich
30 de marzo de 2021 a las 14:44
-
No dije, no está funcionando, solo dije que no cumple con los requisitos de no conversión.
– Shaedrich
30 de marzo de 2021 a las 14:54
-
Ah, sí, entiendo, tu punto es perfecto. Dejo esta respuesta por aquí por si alguna persona como yo anda buscando algo en ese sentido, que fue mi caso! gracias por aclararlo 🙂
–Ricardo Santos
30 de marzo de 2021 a las 18:04
-
No hay problema 🙂 Me alegro, pude transmitir mi punto
– Shaedrich
30 de marzo de 2021 a las 19:15
Mac
Sí, puede almacenar un número entero en localStorage, pero dado que se convertirá en una cadena, ¿cómo sabe realmente que era un número entero? La pregunta no es retórica. Almacenar un número entero en localStorage es una cosa (y fácil de lograr), pero sabiendo que se supone que es un número entero cuando lo recuperas es un asunto completamente diferente. No solo debe realizar un seguimiento del valor de la clave de almacenamiento, sino que también debe realizar un seguimiento de los datos tipo.
Lo que realmente queremos es un mecanismo que nos permita tratar el almacenamiento casi de la misma manera que tratamos las variables. Si estoy trabajando con un número entero, un flotante, un bigint, una cadena, una fecha, una matriz, un booleano o un objeto, nos gustaría meterlo en localStorage y recuperarlo. Sin conversión. Sin desorden y sin alboroto.
Esto es precisamente lo que almacenamiento de datos local hace. (NOTA: soy el autor). La biblioteca establece/obtiene valores clave de forma transparente utilizando “tipos” de datos como Formación, Empezando, booleano, Fecha, Flotar, Entero, Objeto y Cadena. Almacena un número entero, recupéralo. ¿Trabaja con fechas, bigints o flotantes? Ningún problema. Y si necesita almacenar matrices en localStorage, puede hacerlo fácilmente, así como agregar y eliminar elementos. De nuevo, almacenamiento de datos local hace todo el trabajo pesado por usted. Echemos un vistazo:
Incluir la biblioteca:
<script src="https://cdn.jsdelivr.net/gh/macmcmeans/localDataStorage@master/localDataStorage-2.0.1.min.js"></script>
Crea una instancia de una copia con espacio de nombres:
const lds = localDataStorage( 'myapp-storage' );
Mezcle un número entero en el almacenamiento…
lds.set( 'myIntKey', 467 );
y sacarlo de nuevo:
let myInt = lds.get( 'myIntKey' );
console.log( myInt );
> 467
Asegúrese de que se haya conservado el tipo de datos:
typeof myInt;
> "number"
También puede verificar los tipos de datos con la biblioteca:
lds.showtype( 'myIntKey' );
> "integer"
lds.isinteger( 'myIntKey' );
> true
lds.isnumber( 'myIntKey' );
> true
Y, por supuesto, tenemos algunas funciones auxiliares:
lds.haskey( 'myIntKey' );
> true
lds.hasval( 467 );
> true
lds.hastype( "integer" );
> true
La biblioteca también 1) proporciona ofuscación de datos ligera; 2) comprime cadenas de forma inteligente (para ahorrar espacio de almacenamiento); 3) facilita una búsqueda robusta que incluye consulta por clave (nombre), consulta por valor (clave) y consulta por existencia (verificación booleana); 4) hace cumplir el almacenamiento compartido segmentado dentro del mismo dominio mediante claves de prefijo; y 5) responde a los eventos de cambio de localStorage en la misma página/pestaña que los activó. [/end glossyBrochure]
LocalStorage solo puede almacenar valores de cadena.
– Tholle
27 de noviembre de 2015 a las 7:31
Eso no es encasillar, eso es conversión. JavaScript no tiene encasillamiento (ya que JavaScript no tiene variables escritas).
–TJ Crowder
1 de mayo de 2017 a las 9:52
@nickalchemist: Sí, puede almacenar un valor entero en localStorage y recuperarlo (como un número entero). Vea mi respuesta a continuación.
– Mac
13 mayo 2022 a las 15:31