2013-10-31 40 views
16

Tôi có hàm javascript chấp nhận tham số tùy chọn. Đây hoạt động tốt trong Firefox, nhưng trong Google Chrome nó cho thấy: -Cú pháp không mong muốn: Lỗi không mong đợi = trong Google Chrome

Uncaught SyntaxError: Unexpected token = 

Mã của tôi,

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

Tôi đã thấy rất nhiều câu hỏi tương tự nhưng tôi không thể nhận ra vấn đề của tôi.

Trả lời

32

Bạn đang sử dụng tính năng default parameter chỉ được Firefox hỗ trợ.

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

Bây giờ nó hiển thị '' Cú pháp không bắt buộc: Mã thông báo không mong muốn; '' cho dòng '' text = typeof text == 'undefined'? "Đã xảy ra lỗi!" || văn bản; '' – devo

+0

@devo đã xảy ra lỗi ngay bây giờ –

+0

Ok, OK. Bạn giải thích tại sao không có lỗi trong firefox? – devo

6

Javascript không cho phép bạn chuyển đối số mặc định như vậy. Bạn cần gán mặc định nội bộ cho hàm.

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

Có. Nó hoạt động. Bạn có thể giải thích lý do tại sao nó hoạt động trong firefox? – devo

+0

Tôi rất ngạc nhiên khi nghe điều đó. Nếu nó làm việc trong Firefox hơn Firefox phải được tha thứ cú pháp không hợp lệ của bạn bằng cách nào đó, hoặc vấn đề là chỉ bị nuốt để bạn không nhận thấy nó. Mã ban đầu của bạn là cú pháp Javascript không hợp lệ, do đó, nó _should_ ném một lỗi ở mọi nơi, trừ khi có lỗi trong triển khai JS. –

+2

@devo Giá trị tham số mặc định sẽ trở thành một phần của ngôn ngữ khi [ECMAScript 6] (http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts) được hoàn thành. Mozilla vừa thêm hỗ trợ cho nó sớm. –

0

function [a-zA-Z0-9_]*?\s{0,}\([^=$)]*?(=)[^)$]*?\) có thể hữu ích khi tìm các hàm js có thông số mặc định và sau đó sửa chúng.

+0

Và làm cách nào để tôi sử dụng tính năng này để tìm các chức năng? – cjbarth

1

Lưu ý: Các câu trả lời khác sẽ không hoạt động nếu bạn có giá trị boolean mà bạn muốn đặt mặc định là true. Đó là vì anything||true sẽ luôn trả lại true. Thay vào đó, bạn nên làm điều gì đó như:

function foo(bar){ 
    if(bar === undefined) 
    bar = true; 
    //rest of your function 
} 
Các vấn đề liên quan