访问可观察数组的 Symbol(_latestValue) 元素

发布于 2025-01-09 21:18:09 字数 316 浏览 2 评论 0原文

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

我通过此代码找到了值,但从此响应中打印出未定义的内容,请参阅此图片

在此处输入图像描述

我需要通过数组元素或对象从 Symbol(_latestValue) 中获取 false

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

I have find value by this code but print undefined from this response, please see this image

enter image description here

I Need false from Symbol(_latestValue) by array elements or object

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

桃气十足 2025-01-16 21:18:09

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

printerViewModel.printerChecked()

调试器指示此属性键是 符号。这意味着您无法使用字符串“Symbol(...)”来访问它。

符号通常用于向您隐藏一些东西,因此它应该是不可能检索到的。

我能想到的唯一例外是该属性是否使用 Symbol.for 设置。正如您从这个 util 淘汰赛使用中看到的,情况并非如此:

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]
)

The public way of getting an observable's value is to run the function. So in this case, you should be able to retrieve the false value by calling:

printerViewModel.printerChecked()

The debugger indicates that this property key is a Symbol. That means you can't access it by using the string "Symbol(...)".

Symbols are usually used to hide stuff from you, so it is supposed to be impossible to retrieve.

The only exception I can think of is if the property was set using Symbol.for. As you can see from this util knockout uses, this isn't the case:

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

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


Some basic snippets to help you understand symbols:

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")]
);

If you have access to the place that sets this property, you can expose a reference to the symbol:

const secretKey = Symbol("secretKey");

const myObj = {
  [secretKey]: false
};

console.log(
  myObj[secretKey]
)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文