未捕获的TypeError:无法将Symbol值转换为字符串

时间:2016-01-25 16:00:36

标签: javascript json knockout.js

我从服务器收到以下JSON:

enter image description here

然后我尝试在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) }));

并且最后一行抛出以下异常:

  

未捕获的TypeError:无法将Symbol值转换为字符串

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

从我所读过的内容来看,javascript最近(或至少计划过)添加了一个新的符号原语类型"。这个问题可能有关系吗?有什么解决方法?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:8)

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

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