📜  JavaScript 本地存储(1)

📅  最后修改于: 2023-12-03 15:31:44.474000             🧑  作者: Mango

JavaScript 本地存储

在现代Web应用程序中,JavaScript本地存储变得越来越普遍。当我们说“本地存储”时,我们是指浏览器内存储在客户端计算机上的数据。JavaScript提供了几种本地存储技术,包括Cookie,Web存储API和IndexedDB。

Cookie

Cookie是可以存储在客户端浏览器中的小文件,通常用于跟踪用户的状态。Cookie在Web开发中广泛使用,因为它们对Web服务器来说是一种有效的跟踪方法。但是,它们只允许存储少量数据(通常不到5KB),并且每次HTTP请求都会将它们发送回服务器。这在许多情况下是不可取的。

Web存储API

Web存储API提供了在客户端存储简单键值对的机制。它有两个主要的存储API:localStorage和sessionStorage。

localStorage

localStorage提供了一种在客户端长期存储数据的方式,并且即使关闭浏览器也不会丢失。可以使用setItem(key,value)方法将键值对存储在localStorage中,使用getItem(key)方法从localStorage中检索值,并使用removeItem(key)方法从localStorage中删除值。以下是一个简单的示例:

localStorage.setItem('myKey', 'myValue');
console.log(localStorage.getItem('myKey')); // Output: "myValue"
localStorage.removeItem('myKey');
sessionStorage

sessionStorage是一种客户端存储方式,类似于localStorage,但是它只在当前会话中有效。这意味着当用户关闭浏览器选项卡或窗口时,sessionStorage中的数据会被删除。以下是一个简单的示例:

sessionStorage.setItem('myKey', 'myValue');
console.log(sessionStorage.getItem('myKey')); // Output: "myValue"
sessionStorage.removeItem('myKey');
IndexedDB

IndexedDB是一种在客户端存储更为复杂的数据结构的方式。它提供了一个完整的数据库解决方案,允许开发者创建,读取,更新和删除对象存储。IndexedDB是异步的,这意味着必须使用回调函数来处理检索的数据。以下是一个简单的示例:

const request = indexedDB.open('myDatabase', 1);
let db;

request.onerror = function() {
  console.log('Database failed to open');
};

request.onsuccess = function() {
  console.log('Database opened successfully');
  db = request.result;
};

request.onupgradeneeded = function(e) {
  let db = e.target.result;
  let objectStore = db.createObjectStore('users', { keyPath: 'id' });
  objectStore.add({ id: 1, name: 'John Smith', age: 35, email: 'john@smith.com' });
};

function getUser(id) {
  const transaction = db.transaction(['users'], 'readonly');
  const objectStore = transaction.objectStore('users');
  const request = objectStore.get(id);
  request.onsuccess = function() {
    console.log(request.result);
  };
}

在此示例中,我们使用IndexedDB创建了一个名为“users”的对象存储,该存储包含用户数据。我们还编写了一个名为“getUser”的函数,该函数使用ID从对象存储检索用户数据。

结论

JavaScript提供了几种不同的本地存储技术。Cookie通常用于跟踪用户状态,而Web存储API提供了一种存储简单键值对的机制。IndexedDB是一种在客户端存储更为复杂的数据结构的方式。选择正确的存储技术将取决于您的特定要求。