访问 Observable 数组的 Symbol(_latestValue) 元素

Access Symbol(_latestValue) elements of an Observable Array

printerViewModel['printerChecked']["Symbol(_latestValue)"]

我通过这段代码找到了值,但是从这个响应中打印出未定义的,请看这张图片

我需要数组元素的 Symbol(_latestValue) 中的 false 或 object

public 获取可观察值的方法是 运行 函数。所以在这种情况下,您应该能够通过调用检索 false 值:

printerViewModel.printerChecked()

调试器指示此 属性 键是 Symbol。这意味着您无法使用字符串 "Symbol(...)".

访问它

符号通常用于向您隐藏内容,因此应该无法检索。

我能想到的唯一例外是 属性 是使用 Symbol.for 设置的。从这个util knockout uses可以看出,并不是这样的:

createSymbolOrString: function(identifier) {
  return canUseSymbols ? Symbol(identifier) : identifier;
}

来源:https://github.com/knockout/knockout/blob/2bec689a9a7fcaaed37e6abb9fdec648f86c4f81/src/utils.js#L513


帮助您理解符号的一些基本片段:

const symbolFor = {
  [Symbol.for("_latestValue")]: false
};

const symbol = {
  [Symbol("_latestValue")]: false
};

console.log(
  // This works because the key was created using `Symbol.for`
  symbolFor[Symbol.for("_latestValue")],
  // This does not work
  symbol[Symbol.for("_latestValue")]
);

如果你有权访问设置这个属性的地方,你可以公开对符号的引用:

const secretKey = Symbol("secretKey");

const myObj = {
  [secretKey]: false
};

console.log(
  myObj[secretKey]
)