Различный синтаксис для throw

У меня есть сомнение, которое я появилось используя размещенное слово throw языка сценариев JavaScript.

Согласно документации синтаксис:

throw выражение;

Итак, я увидел несколько примеров используя throw как будто это было призывом к функции, а именно, выражение между скобкой:

throw(new Error('Esto es un error'))

Более того, если мы переместим его более одного аргумента, он возьмет последний аргумент:

throw(1, 2, 3, new Error('Esto es un error'), 'El último')

Это поведение, кажется, не документировалось, вопрос был бы: porqué он не отпускает какую-то ошибку синтаксиса?

Если синтаксис правилен: какое чувство имеет мочь перемещать его столько аргументов?

Если я спутан полностью, что что я теряюсь здесь?

2
задан 02.01.2017, 18:05
0 ответов

Throw не функция, это решение следовательно, когда ты это делаешь

throw(new Error('Esto es un error'))

ты выполняешь решение throw, что идет сопровожденная выражением, и не список параметров следовательно скобки первого уровня ненужные и не показывают, что выполнение функции а скорее здесь они служат как оператор группирования, следовательно ты можешь опускать их.

throw new Error('Esto es un error')

не запутывайся с синтаксисом функции, что, чтобы выполнять ее, ты должен использовать скобки и посылать список параметров

function hola(nombre) {
  console.log('Hola, ' + nombre);
}

hola('Pepe'); // Esto ejecuta la función
hola 'Pepe'; // Esto es un error de sintaxis

Параметры, которые ты посылаешь в функцию, - выражения

hola(('Pepe')); // Esto es igual a hola('Pepe');

здесь первый уровень скобки выполняет функцию [привет], второй уровень скобки они служат как оператор группирования, которое он решает в ту же стоимость 'Пепе'.

Функции в javascript могут получать N количество параметров, если, выполнив, ты посылаешь больше параметров необходимых тогда, функция возьмет первых до тех пор, пока он не совпадет с числом параметров, которые он получал бы, и отвергни излишек.

hola('Pepe', 'Lucho', 28); // la función [hola] solo toma 'Pepe' e ignora el resto

но это отличается в список выражений, отделенных запятыми как например

1, 'Hola', hola(('Pepe')), 'Lucho'; // Esto son 4 expresiones separadas por comas
function hola(nombre){console.log(nombre)}

Запятая может быть использованной, чтобы отделять выражения, которые ты пишешь в единственной линии, следовательно - эквивалентная этому.

1; 'Hola'; hola(('Pepe')); 'Lucho';

Статья throw может получать объект Ошибка или нет, ты можешь посылать любую стоимость в throw как цепи, числа или другие объекты.

throw new Error('Error 404 not found');
throw 'Error 404 not found';
throw 404;

Тогда в твоем примере эта линия

throw(1, 2, 3, new Error('Esto es un error'), 'El último')

он эквивалентный в

throw 1, 2, 3, new Error('Esto es un error'), 'El último'

поскольку это выражение и не список параметров, это выражение решено в последнюю стоимость, в твоем случае является цепь 'Последней'.

throw (1), (2), (3), (new Error('Esto es un error')), ('El último') // Uncaught El último
throw ((1), (2), (3), (new Error('Esto es un error')), ('El último')) // Uncaught El último

и в конце концов точка с запятой разграничивает решение следовательно эти не являются эквивалентными

throw 1, 2, 3, new Error('Esto es un error'), 'El último' // Uncaught El último

throw 1; 2; 3; new Error('Esto es un error'); 'El último' // Uncaught 1
3
ответ дан 03.12.2019, 17:54