Если b существует и имеет значение false, null и т. Д., То он работает так, как вы ожидаете. Все, что вам нужно сделать, это на строке выше, поставить var b = null
;
Это имеет смысл, если вы думаете об этом. Это в основном делает что-то вроде этого ...
a = function(){ if(b){return b;} else{ return 'blah' } }();
Обратите внимание, что проверяется, что значение b является правдивым ... если b не существует, вы получаете исключение.
Относительно неопределенных переменных
«Undefined» в javascript не означает «переменная не существует». Это означает, что «значение переменной является специальным значением undefined
». Пример:
alert(nosuchvariable);
=> throws exception
var somevariable; // note it's never assigned
alert(somevariable);
=> This alerts with 'undefined'
Относительно проверки существования переменных.
Так что, если мы попытаемся прочитать b
и такой переменной, как b, не будет, мы получим исключение. Если мы пытаемся выяснить, определен ли b, это бесполезно.
Вы можете увидеть, существуют ли глобальные переменные, проверив объект верхнего уровня window
. Все глобальные переменные - это просто поля в объекте window
. Пример: * +1022 *
foo = 'Hello';
alert( window.foo );
=> alerts 'Hello'
Поскольку вы знаете, что объект window уже существует, вы можете проверить его поля.
Проверка на наличие полей, которые не существуют в javascript, даст вам undefined
и не даст сбоя, поэтому вы можете сделать объединение или поместить undefined
в переменную или что-то еще
Для локальных переменных (вещи, объявленные с var
), вы не можете проверить их существование. они нигде не "живут" так, как глобальные переменные «жить» в объекте окна, и любая нормальная попытка обратиться к нему вызовет исключение: например:
alert(a);
=> exception because a is meaningless
alert(d45pwiu4309m9rv43);
=> exception because that is equally meaningless
Однако есть одно исключение (о котором я знаю, спасибо J c в комментариях), оператор typeof
. Если вы попытаетесь получить тип чего-то, что не существует, оно не будет аварийно завершать работу, оно вернет строку "undefined"
.
Это дает вам возможность проверить несуществующие локальные переменные. например:
if( typeof(djfsd) === "undefined" )
alert('no such variable');
Относительно DOM-элементов, которых не существует
Было несколько комментариев, в которых упоминались элементы DOM без идентификаторов и так далее ...
Тот факт, что это элемент DOM, на самом деле не имеет значения. Представьте, что DOM - это база данных или файл, а элемент - строка в этой базе данных или слово в этом файле. Чтобы сделать что-нибудь с ним, вам нужно поискать в базе данных, найти правильный ряд и вытащить его данные. Данные помещаются в объект javascript. Затем вы получаете к нему доступ, манипулируя этим объектом и, возможно, помещаете объект в переменную, если хотите. Пример: * * тысяча пятьдесят-четырь
document.getElementById('foo');
это входит в дом и ищет элемент с идентификатором 'foo'. Если он находит его, он помещает некоторую информацию об этом элементе в объект javascript, а затем возвращает этот объект вам. Если он не может найти элемент, он вернет вам null
, но все нормальные правила по-прежнему применяются (вы можете вставить null
в переменную или как угодно).
Это никак не влияет на объединение.