HTML5 localStorage obyektlərini saxlama

HTML5 localStorage JavaScript obyektini saxlamaq istərdim amma localStorage çevrilir.

Mən yerli localStorage istifadə edərək, ibtidai javascript növləri və serialları saxlaya və ala bilərəm, lakin obyektlər işə localStorage . Onlar olmalıdır?

İşdə kodum:

 var testObject = { 'one': 1, 'two': 2, 'three': 3 }; console.log('typeof testObject: ' + typeof testObject); console.log('testObject properties:'); for (var prop in testObject) { console.log(' ' + prop + ': ' + testObject[prop]); } // Put the object into storage localStorage.setItem('testObject', testObject); // Retrieve the object from storage var retrievedObject = localStorage.getItem('testObject'); console.log('typeof retrievedObject: ' + typeof retrievedObject); console.log('Value of retrievedObject: ' + retrievedObject); 

Çıxın

HTML5 Veb saxlamasının yanlış anlayışını deyil, brauzer deyil - xüsusi bir səhv və ya məhdudiyyət olduğunu təxmin edirəm. 

Mən http://www.w3.org/TR/html5/infrastructure.html saytında təsvir edilmiş strukturlaşdırılmış klon alqoritmini anlamağa çalışdım. Mən deyirəm nə anlaya bilmirəm, amma bəlkə də problemim, mənim obyekt mülklərinin siyahıda olmadığını (???)

Bunun ətrafında işləmək üçün asan bir yol varmı?


Yeniləmə: W3C nəticədə strukturlaşdırılmış klonlaşdırmanın dəqiqləşdirilməsi ilə bağlı fikrini dəyişdi və tətbiqlərə uyğun olaraq spesifikasiyanı dəyişməyə qərar verdi. Https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 səhifəsinə baxın. Beləliklə, bu sual artıq 100% etibarlıdır, lakin cavablar hələ də maraqlı ola bilər.

2119
06 янв. Kristofer Johnson tərəfindən soruşulan Jan 06 2010-01-06 07:05 '10 at 7:05 2010-01-06 07:05
@ 27 cavab

Apple , MozillaMicrosoft-a baxdıqda, funksionallıq, görünür, yalnız bir neçə xətt / dəyərin emalı ilə məhdudlaşır.

Bir müvəqqəti tənzimləmə, obyektinizin saxlanmasından əvvəl möhkəmləndirilməlidir və sonra qəbul edildikdə təhlil edə bilər:

 var testObject = { 'one': 1, 'two': 2, 'three': 3 }; // Put the object into storage localStorage.setItem('testObject', JSON.stringify(testObject)); // Retrieve the object from storage var retrievedObject = localStorage.getItem('testObject'); console.log('retrievedObject: ', JSON.parse(retrievedObject)); 
2716
06 янв. cavab CMS Jan 06 tərəfindən verilir 2010-01-06 07:25 '10 at 7:25 2010-01-06 07:25

Seçimdə bir qədər yaxşılaşma:

 Storage.prototype.setObject = function(key, value) { this.setItem(key, JSON.stringify(value)); } Storage.prototype.getObject = function(key) { var value = this.getItem(key); return value  JSON.parse(value); } 
border=0

Qısa dövrə getObject() key saxlama vəziyyətində deyilsə, dərhal null qaytarır. JSON.parse() "" (boş string), əgər bu da SyntaxError istisna deyildir.

572
30 июня '10 в 9:45 2010-06-30 09:45 Cavab 30 iyun 2010-cu ildə saat 09 : 45-də Güri tərəfindən verilmişdir. 2010-06-30 09:45

Saxlama obyektini bu rahat üsullarla genişləndirmək faydalı ola bilər:

 Storage.prototype.setObject = function(key, value) { this.setItem(key, JSON.stringify(value)); } Storage.prototype.getObject = function(key) { return JSON.parse(this.getItem(key)); } 

Beləliklə, yalnız strings API tərəfindən dəstəklənir baxmayaraq, həqiqətən lazım olan funksionallığı əldə edirsiniz.

200
06 янв. Cavab Justin Voskuhl Jan 06 tərəfindən verilir 2010-01-06 07:42 '10 at 7:42 2010-01-06 07:42

Saxlama obyektini genişləndirmək böyük bir həlldir. API'ım üçün localStorage üçün bir fasad yaratdım və sonra quraşdırma və bərpa edərkən bu bir obyekt olub olmadığını yoxlayın.

 var data = { set: function(key, value) { if (!key || !value) {return;} if (typeof value === "object") { value = JSON.stringify(value); } localStorage.setItem(key, value); }, get: function(key) { var value = localStorage.getItem(key); if (!value) {return;} // assume it is an object that has been stringified if (value[0] === "{") { value = JSON.parse(value); } return value; } } 
66
21 янв. Alex Grande tərəfindən 21 yanvarda cavab verildi 2011-01-21 21:29 '11 at 21:29 2011-01-21 21:29

Çox həlli aparan böyük bir kitabxana var, buna görə də jStorage adlı köhnə brauzerləri dəstəkləyir

Bir obyekt qura bilərsiniz

 $.jStorage.set(key, value) 

Və onu almaq asan

 value = $.jStorage.get(key) value = $.jStorage.get(key, "default value") 
52
23 авг. JProgrammer tərəfindən verilən cavab 23 avqu . 2011-08-23 06:52 '11 at 6:52 2011-08-23 06:52

Stringify bütün problemləri həll etmir.

Göründüyü kimi burada cavablar JavaScript-də mümkün olan bütün növləri əhatə etmir, buna görə də onları düzgün həll etmək üçün bir neçə qısa nümunələr var:

 //Objects and Arrays: var obj = {key: "value"}; localStorage.object = JSON.stringify(obj); //Will ignore private members obj = JSON.parse(localStorage.object); //Boolean: var bool = false; localStorage.bool = bool; bool = (localStorage.bool === "true"); //Numbers: var num = 42; localStorage.num = num; num = +localStorage.num; //short for "num = parseFloat(localStorage.num);" //Dates: var date = Date.now(); localStorage.date = date; date = new Date(parseInt(localStorage.date)); //Regular expressions: var regex = /^No\.[\d]*$/i; //usage example: "No.42".match(regex); localStorage.regex = regex; var components = localStorage.regex.match("^/(.*)/([az]*)$"); regex = new RegExp(components[1], components[2]); //Functions (not recommended): function func(){} localStorage.func = func; eval( localStorage.func ); //recreates the function with the name "func" 

eval() pisliyi təhlükəsizlik, optimallaşdırma və problemləri aradan qaldırmağa gətirib çıxara bilər, çünki funksiyaları saxlamağı məsləhət görmürəm . Ümumiyyətlə, eval() JavaScript kodu heç vaxt istifadə edilməməlidir.

Şəxsi üzvlər

JSON.stringify() saxlamaq üçün JSON.stringify() istifadə edərək problem bu funksiyanın xüsusi üzvləri serialize edə bilməməsidir. Bu problem, .toString() metodunun (web saxlama məlumatlarını saxlayarkən örtük şəkildə istifadə olunur .toString() üzərində .toString() həll edilə bilər:

 //Object with private and public members: function MyClass(privateContent, publicContent){ var privateMember = privateContent || "defaultPrivateValue"; this.publicMember = publicContent || "defaultPublicValue"; this.toString = function(){ return '{"private": "' + privateMember + '", "public": "' + this.publicMember + '"}'; }; } MyClass.fromString = function(serialisedString){ var properties = JSON.parse(serialisedString || "{}"); return new MyClass( properties.private, properties.public ); }; //Storing: var obj = new MyClass("invisible", "visible"); localStorage.object = obj; //Loading: obj = MyClass.fromString(localStorage.object); 

Dairəvi əlaqələr

Digər bir problem problemi dairəvi əlaqələrlə məşğul ola bilməz:

 var obj = {}; obj["circular"] = obj; localStorage.object = JSON.stringify(obj); //Fails 

Bu misalda, JSON.stringify() bir TypeError Convert Circular TypeError JSON adlandırır. JSON.stringify() istinadlar saxlamaq istəyirsinizsə, ikinci parametr JSON.stringify() istifadə edilə bilər:

 var obj = {id: 1, sub: {}}; obj.sub["circular"] = obj; localStorage.object = JSON.stringify( obj, function( key, value) { if( key == 'circular') { return "$ref"+value.id+"$"; } else { return value; } }); 

Bununla belə, dairəvi arayışların saxlanılması üçün effektiv bir həll tapılması çox vacib məsələlərdən asılıdır və bu məlumatların bərpası da qeyri-adi deyil.

SO problemini necə həll etdiyinə dair bir sual var: Stringify (JSON-a çevirmək) Dövrə referansı olan JavaScript obyekti

51
19 нояб. Cavab 19 noyabrda verilir. 2014-11-19 12:51 '14 da 12:51 2014-11-19 12:51

Yerli saxlama üçün JSON obyektlərini istifadə etmək:

// SET

 var m={name:'Hero',Title:'developer'}; localStorage.setItem('us', JSON.stringify(m)); 

// GET

 var gm =JSON.parse(localStorage.getItem('us')); console.log(gm.name); 

// bütün yerli yaddaşı və dəyərləri yineleyin

 for (var i = 0, len = localStorage.length; i < len; ++i) { console.log(localStorage.getItem(localStorage.key(i))); } 

// REMOVE

 localStorage.removeItem('us'); delete window.localStorage["us"]; 
29
20 нояб. Cavab 20 Noyabrda Şühaət Xan tərəfindən verilir. 2014-11-20 10:06 '14 at 10:06 2014-11-20 10:06

Teorik olaraq, obyektləri funksiyaları ilə saxlaya bilərsiniz:

 function store (a) { var c = {f: {}, d: {}}; for (var k in a) { if (a.hasOwnProperty(k)  typeof a[k] === 'function') { cf[k] = encodeURIComponent(a[k]); } } cd = a; var data = JSON.stringify(c); window.localStorage.setItem('CODE', data); } function restore () { var data = window.localStorage.getItem('CODE'); data = JSON.parse(data); var b = data.d; for (var k in data.f) { if (data.f.hasOwnProperty(k)) { b[k] = eval("(" + decodeURIComponent(data.f[k]) + ")"); } } return b; } 

Lakin, funksiyaların seriyalaşdırılması / serializasiyası etibarsızdır, çünki bu tətbiqə bağlıdır .

27
06 апр. cavab aster_x 06 apr verilir . 2011-04-06 00:20 '11 at 0:20 2011-04-06 00:20

Eyni zamanda hər hansı digər məlumat növü kimi, obyektlərin / getItem(key) idarə etmək üçün setItem(key,value)getItem(key) standart saxlama metodlarını ləğv edə bilərsiniz. Beləliklə, adətən normal olaraq localStorage.setItem(key,value)localStorage.getItem(key) deyə bilərsiniz.

Mən bunu geniş şəkildə yoxlamadım, amma işlə məşğul olduğum kiçik layihəyə görə problemsiz işləyirdi.

 Storage.prototype._setItem = Storage.prototype.setItem; Storage.prototype.setItem = function(key, value) { this._setItem(key, JSON.stringify(value)); } Storage.prototype._getItem = Storage.prototype.getItem; Storage.prototype.getItem = function(key) { try { return JSON.parse(this._getItem(key)); } catch(e) { return this._getItem(key); } } 
22
26 апр. Cavab verilir 26 aprel 2011-04-26 16:00 '11 saat 16:00 'da, 2011-04-26 16:00' da

Bu mesajın bir kopyası kimi bağlanılan başqa bir mesajı tıkladıktan sonra bu mesaja gəldim - "Localstorage'da bir sıra saxlamaq üçün necə?" Bu, yaxşı bir şey deyil, yalnız bir mövzu, localStorage-da diziyi necə dəstəkləyə biləcəyinizə tam cavab vermir, amma hər iki mövzu içərisində olan məlumatlara əsaslanan bir həll yaratmağı bacardı.

Beləliklə, əgər kimsə bir sıra içərisində elementləri klikləməyi / pop / hərəkət edə bilmək istəsə və bu dizinin localStorage və ya sessionStorage da saxlanmasını istəyirsə, buradasınız:

 Storage.prototype.getArray = function(arrayName) { var thisArray = []; var fetchArrayObject = this.getItem(arrayName); if (typeof fetchArrayObject !== 'undefined') { if (fetchArrayObject !== null) { thisArray = JSON.parse(fetchArrayObject); } } return thisArray; } Storage.prototype.pushArrayItem = function(arrayName,arrayItem) { var existingArray = this.getArray(arrayName); existingArray.push(arrayItem); this.setItem(arrayName,JSON.stringify(existingArray)); } Storage.prototype.popArrayItem = function(arrayName) { var arrayItem = {}; var existingArray = this.getArray(arrayName); if (existingArray.length > 0) { arrayItem = existingArray.pop(); this.setItem(arrayName,JSON.stringify(existingArray)); } return arrayItem; } Storage.prototype.shiftArrayItem = function(arrayName) { var arrayItem = {}; var existingArray = this.getArray(arrayName); if (existingArray.length > 0) { arrayItem = existingArray.shift(); this.setItem(arrayName,JSON.stringify(existingArray)); } return arrayItem; } Storage.prototype.unshiftArrayItem = function(arrayName,arrayItem) { var existingArray = this.getArray(arrayName); existingArray.unshift(arrayItem); this.setItem(arrayName,JSON.stringify(existingArray)); } Storage.prototype.deleteArray = function(arrayName) { this.removeItem(arrayName); } 

Istifadə nümunəsi localStorage dizisində sadə simləri saxlamaqdır:

 localStorage.pushArrayItem('myArray','item one'); localStorage.pushArrayItem('myArray','item two'); 

Istifadə nümunəsi sessionStorage arrayında obyektlərin saxlanmasıdır:

 var item1 = {}; item1.name = 'fred'; item1.age = 48; sessionStorage.pushArrayItem('myArray',item1); var item2 = {}; item2.name = 'dave'; item2.age = 22; sessionStorage.pushArrayItem('myArray',item2); 

ümumi array idarə üsulları:

 .pushArrayItem(arrayName,arrayItem); -> adds an element onto end of named array .unshiftArrayItem(arrayName,arrayItem); -> adds an element onto front of named array .popArrayItem(arrayName); -> removes  returns last array element .shiftArrayItem(arrayName); -> removes  returns first array element .getArray(arrayName); -> returns entire array .deleteArray(arrayName); -> removes entire array from storage 
21
07 мая '14 в 14:35 2014-05-07 14:35 Cavab Andy Lorenz tərəfindən verilir May 07 '14 14:35 2014-05-07 14:35

Burada müzakirə edilən xüsusiyyətlərdən bir çoxu üçün abstraksiya kitabxanasından istifadə edərək, uyğunluğun artırılmasını təklif edin. Bir çox variant:

13
12 марта '15 в 10:59 2015-03-12 10:59 Cavab iki dəfə ikiqat şənbə günü 12 mart '15 'də saat 10:59' da verilir

Yuxarıda göstərilən cavabların bir hissəsini bir az dəyişdirdim. Lazım olmadıqda 2 yerinə bir funksiyaya sahib olmağın tərəfdarıyam.

 Storage.prototype.object = function(key, val) { if ( typeof val === "undefined" ) { var value = this.getItem(key); return value ? JSON.parse(value) : null; } else { this.setItem(key, JSON.stringify(val)); } } localStorage.object("test", {a : 1}); //set value localStorage.object("test"); //get value 

Bundan əlavə, heç bir dəyər göstərilmirsə, false yerinə null qaytarır. false bir məna verir, null deyil.

8
23 июня '16 в 14:28 2016-06-23 14:28 cavab 23 iyun, saat 14: 20-da 2016-06-23 14:28 tarixində verilir

Siz javascript məlumat növlərini şəffaf şəkildə saxlamaq üçün localDataStorage istifadə edə bilərsiniz (Array, Boolean, Date, Float, Integer, String və Object). Bundan əlavə, data asanlıqla obfuscation təmin edir, avtomatik olaraq strings compresses, əsas (adı) tərəfindən bir sorğu, həmçinin (əsas) dəyəri ilə bir sorğu asanlaşdırır və bir əsas prefiks istifadə edərək, eyni domain bölmə paylanmış paylaşdırma təmin etməyə kömək edir.

[DISCLAIMER] Mən kommunalın müəllifiyim [/ DISCLAIMER]

Nümunələr:

 localDataStorage.set( 'key1', 'Belgian' ) localDataStorage.set( 'key2', 1200.0047 ) localDataStorage.set( 'key3', true ) localDataStorage.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } ) localDataStorage.set( 'key5', null ) localDataStorage.get( 'key1' ) --> 'Belgian' localDataStorage.get( 'key2' ) --> 1200.0047 localDataStorage.get( 'key3' ) --> true localDataStorage.get( 'key4' ) --> Object {RSK: Array(5)} localDataStorage.get( 'key5' ) --> null 

Gördüyünüz kimi, ibtidai dəyərlər hörmətlidir.

5
17 мая '17 в 3:58 2017-05-17 03:58 cavab 17 May 17: 00-da Mac- da 3:58 2017-05-17 03:58 -də verilir

Nişanları strings kimi saxlamaq üçün ejson istifadə edə bilərsiniz.

EJSON, daha çox növləri dəstəkləmək üçün bir JSON uzantısıdır. Həm də JSON təhlükəsizliyinin bütün növlərini dəstəkləyir:

EJSON'un bütün serializasiyası da JSON'dır. Məsələn, tarixi və ikili tampona malik bir obyekt EJSON-a aşağıdakı kimi serileştirilir:

 { "d": {"$date": 1358205756553}, "b": {"$binary": "c3VyZS4="} } 

Ejson istifadə edərək mənim localStorage əhatə edir

https://github.com/UziTech/storage.js

Normal ifadələr və funksiyalar da daxil olmaqla, banderoluma bəzi növlər əlavə etdim.

4
28 июля '16 в 18:41 2016-07-28 18:41 Cavab Tony Brix tərəfindən iyul ayının 28, '16 'da saat 18:41' də 2016-07-28 18:41 'də verilir

Başqa bir variant mövcud bir plugin istifadə etməkdir.

Məsələn, persisto , yerli saxlama / sessionStorage üçün asan bir interfeys təmin edən və form alanları (giriş, açar və onay qutuları) üçün qənaət həcmini açıqlayan açıq mənbə layihədir.

2019

Təkmilləşdirilmiş @Guria cavab:

 Storage.prototype.setObject = function (key, value) { this.setItem(key, JSON.stringify(value)); }; Storage.prototype.getObject = function (key) { var value = this.getItem(key); try { return JSON.parse(value); } catch(err) { console.log("JSON parse failed for lookup of ", key, "\n error was: ", err); return null; } }; 
4
22 сент. cavab seanp2k Sep 22 verilir 2014-09-22 23:34 '14 at 23:34 2014-09-22 23:34

http://rhaboo.org , yerli kitabxanada şəkər səviyyəsidir ki, belə şeyləri yazmağa imkan verir:

 var store = Rhaboo.persistent('Some name'); store.write('count', store.count ? store.count+1 : 1); store.write('somethingfancy', { one: ['man', 'went'], 2: 'mow', went: [ 2, { mow: ['a', 'meadow' ] }, {} ] }); store.somethingfancy.went[1].mow.write(1, 'lawn'); 

JSON.stringify / parse istifadə etmir, çünki bu, böyük obyektlərdə qeyri-dəqiq və yavaş olardı. Bunun əvəzinə, hər terminal dəyəri öz yerliStorage girişinə malikdir.

Yəqin ki, rhaboo ilə əlaqəsi ola biləcəyini təxmin edə bilərsiniz; -)

