【问题标题】:Uncaught SyntaxError: Unexpected number未捕获的 SyntaxError:意外的数字
【发布时间】:2014-09-29 14:52:34
【问题描述】:

解决方案:我意识到当前测试环境的区域设置设置为土耳其语,并且使用逗号作为十进制符号。在我的本地,它设置为英国,这就是代码在我的本地工作并且在测试中不起作用的原因。我想我会事先用点替换所有逗号。感谢所有的答复。

我正在尝试用以下数据填充条形图:

var oneToTen = [0,1,2,3,4,5,6,7,8,9,10];
var ticks = [[0, 'Atmosfer'],[1, 'Servis'],[2, 'Yemeklerimiz']];
var labels = ['Atmosfer','Servis','Yemeklerimiz'];
var mainQuest_d1 = 8,16666666666667;
var mainQuest_d2 = 7,95833333333333;
var mainQuest_d3 = 8,125;
var d_main_quest_bar = [[0, 8,16666666666667],[1, 7,95833333333333],[2, 8,125]];

我得到这个错误:

Uncaught SyntaxError: Unexpected number

我看不出上面的代码有什么问题。它在 localhost 中运行良好,但是当我将其发布到测试服务器时,它会出现此错误。

Razor 尚未渲染的完整代码:

int i = 0;
            int j = 0;
            int m = 0;
            @Html.Raw("var oneToTen = [0,1,2,3,4,5,6,7,8,9,10];");
            @Html.Raw("var ticks = [");

            if (Model.MainQuestionsRatingList != null)
            {
                foreach (var item in Model.MainQuestionsRatingList)
                {
                    j++;
                    @Html.Raw("["+(j-1)+", '"+item.QuestionText+"']")
                    if (j != Model.MainQuestionsRatingList.Count) { @Html.Raw(","); }
                }
            }
            @Html.Raw("];");

            @Html.Raw("var labels = [");

            if (Model.MainQuestionsRatingList != null)
            {
                foreach (var item in Model.MainQuestionsRatingList)
                {
                    m++;
                    @Html.Raw("'"+item.QuestionText+"'")
                    if (m != Model.MainQuestionsRatingList.Count) { @Html.Raw(","); }
                }
            }

            @Html.Raw("];");

            if (Model.MainQuestionsRatingList != null)
            {
                foreach (var item in Model.MainQuestionsRatingList)
                {
                   i++;
                  @Html.Raw("var mainQuest_d" + i + " = " + item.Avg + ";");

                }
            }


            i = 0;
              @Html.Raw("var d_main_quest_bar = [");
            if (Model.MainQuestionsRatingList != null)
            {
                foreach (var item in Model.MainQuestionsRatingList)
                {
                    i++;
                    @Html.Raw("[" + (i-1) + ", "+item.Avg+"]");
                    if (i != Model.MainQuestionsRatingList.Count) { @Html.Raw(","); }
                }
            }
              @Html.Raw("];");
        }

        data.push({
                label: labels,
                data: d_main_quest_bar,
                bars: {
                    show: true,
                    barWidth: 0.2,
                    order: 1
                }
            });

编辑:我在本地运行了相同的代码,发现逗号会自动替换为点,这就是为什么它在我的本地作为@T.J.克劳德说。但是当我在测试中运行它时它不会发生。这怎么可能?

【问题讨论】:

  • 小数点分隔符是点 (.) 符号而不是逗号 (,)
  • JavaScript 在数字中使用 . 而不是 ,!
  • 请注意,var foo = (8,125) 不会导致错误,因为括号分隔表达式并且逗号运算符起作用(因此 foo 最终将是 125)。因此,始终正确使用小数分隔符非常重要。
  • Downvoters:这并不是一个看起来很愚蠢的错误,在许多文化中,,,而不是.,是小数点分隔符(而. 是千位分隔符——非常有趣)。
  • @BurakKarakuş:我非常怀疑它是否适用于 localhost。任何在代码中将 8,7 读取为十进制数字的 JavaScript 引擎都会以一种非常戏剧性的方式违反规范。

标签: javascript


【解决方案1】:

您不能在 JavaScript 源代码中使用本地化的小数分隔符。你必须使用.:

var mainQuest_d1 = 8.16666666666667;
var mainQuest_d2 = 7.95833333333333;
var mainQuest_d3 = 8.125;

What is the decimal separator symbol in JavaScript?

应该很明显, 已经有了另一个含义。你期望数组有多少个元素

[0, 8,16666666666667]

包含?

【讨论】:

  • 我不知道。我不相信它确实如此。你能提供一个MCVE 证明它在本地工作吗?
  • 我现在不在办公室,明天我可以提供 MCVE。但它确实有效,我向你保证。
  • @BurakKarakuş:我向你保证,JavaScript 代码中的数字文字从不使用, 作为小数分隔符。任何这样做的引擎都会违反规范。您可能将 string 传递到某个库或根据您的语言环境解释它的东西,但您没有在 JavaScript 代码中使用 , 输入数字文字并获得正确的结果。
  • 我用剃须刀做的,也许这就是你的意思?我更新了有问题的整个代码。
  • @T.J.Crowder 我用解决方案更新了我的问题。感谢您的时间和精力。
【解决方案2】:

您不应在数字中使用逗号。请改用小数位。逗号是保留用于其他用途的特殊字符,例如数组中的分隔符和函数参数。

例如:

8,16666666666667

应该是

8.16666666666667

你有几个实例,所以这里是正确编写的完整代码:

var oneToTen = [0,1,2,3,4,5,6,7,8,9,10];
var ticks = [[0, 'Atmosfer'],[1, 'Servis'],[2, 'Yemeklerimiz']];
var labels = ['Atmosfer','Servis','Yemeklerimiz'];
var mainQuest_d1 = 8.16666666666667;
var mainQuest_d2 = 7.95833333333333;
var mainQuest_d3 = 8.125;
var d_main_quest_bar = [[0, 8.16666666666667],[1, 7.95833333333333],[2, 8.125]];

(最后 4 行共有 6 处变化)

【讨论】:

    【解决方案3】:

    整数不应使用逗号:

    <script type="text/javascript">
    var oneToTen = [0,1,2,3,4,5,6,7,8,9,10];
    var ticks = [[0, 'Atmosfer'],[1, 'Servis'],[2, 'Yemeklerimiz']];
    var labels = ['Atmosfer','Servis','Yemeklerimiz'];
    var mainQuest_d1 = 8.16666666666667;
    var mainQuest_d2 = 7.95833333333333;
    var mainQuest_d3 = 8.125;
    var d_main_quest_bar = [[0, 8.16666666666667],[1, 7.95833333333333],[2, 8.125]];
    </script>
    

    来源:http://en.wikipedia.org/wiki/JavaScript_syntax#Number

    【讨论】:

    【解决方案4】:

    这是不正确的:

    var mainQuest_d1 = 8,16666666666667;
    var mainQuest_d2 = 7,95833333333333;
    var mainQuest_d3 = 8,125;
    

    这里不能使用逗号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2016-10-23
      • 2015-08-19
      相关资源
      最近更新 更多