简体   繁体   中英

How to get the JavaScript Object from the given string?

How to get the Object from a string?

I written a localStorage util, in it there are get and set methods.

in the set method:

function fnGet(name){

var getVal=storage.getItem(name);
if(getVal==null){
  return console.log('the localstorage did\'t have'+name);
}
if((getVal.split(':-:')).lenght>1){
  return eval('('+getVal.split(':-:')[0]+')');
}
  return getVal.split(':-:')[0];
}

You can ignore the :-: , it is the separator of the saved data and timestamp.

there is a problem, if the data is stored a JavaScript Object, such like this:

'{"pk":1,"username":"test01","email":"","first_name":"","last_name":""}:-:1521381469910'

when I use the get method, it will become like this:

'{"pk":1,"username":"test01","email":"","first_name":"","last_name":""}'

How can I get to the JavaScript Object?

How to optimize my get method?

JSON.parse on your response from the store. localStorage stores everything as strings so you would need to stringify the object at first, as Im supposed you do as otherwise you wouldnt have been able to save it to the store.

Then to retrieve it you would need to parse it to get the javascript object again.

Two things:

  1. Use JSON.parse() instead of eval ; it's not only safer, but more descriptive as to what your intent is. Note: this requires using JSON.stringify() on the data being saved in localStorage
  2. Correct your spelling errors; you would never get to the eval/parser block because your length was spelled "lenght"

 function fnGet(name) { let getVal = storage.getItem(name) if (getVal == null) { return console.log(`the localstorage did't have: ${name}`); } let val = getVal.split(':-:'); // for performance cache the split if (val.length > 1) { // Spelling error: "lenght" -> length return JSON.parse(val[0]); } return val[0]; } 

LocalStorage saves the data stringified. So you should use JSON.parse(yourVariable) to get the data back as JSON

function fnGet(name) {

    var getVal = storage.getItem(name);
    if (getVal == null) {
        return console.log('the localstorage did\'t have' + name);
    }
    if ((getVal.split(':-:')).lenght > 1) {
        return eval('(' + JSON.parse(getVal.split(':-:')[0]) + ')');
    }
    return getVal.split(':-:')[0];
}

all you needed was JSON.parse which takes a string as an argument and if its a valid object string ,returns an object else throws an error

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM