#javascript
Вопрос:
Я только начал изучать JS и совершенно ошеломлен его безопасностью типа. Я объявил функцию:
function foo(args) { if (args[0] == undefined) { ... } }
и призовите его как:
foo(3)
Во время выполнения он с удовольствием индексирует это целое число. Я, по крайней мере, ожидал, что он не будет рассматривать » 3 «как массив во время выполнения и говорить «не может индексировать целочисленный тип». Но предикат оценивается.
Это так либерально или я что-то упускаю из виду, касающееся проверок времени выполнения JS?
Комментарии:
1. Вы можете получить доступ к произвольным реквизитам для чего угодно , включая реквизиты с числовыми именами, такие как элементы массива.
2. и обратитесь за функциональностью, которую вы, похоже, ищете. вам не нужно указывать параметр. функции без стрелок (синтаксис, отличный от лямбда) имеют
arguments
массив как часть прототипа. наконец, если вам нужна безопасность ввода, TypeScript
Ответ №1:
Массивы в javascript-это в основном просто объекты только с числовыми свойствами. Поскольку все в javascript является объектом (да, и функциями тоже), вы можете получить доступ к свойствам чего угодно.
Вы можете сделать something.foo
, something["foo"]
или something[0]
, независимо от того, что something
есть. В худшем случае, ты вернешься undefined
.
Вы также можете задать свойства для объектов с числовыми значениями:
let one = 1;
one.foo = "test";
one[0] = 42;
alert(one.foo);
alert(one[0]);
Комментарии:
1. Если вы попытаетесь
undefined.foo
, вы получите ошибку типа2. Справедливый. Неопределенное, очевидно, является исключением из правила «все является объектом».