У меня есть неопределенная переменная, и я проверить его в струнной CONCAT:Невозможно правильно написать тройной оператор в JavaScript
var undefinedVariable = undefined;
console.log("foo" + undefinedVariable === undefined ? "bar" : undefinedVariable.toString());
Учитывая, что undefinedVariable неопределен, undefinedVariable.toString()
является недостижимый код. Тем не менее, я получаю эту ошибку:
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
Странная вещь, если удалить «Foo» в начале console.log, то код работает отлично.
console.log(undefinedVariable === undefined ? "bar" : undefinedVariable.toString());
я испытал в хроме и светлячок, и я получаю тот же результат, так что, вероятно, это не ошибка. Есть ли объяснение, почему JS-двигатели пытаются запустить недостижимую часть?
^Заголовок плохо сформулированный для этого вопроса, но если вы читаете принятый ответ, это будет объяснить такое поведение. –
@MikeC Nopes ... Не обман этой цели/неправильной цели. ':)' –
@PraveenKumar Как я уже сказал, это не точный обман, но ошибка такая же. Тернарные условия оцениваются * после * конкатенации, что означает, что 'undefinedVariable.toString()' выполняется независимо от 'undefinedVariable === undefined'. –