【问题标题】:Uncaught TypeError: Cannot convert a Symbol value to a string未捕获的类型错误:无法将符号值转换为字符串
【发布时间】:2016-05-02 00:22:27
【问题描述】:

我从服务器收到以下 JSON:

然后我尝试在 AJAX 调用的success 中使用 $.map 对其进行映射,如下所示:

$.ajax({
        type: "GET",
        url: urlGetStaticData,
        success: function (data) {
            self.AvailableTags(data[0].Value);
            self.MeasurementUnits($.map(data[1].Value, function (item) { return ko.mapping.fromJS(item) }));

最后一行抛出如下异常:

未捕获的类型错误:无法将符号值转换为字符串

当它尝试使用 Symbol 名称映射属性时。

据我所知,javascript 最近(或至少计划)添加了一个“新的 Symbol 原始类型”。这个问题可能相关吗?有什么解决方法?非常感谢任何帮助。

【问题讨论】:

  • @MikeC 我认为这里真正的问题是,这里首先如何涉及 Symbol 实例?它不能来自 JSON.parse() 结果。
  • 如果data 是反序列化的JSON,它不会有任何Symbol-named 属性或Symbol 值,所以我看不出你怎么会遇到这种情况。你能创建一个MCVE吗?

标签: javascript json knockout.js


【解决方案1】:

这里的问题是 KO 试图使用一个名为 Symbol 的函数(因为 KO 可观察对象是函数),因为您的数据中的一个属性称为 Symbol。但是在 ES2015 引擎上,将有一个全局 Symbol 函数作为 JavaScript 环境的一部分。所以 KO 改为调用该函数,返回 Symbol 而不是它所期望的,然后(显然)执行一些操作,试图将该值强制转换为字符串。哪个失败了。 (我不确定为什么它最终会调用全局 Symbol 而不是隐藏它的东西,但 KO 使用了一些相当复杂的动态代码和 with 语句,所以...) p>

这将是最近 JavaScript 语言更改带来的 KO 映射器中的错误。作为短期修复,请在映射之前重命名属性。

【讨论】:

  • @MikeC:大时代。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多