Indexeddb 序列成员的字符串化

Indexeddb 序列成员的字符串化,indexeddb,Indexeddb,根据 键路径是定义如何执行的DOMString或序列 从值中提取一个键。有效的密钥路径是以下路径之一: 空字符串 标识符,它是与 从ECMAScript语言规范生成IdentifierName [ECMA-262] 由两个或多个标识符组成的DOMString 由句点分隔(ASCII字符代码46,U+002E句号) A 仅包含符合以下条件的字符串的非空序列 满足上述要求 根据步骤, 如果keyPath是一个序列,请运行以下子步骤: 让结果为新数组ECMAScript对象 对于keyPath序列

根据

键路径是定义如何执行的DOMString或序列 从值中提取一个键。有效的密钥路径是以下路径之一:

  • 空字符串
  • 标识符,它是与 从ECMAScript语言规范生成IdentifierName [ECMA-262]
  • 由两个或多个标识符组成的DOMString 由句点分隔(ASCII字符代码46,U+002E句号)
  • A 仅包含符合以下条件的字符串的非空序列 满足上述要求
根据步骤,

  • 如果keyPath是一个序列,请运行以下子步骤:
  • 让结果为新数组ECMAScript对象
  • 对于keyPath序列中的每个项目,运行以下子步骤:
  • 让key作为递归运行步骤的结果,以使用键路径(使用item作为键路径)从值中提取键,并 作为价值的价值
  • ReturnIfAbrupt(键)
  • 如果键为failure,则中止整个算法并返回failure
  • 将第一个子步骤的结果附加到结果的末尾
  • 返回结果
  • 这只会“递归”一级,因为键路径序列永远不能嵌套

    根据以上(以及递归),在我看来,不允许包含非字符串的非空序列(即使使用
    toString()
    方法)。然而,至少可以转换可字符串化对象(不确定布尔或数字原语),并且它们是可转换的


    我是否在规范中遗漏了一些东西,这些东西表明在验证/输入/使用之前应该首先进行字符串化,如果是,在什么条件下?

    这发生在绑定ECMAScript和API的Web IDL层。例如,使用
    createObjectStore()
    API,输入字典定义为:

    dictionary IDBObjectStoreParameters {
      (DOMString or sequence<DOMString>)? keyPath = null;
      boolean                             autoIncrement = false;
    };
    
    字典IDBObjectStoreParameters{
    (DOMString或sequence)?keyPath=null;
    布尔自增=假;
    };
    
    在执行的逻辑时,IDL层通过中定义的转换保证
    keyPath
    的值为DOMString、序列或null。如果传递了无法转换的内容,WebIDL定义该方法将在到达API逻辑之前抛出