Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在chrome.storage.local.set中使用变量键_Javascript_Google Chrome Extension_Google Chrome Storage - Fatal编程技术网

Javascript 在chrome.storage.local.set中使用变量键

Javascript 在chrome.storage.local.set中使用变量键,javascript,google-chrome-extension,google-chrome-storage,Javascript,Google Chrome Extension,Google Chrome Storage,我正在创建一个chrome扩展。 我不知道如何使用变量作为chrome.storage.local.set()函数的键。我试过了 var key = 'myKey'; chrome.storage.local.get(key, function(val) { chrome.storage.local.set({key:val[key]+param1}); //appending param1 alert(val[key]); } 在这里,我试图获取val[key]的值,并附

我正在创建一个chrome扩展。 我不知道如何使用变量作为
chrome.storage.local.set()函数的键。我试过了

var key = 'myKey';
chrome.storage.local.get(key, function(val) { 
    chrome.storage.local.set({key:val[key]+param1}); //appending  param1
    alert(val[key]);
}
在这里,我试图获取
val[key]
的值,并附加一个字符串
param1
,然后使用相同的键将其放回存储器。但我不能这样做。 警报框始终显示未定义


但是当我尝试不使用变量
键时,效果很好

chrome.storage.local.get('myKey', function(val) { 
    chrome.storage.local.set({myKey:val['myKey']+param1}); //appending  param1
    alert(val['myKey']);
}

问题是我使用的
chrome.storage.local.set
不仅可以有字符串参数,还可以有对象参数。

在JavaScript中,使用非静态变量名的唯一方法是将值指定为属性,而不是使用对象字面值

var key = 'myKey';
var param1 = 'whatever';
chrome.storage.local.get(key, function(val) {
    // Create property if does not exist (yet)
    if (typeof val[key] != 'string') val[key] = '';
    // Append value of param1
    val[key] += param1;
    // Save data
    chrome.storage.local.set(val);
    alert(val[key]);
});
注意:您可能希望验证是否成功。这可以通过使用回调来完成。例如:

    chrome.storage.local.set(val, function() {
        if (chrome.extension.lastError) {
            alert('An error occurred: ' + chrome.extension.lastError.message);
        }
    });
我已经解决了这个问题。 而不是使用
chrome.storage.local.set({key:val[key]+param1})

我用一个对象替换了json字符串
{key:val[key]+param1}

var obj = {};       
var key = "myKey";  
obj[key] += param1;   
chrome.storage.local.set(obj);

这里的
obj
具有值
{“myKey”:“附加值”}

看起来也不错,但它看起来不太像val是否已经存在,并且多次重复相同的值。如果您不想更新,可能希望将其更新为ES6计算属性名。或者,如果您不想更新,请将其复制到。