Функции Javascript и параметры по умолчанию, не работающие в IE и Chrome
Я создал такую функцию:
function saveItem(andClose = false) {
}
Он отлично работает в Firefox
В IE он дает эту ошибку на консоли:
Expected ')'
В Chrome это приводит к ошибке в консоли:
Uncaught SyntaxError: Unexpected token =
Оба браузера отмечают источник ошибки как строку создания функции.
Ответы
Ответ 1
Вы не можете этого сделать, но вместо этого можете сделать что-то вроде:
function saveItem(andClose) {
if(addClose === undefined) {
addClose = false;
}
}
Это часто сокращается до следующего:
function setName(name) {
name = name || 'Bob';
}
Обновление
Вышеупомянутое верно для ECMAScript <= 5. ES6 предложила Параметры по умолчанию. Таким образом, вышеизложенное может читать:
function setName(name = 'Bob') {}
Ответ 2
Это не допустимый синтаксис ECMAScript, но он является допустимым синтаксисом для суперсайтов Mozilla функций, которые они добавляют к их реализации языка.
Синтаксис назначения параметров по умолчанию, скорее всего, входит в ECMAScript 6.
Ответ 3
Javascript не разрешает спецификатор по умолчанию.
Быстрый способ делать то, что вы хотите, меняется:
function saveItem(andClose = false) {
}
к следующему:
function saveItem(andClose) {
// this line will check if the argument is undefined, null, or false
// if so set it to false, otherwise set it to it original value
var andClose = andClose || false;
// now you can safely use andClose
if (andClose) {
// do something
}
}
Ответ 4
Предоставленный вами код не будет запускаться в Chrome < версия 49:
https://kangax.github.io/compat-table/es6/#test-default_function_parameters
Вы использовали действительный синтаксис ECMAScript 2015:
На мой взгляд, лучший способ использовать функции ES2015 - это объединить активы с Browserify или WebPack с шагом для использования Babel для перекомпилирования ES2015 на ES5. Таким образом, вам не нужно беспокоиться об этой таблице совместимости браузера ES2015. Это боль, чтобы начать работу в первый раз, но стоит того.