谷歌浏览器中出现“Uncaught SyntaxError: Unexpected token =”错误

16

我有一个JavaScript函数,它接受一个可选参数。这在Firefox中运行良好,但在Google Chrome中显示:

Uncaught SyntaxError: Unexpected token =

我的代码,

function errorNotification(text = "Something went wrong!") {
  $.pnotify({
      title: 'Error',
      text: text,
      type: 'error'
  });
}

我看到了很多类似的问题,但是我无法理解我的问题。

4个回答

32

您正在使用仅被Firefox支持的默认参数特性。

function errorNotification(text) {
    text = text || "Something went wrong!";
    $.pnotify({
        title: 'Error',
        text: text,
        type: 'error'
    });
}

现在它显示“Uncaught SyntaxError: Unexpected token ;”对于这一行“text = typeof text == 'undefined' ? "Something went wrong!" || text;”。 - Anshad Vattapoyil
1
@devo 因为它在 Firefox 中得到支持,请阅读文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/default_parameters - Arun P Johny
我喜欢早期的答案,也给其他解释点赞。 - Anshad Vattapoyil
感谢 - 这对我也起作用了 - 我的问题也解决了。具有讽刺意味的是(尽管完全不相关,但仍然很有趣,因为地图由谷歌制作,Chrome 也是由谷歌制作的),我的错误是在使用经纬度坐标的默认参数时出现的。Chrome 破坏了谷歌产品 :P - Kobus Myburgh

6

JavaScript不允许像那样传递默认参数。您需要在函数内部分配默认值。

function errorNotification(text) {
  text || (text = "Something went wrong!");
  $.pnotify({
      title: 'Error',
      text: text,
      type: 'error'
  });
}

是的,它正在工作。您能解释为什么它在Firefox上工作吗? - Anshad Vattapoyil
我对听到这个消息感到非常惊讶。如果在Firefox中能够正常工作,那么Firefox一定以某种方式容忍了你的无效语法,或者问题被忽略了,所以你没有注意到它。你的原始代码是无效的Javascript语法,所以它应该在任何地方都会抛出错误,除非JS实现中存在bug。 - Mike Edwards
2
@devo 当 ECMAScript 6 最终确定时,默认参数值应成为语言的一部分。Mozilla 早已提前支持它。 - Jonathan Lonowski
啊。那很酷,但不幸的是我们在未来几年内真的无法编写依赖这个的代码... - Mike Edwards
感谢您的适当解释,加一分。 - Anshad Vattapoyil

1
注意:如果你想将布尔值默认为true,其他答案将无效。这是因为anything||true总是返回true。相反,你应该这样做:
function foo(bar){
  if(bar === undefined)
    bar = true;
  //rest of your function
}

0

function [a-zA-Z0-9_]*?\s{0,}\([^=$)]*?(=)[^)$]*?\) 这段代码可以帮助查找具有默认参数的 js 函数,然后进行修正。


我该如何使用这个来查找函数? - cjbarth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接