Я сделал код, который получает тип входных данных. Все входы, которые я добавляю в функцию, имеют правильные ответы (например: prompt (10) результат: Number). когда я пытался добавить объект следующим образом ({}) я получаю Undefined код, который я сделал:
function type() {
var Input = eval (prompt("please enter a value"));
var Primitive = [Boolean(Input), String(Input), null, undefined,
Number(Input)];
for (i = 0; i < Primitive.length; i++) {
if (Primitive[i]) {
console.log (typeof Input)
}
}
}
type();
Я пытался использовать instanceof, но я получил тот же результат для объекта, который не определен.
Ожидаемый результат, когда я запрашиваю {}, я получаю объект. примечание: для Array [] я получаю объект без проблем.
если вы используете eval({})
Javascript будет обрабатывать {} как пустой блок, а не как объект. Я (и многие разработчики) не одобряю использование eval()
вы можете избежать этого, используя eval("(" + prompt("please enter a value") + ")");
Здесь разница:
var Input = eval (prompt("please enter a value"));
// if you type {} this will turn into eval({}) wich is the same as eval() which will return "undefined"
Input = eval("(" + prompt("please enter a value") + ")");
//Typing {} will turn into eval(({})) wich makes {} an expression instead of an empty block. thus returning "object"
0); alert("no"); //
{}
интерпретируется как (пустой) блок кода, а не как объектный литерал. Он не имеет возвращаемого значения, поэтому по умолчанию он не undefined
.
Вы бы получили те же результаты, если бы вы вошли ;
,
Чтобы получить реальный объект, вам нужно убедиться, что {
интерпретируется как часть выражения, а не как начало оператора, например, с помощью ({})
.
typeof Primitive[i]
eval({})
Javascript будет обрабатывать {} как пустой блок, а не как объект. Я (и многие разработчики) не одобряю использованиеeval()