Adrian.

3
01 окт. Adrian tərəfindən verilmiş cavab 01 may 2014-10-01 14:14 '14 'da 14:14' də 2014-10-01 14:14

Mən onu istifadə etmək üçün yalnız 20 xətt kodlu başqa bir minimalist qabıq düzəldirdim.

 localStorage.set('myKey',{a:[1,2,5], b: 'ok'}); localStorage.has('myKey'); // --> true localStorage.get('myKey'); // --> {a:[1,2,5], b: 'ok'} localStorage.keys(); // --> ['myKey'] localStorage.remove('myKey'); 

https://github.com/zevero/simpleWebstorage

3
28 сент. cavabı zevero 28 sep verilir . 2016-09-28 13:30 '16 saat 13:30 'da 2016-09-28 13:30

Yazılı xüsusiyyətləri təyin etmək və almaq istəyən PostScript istifadəçiləri üçün:

  export class TypedStorage<T> { public removeItem(key: keyof T): void { localStorage.removeItem(key); } public getItem<K extends keyof T>(key: K): T[K] | null { const data: string | null = localStorage.getItem(key); return JSON.parse(data); } public setItem<K extends keyof T>(key: K, value: T[K]): void { const data: string = JSON.stringify(value); localStorage.setItem(key, data); } } 

