JS调用Chrome扩展Storage API存疑,求相关JS概念指引
问题解答
核心原因:JavaScript对象字面量的键名规则
你碰到的问题本质是JS对象字面量的两种键名写法差异:
普通字面量键名
你最初写的{key: value}里,key并不是引用前面定义的const key变量,而是直接作为字符串字面量的键名(和写{'key': value}完全等价)。所以IDE提示const key未被使用——确实没用到,你实际存储的键名是字符串'key',而不是变量里的'myKey'。
当你换成blabla时,IDE误以为这是一个未声明的变量,但实际上它只是字符串键名'blabla',自然找不到对应的声明位置。计算属性名(解决方法)
如果要把变量的值作为对象的键名,需要用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
相关产品推荐
相关产品推荐

