Я работаю над существующей функцией, которая объявляется с use strict
режима. То, что я нашел странным, заключается в том, что когда генерируется исключение, блок catch
не выполняется. Я думаю, что это связано с strict mode
линией strict mode
потому что, когда я получаю удовольствие от нее, она идет в блоке catch
.
Я всегда видел, что главная цель использования try/catch
состоит в том, чтобы предотвратить внезапный выход кода (без какого-либо контроля), когда во время выполнения неконтролируемая ситуация.
Предложение catch содержит инструкции, которые указывают, что делать, если в блок try выбрано исключение.
При использовании со строгим режимом кажется, что он не имеет никакого эффекта. Есть ли объяснения этого поведения?
Мой код:
function test(){
"use strict"
//...
try {
// var dt = new Date(2017, 10, 27, 15, 23, 9); /* works fine */
var dt = new Date(2017, 10, 27, 15, 23, 09);
} catch(e){
console.log("inside catch");
} finally {
console.log("inside finally");
}
//...
}
test();
// output: Uncaught SyntaxError:
// Decimals with leading zeros are not allowed in strict mode.
замечание
Прежде чем задать вопрос, я просмотрел некоторые вопросы в StackOverflow, но я не нашел объяснений. Например, этот вопрос касается объема const
не поведения самого try/catch
.
То, что вы здесь сделали, "09" - это что-то, называемое восьмеричным литералом, и оно устарело, чтобы понять, почему оно устарело. Вот оно, и это совершенно очевидно, поскольку использование "строгого режима" не позволит вам использовать устаревшие функции, чтобы он приведет к ошибке.