Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 HTML5本地存储密钥可以是任何字符串吗?_Javascript_Html_Cross Browser_Local Storage - Fatal编程技术网

Javascript HTML5本地存储密钥可以是任何字符串吗?

Javascript HTML5本地存储密钥可以是任何字符串吗?,javascript,html,cross-browser,local-storage,Javascript,Html,Cross Browser,Local Storage,我正在开发一个使用HTML5本地存储的应用程序。除了必须是字符串这一事实之外,我找不到任何地方对键是否有任何限制 具体地说,我想知道我是否可以在所有支持本地存储的浏览器中使用URL作为本地存储的键(例如,:/?#.-=+@!$%^&*()[]{}|等符号是否允许在键中使用?) 还有:空格呢?在跨浏览器的localStorage密钥中允许这样做吗 我发现,但它似乎只测试了本地存储值中可接受的字符串(而不是键)。我能够调整链接StackOverflow主题中的测试,以测试键: function ru

我正在开发一个使用HTML5本地存储的应用程序。除了必须是字符串这一事实之外,我找不到任何地方对键是否有任何限制

具体地说,我想知道我是否可以在所有支持本地存储的浏览器中使用URL作为本地存储的键(例如,
:/?#.-=+@!$%^&*()[]{}|
等符号是否允许在键中使用?)

还有:空格呢?在跨浏览器的localStorage密钥中允许这样做吗


我发现,但它似乎只测试了本地存储值中可接受的字符串(而不是键)。

我能够调整链接StackOverflow主题中的测试,以测试键:

function run_test(lowerlimit, UPPERLIMIT) {
    try {
        if (!window.localStorage) {
            // I recall that in one of the older Chrome version (4),
            // localStorage === null
            return 'Localstorage is not supported';
        }
        if (isNaN(lowerlimit) || isNaN(UPPERLIMIT) || lowerlimit > UPPERLIMIT) {
            return 'One of the limits is not a valid number!';
        }
        var i = lowerlimit - 1;
        var character_range = [];
        while (++i < UPPERLIMIT) character_range.push(i);
        input = String.fromCharCode.apply(String, character_range);
        localStorage.setItem(input, input);
        output = localStorage.getItem(input);
        if (input === output) {
            return true;
        }
        // Uh oh, not equal!
        var result = [];
        for (i=0; i<UPPERLIMIT-lowerlimit; i++) {
            if (input[i] !== output[i]) {
                result.push(i + lowerlimit);
            }
        }
        return result;
    }catch(e){return 'Error:' + e;}
}
run_test(0x20, 0xD7FF);
函数运行测试(下限、上限){
试一试{
如果(!window.localStorage){
//我记得在一个较旧的Chrome版本(4)中,
//localStorage==null
返回“不支持本地存储”;
}
如果(isNaN(下限)| | isNaN(上限)| | lowerlimit>上限){
返回“其中一个限制不是有效数字!”;
}
var i=下限-1;
变量字符_范围=[];
而(++i<上限)字符_范围.push(i);
输入=String.fromCharCode.apply(字符串,字符范围);
setItem(输入,输入);
输出=localStorage.getItem(输入);
如果(输入==输出){
返回true;
}
//哦,不平等!
var结果=[];

对于(i=0;i浏览器支持和键有效性的简单测试可以是:

var testKey = "test";
var value = "some value";

if(typeof(Storage)!=="undefined") {
  console.log("localStorage and sessionStorage support!");
  console.log("About to save. Local storage is:");
  console.log(localStorage);
  localStorage[testKey] = value;
  console.log("Key saved: "+ testKey);
  console.log(localStorage);
  localStorage.removeItem(testKey);  //<--- key deleted here
  console.log("key deleted: " + testKey);
  console.log(localStorage);
  console.log("DONE ===");
} else {
  console.log("Sorry! No web storage support..");
}
var testKey=“test”;
var value=“某些值”;
if(类型(存储)!=“未定义”){
log(“本地存储和会话存储支持!”);
log(“即将保存。本地存储为:”);
log(本地存储);
localStorage[testKey]=值;
log(“保存的密钥:+testKey”);
log(本地存储);

localStorage.removietem(testKey);//是的,您可以对该字符串进行编码


但是Html存储有大小限制。

该规范要求设置键和值,并将其作为
DOMString
类型值返回。DOMString在[DOM Level 3 Core][1]中描述为:

A DOMString is a sequence of 16-bit units.

IDL Definition

    valuetype DOMString sequence<unsigned short>;
DOMString是由16位单元组成的序列。
IDL定义
valuetype-DOMString序列;
选择UTF-16编码是因为其广泛的行业 请注意,对于HTML和XML,文档字符集 (因此数字字符引用的表示法)是基于 在UCS[ISO/IEC 10646]上。在 因此,在某些情况下,源文档可能对应于两个16位 DOMString中的单位(高代理项和低代理项)。用于 有关字符串比较的问题,请参阅中的字符串比较 大教堂

对于Java和ECMAScript,DOMString绑定到字符串类型,因为 两种语言都使用UTF-16作为编码


因此,正式来说,任何合法的UTF-16字符串作为键或值都是合法的。并非每个UTF-16码点都是合法字符,尽管如此,您应该尽量避免使用某些符号,如“代理项对”、“字节顺序标记”和“保留字符”。

您不能测试它是否有效吗?至于它是否“合法”,我不确定是否存在。不幸的是,测试使我的浏览器崩溃。正在修改它以使其不会崩溃。谢谢@SpliFF——这正是我要找的。