You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS调用Chrome扩展Storage API存疑,求相关JS概念指引

问题解答

核心原因:JavaScript对象字面量的键名规则

你碰到的问题本质是JS对象字面量的两种键名写法差异:

  1. 普通字面量键名
    你最初写的{key: value}里,key并不是引用前面定义的const key变量,而是直接作为字符串字面量的键名(和写{'key': value}完全等价)。所以IDE提示const key未被使用——确实没用到,你实际存储的键名是字符串'key',而不是变量里的'myKey'。
    当你换成blabla时,IDE误以为这是一个未声明的变量,但实际上它只是字符串键名'blabla',自然找不到对应的声明位置。

  2. 计算属性名(解决方法)
    如果要把变量的值作为对象的键名,需要用ES6引入的计算属性名语法,把变量放在方括号[]里:

const key = 'myKey';
const value = { name: 'my value' };

chrome.storage.local.set({[key]: value}, () => {
  console.log('Stored name: ' + value.name);
});

这样方括号里的key会被解析为变量,用它的值'myKey'作为存储的键名,你的const key就会被正常使用了。

你更新后代码的工作原理

你后来写的{testKey: value}属于普通字面量键名,这里的testKey直接对应字符串'testKey',所以存储的键就是'testKey'。读取时用chrome.storage.sync.get(['testKey'])指定这个键名,自然能拿到对应的值,所以控制台输出符合预期。

一句话总结

  • {xxx: value}:键名是固定字符串'xxx'
  • {[变量]: value}:键名是变量的实际值

内容的提问来源于stack exchange,提问作者Vahancho22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:51:37