{public removItem (əsas: T 'düyməsinə): void {localStorage.removeItem (key); } public getItem (əsas: K): T [K] | null {const data: string | null = localStorage.getItem (əsas); JSON.parse qayıtmaq (data); } public setItem (əsas: K, dəyər: T [K]): void {const data: string = JSON.stringify (dəyər); localStorage.setItem (əsas, məlumatlar); }} MyStore {yaş: nömrəsi, adı: string, ünvan: {city: string}} const storage: TypedStorage = new TypedStorage (); storage.setItem ("yanlış anahtara", ""); // səhv başlanğıc storage.setItem ("yaş", "salam"); ​​// səhv, yaddaş storage.setItem ("ünvan", {city: "Burada"}); // ok const ünvanı: {city: string} = storage.getItem ("ünvan"); rel = "nofollow noreferrer"> Məsələn istifadə edin :

 // write an interface for the storage interface MyStore { age: number, name: string, address: {city:string} } const storage: TypedStorage<MyStore> = new TypedStorage<MyStore>(); storage.setItem("wrong key", ""); // error unknown key storage.setItem("age", "hello"); // error, age should be number storage.setItem("address", {city:"Here"}); // ok const address: {city:string} = storage.getItem("address"); 
2
30 мая '18 в 10:34 2018-05-30 10:34 Cavab Flavien Volken tərəfindən 30 may 1818 tarixində 10:34 2018-05-30 10:34 tarixində verilir

@Danott tərəfindən göndərilən kodu xüsusi bir versiyası

O, həmçinin, localstorage-dan çıxma dəyərini həyata keçirir və bunun əvəzinə bir getter və setter qatını əlavə etmək üçün necə göstərir

localstorage.setItem(preview, true)

yaza bilərsiniz

config.preview = true

Bura getdi:

 var PT=Storage.prototype if (typeof PT._setItem >='u') PT._setItem = PT.setItem; PT.setItem = function(key, value) { if (typeof value >='u')//..ndefined this.removeItem(key) else this._setItem(key, JSON.stringify(value)); } if (typeof PT._getItem >='u') PT._getItem = PT.getItem; PT.getItem = function(key) { var ItemData = this._getItem(key) try { return JSON.parse(ItemData); } catch(e) { return ItemData; } } // Aliases for localStorage.set/getItem get = localStorage.getItem.bind(localStorage) set = localStorage.setItem.bind(localStorage) // Create ConfigWrapperObject var config = {} // Helper to create getter  setter function configCreate(PropToAdd){ Object.defineProperty( config, PropToAdd, { get: function () { return ( get(PropToAdd) ) }, set: function (val) { set(PropToAdd, val ) } }) } //------------------------------ // Usage Part // Create properties configCreate('preview') configCreate('notification') //... // Config Data transfer //set config.preview = true //get config.preview // delete config.preview = undefined 

Bəli, bəzi aliasları .bind(...) ilə .bind(...) bilərsiniz. Ancaq bununla kifayətlənməmişəm, çünki bunu bilmək həqiqətən yaxşıdır. Niyə boş vaxt get = localStorage.getItem; işləmirəm

1
10 февр. Cavab 10 fevralda Nadu tərəfindən verilir. 2015-02-10 23:25 '15 at 23:25 2015-02-10 23:25

Yerli iclasda, çerezlərdə bu problemdən qaçmaq üçün hesab edirəm ki, opendb kitabxanasından istifadə edə bilərsiniz.

Ex-, bu parçanı istifadə edərək həll edə bilərsiniz

 // for set object in db db.local.setJSON("key", {name: "xyz"}); // for get object form db db.local.getJSON("key"); 

https://github.com/pankajbisht/openDB

Veb saxlama haqqında daha ətraflı məlumat üçün veb saxlama haqqında məqaləni oxuya bilərsiniz.

1
16 июня '15 в 12:39 2015-06-16 12:39 Cavab Pankaj Bisht tərəfindən 16 İyun '15 'də saat 12:39' də verilir. 2015-06-16 12:39

Bir obyektin saxlanılması üçün, bir obyektdən bir obyektə bir obyekt almaq üçün istifadə edə biləcəyiniz məktublar göndərə bilərsiniz (bu mənfi ola bilməz). Məsələn,

 var obj = {a: "lol", b: "A", c: "hello world"}; function saveObj (key){ var j = ""; for(var i in obj){ j += (i+"|"+obj[i]+"~"); } localStorage.setItem(key, j); } // Saving Method function getObj (key){ var j = {}; var k = localStorage.getItem(key).split("~"); for(var l in k){ var m = k[l].split("|"); j[m[0]] = m[1]; } return j; } saveObj("obj"); // undefined getObj("obj"); // {a: "lol", b: "A", c: "hello world"} 

Bu metod, obyekti ayırmaq üçün istifadə etdiyiniz məktubdan və çox təcrübəli olaraq istifadə edərsə bəzi qəzalara səbəb olacaq.

1
21 мая '16 в 19:48 2016-05-21 19:48 Cavab Seizefire 21 may, 19 saat 19:48 2016-05-21 19:48 verilir

Baxın

Gəlin film olaraq adlandırılan aşağıdakı array var:

 var movies = ["Reservoir Dogs", "Pulp Fiction", "Jackie Brown", "Kill Bill", "Death Proof", "Inglourious Basterds"]; 

Stringify funksiyasından istifadə edərək, film dizisi aşağıdakı sözdizimini istifadə edərək, bir simliya çevrilə bilər:

 localStorage.setItem("quentinTarantino", JSON.stringify(movies)); 

Xahiş edirəm ki, məlumatlarım əsas quentinTarantino altında saxlanılır.

Məlumatların alınması

 var retrievedData = localStorage.getItem("quentinTarantino"); 

Bir simli bir obyektə geri çevirmək üçün JSON ayrıştırma funksiyasından istifadə edin:

 var movies2 = JSON.parse(retrievedData); 

Filmlərinizdə bütün array üsullarını zəng edə bilərsiniz2

1
04 дек. Cavab verilib shas 04 dek. 2015-12-04 09:17 '15 'də saat 9:17 ' da

Mən mövcud saxlama obyektlərini pozmayan bir şey etdim, amma istədiyinizi edə biləcəyiniz üçün bir banderol yaradır. Nəticədə hər hansı bir obyekt kimi, metod olmadan, müntəzəm obyektdir.

Mən nə etdik.

Əgər əmlakınız 1 sehrli olsaydı:

 var prop = ObjectStorage(localStorage, 'prop'); 

Bir neçə ehtiyacınız varsa:

 var storage = ObjectStorage(localStorage, ['prop', 'more', 'props']); 

storage ilə ya da storage obyektində olan hər şey avtomatik olaraq localStorage saxlanılacaq. Həmişə bir real obyektlə oynayırsınız, buna görə də belə şeylər edə bilərsiniz:

 storage.data.list.push('more data'); storage.another.list.splice(1, 2, {another: 'object'}); 

İzlənilən obyektin içərisində hər bir yeni obyekt avtomatik olaraq izləniləcəkdir.

Çox böyük bir çatışmazlıq: Object.observe() asılıdır, buna görə çox məhdud brauzer dəstəyi var. Və onlar Firefox və ya Edge-də tezliklə görünəcəklər kimi görünmür.

1
28 нояб. Cavab 28 noyabr tarixində Rudie tərəfindən verilmişdir. 2015-11-28 23:39 '15 at 11:39 2015-11-28 23:39

LocalStorage'da setter və getter funksiyalarını yaxşılaşdırırsınız, buna görə də daha yaxşı nəzarətə sahibsiniz və JSON təhlilini təkrarlamaq lazım deyildir. ("") boş string key / data faylını düzgün şəkildə işləyəcəkdir.

 function setItemInStorage(dataKey, data){ localStorage.setItem(dataKey, JSON.stringify(data)); } function getItemFromStorage(dataKey){ var data = localStorage.getItem(dataKey); return data? JSON.parse(data): null ; } setItemInStorage('user', { name:'tony stark' }); getItemFromStorage('user');  
1
26 июня '18 в 14:52 2018-06-26 14:52 cavab 26 iyun 18: 00-da saat 14: 00-da başlayacaq

Qəbul edilmiş mesajların kontaktlardan izləmək üçün localStorage istifadə edən kitabxananın kiçik bir nümunəsi:

 // This class is supposed to be used to keep a track of received message per contacts. // You have only four methods: // 1 - Tells you if you can use this library or not... function isLocalStorageSupported(){ if(typeof(Storage) !== "undefined"  window['localStorage'] != null ) { return true; } else { return false; } } // 2 - Give the list of contacts, a contact is created when you store the first message function getContacts(){ var result = new Array(); for ( var i = 0, len = localStorage.length; i < len; ++i ) { result.push(localStorage.key(i)); } return result; } // 3 - store a message for a contact function storeMessage(contact, message){ var allMessages; var currentMessages = localStorage.getItem(contact); if(currentMessages == null){ var newList = new Array(); newList.push(message); currentMessages = JSON.stringify(newList); } else { var currentList =JSON.parse(currentMessages); currentList.push(message); currentMessages = JSON.stringify(currentList); } localStorage.setItem(contact, currentMessages); } // 4 - read the messages of a contact function readMessages(contact){ var result = new Array(); var currentMessages = localStorage.getItem(contact); if(currentMessages != null){ result =JSON.parse(currentMessages); } return result; } 
1
05 июня '14 в 18:12 2014-06-05 18:12 Cavab 05 iyun 2014-cü il saat 18: 00-da Tomas tərəfindən verilmişdir 2014-06-05 18:12

Прокрутка по локальной сети

 var retrievedData = localStorage.getItem("MyCart"); retrievedData.forEach(function (item) { console.log(item.itemid); }); 
-6
ответ дан Vinod John 02 июня '16 в 17:00 2016-06-02 17:00

Другие вопросы по меткам или Задайте вопрос