Ответы:
Вы можете безопасно использовать typeof
оператор для неопределенных переменных.
Если ему было присвоено какое-либо значение, включая null, typeof вернет что-то отличное от undefined. typeof всегда возвращает строку.
Следовательно
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Здесь много полуправды, поэтому я решил кое-что прояснить.
На самом деле вы не можете точно сказать, существует ли переменная (если вы не хотите обернуть каждую вторую строку в блок try-catch).
Причина в том, что Javascript обладает этим пресловутым значением, undefined
которое поразительно не означает, что переменная не определена или что она не существуетundefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Так что и переменная, которая существует, и другая, которая не может сообщить вам undefined
тип.
Что касается заблуждения @ Кевина null == undefined
. Это происходит из-за приведения типов, и это основная причина, по которой Крокфорд постоянно говорит всем, кто не уверен в подобных ===
вещах, всегда использовать оператор строгого равенства для проверки возможных ложных значений. null !== undefined
дает вам то, что вы могли ожидать. Также обратите внимание, что это foo != null
может быть эффективным способом проверить, является ли переменная undefined
ниnull
. Конечно, вы можете быть явным, потому что это может помочь читабельности.
Если вы ограничите вопрос проверкой существования объекта, это typeof o == "object"
может быть хорошей идеей, за исключением случаев, когда вы не учитываете объекты массивов, так как это также будет сообщать о типе, object
который может вас немного запутать. Не говоря уже о том, typeof null
что также даст вам, object
что просто неправильно.
Первобытная область , где вы действительно должны быть осторожными typeof
, undefined
, null
, unknown
и другие misteries объекты хозяина. Им нельзя доверять. Они свободны делать почти любую грязную вещь, которую хотят. Поэтому будьте осторожны с ними, проверьте функциональность, если можете, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.
foo!=null
приведет к возникновению ошибки ReferenceError, если foo
она не определена. Таким образом, лучше использовать typeof
, если вы не планируете ловить исключение.
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Я не сказал, что != null
это хорошо для проверки, если она существует. Вы вынимаете это из контекста. (Я также упомянул, что это sidenote, не строго связанный с предметом вопроса ОП)
undefined
. Они не одинаковы. (note) it can be used !== you should use
, Используйте здравый смысл при чтении. Когда переменная объявлена (список параметров или где-либо еще), и вы хотите проверить, есть ли у нее значение, !=
null полностью безопасен. Это другой вариант использования, нежели тот, о котором просил ОП, поэтому я представил его в качестве примечания. Весь параграф о посте @ Kevin и принуждении к типу между прочим. Как вы можете заметить, если вы внимательно прочитали.
!= null
когда знаете, что переменная объявлена. Это очень полезно для проверки аргументов функций, рассмотрим:var hasValue = function(foo) {return foo != null}
Два пути.
Вы можете проверить локальный объект, используя typeof:
if (typeof object !== "undefined") {}
Вы можете проверить глобальный объект (определенный в глобальной области), проверив объект окна:
if (window.FormData) {}
Если это глобальный объект, вы можете использовать if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
что это немного более читабельно, если это глобальный объект
Вы можете использовать «typeof».
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Тема была открыта довольно давно. Тем временем я думаю, что использование троичного оператора является самым простым вариантом:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
и проверьте, если нет false
.
Раньше я просто делала if(maybeObject)
проверку нуля в моих javascripts.
if(maybeObject){
alert("GOT HERE");
}
Таким образом, только если maybeObject
- это объект, предупреждение будет показано. У меня есть пример на моем сайте.
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
есть 0, 0.0, or ""
, проверяется на ложность
Я только что протестировал примеры typeOf сверху, и ни один из них не работал для меня, поэтому вместо этого я использовал это:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
Помимо проверки существования объекта / переменной вы можете захотеть предоставить вывод «наихудшего случая» или, по крайней мере, поместить его в предупреждение, чтобы оно не осталось незамеченным.
Пример функции, которая проверяет, предоставляет альтернативы и выявляет ошибки.
function fillForm(obj) {
try {
var output;
output = (typeof obj !== 'undefined') ? obj : '';
return (output);
}
catch (err) {
// If an error was thrown, sent it as an alert
// to help with debugging any problems
alert(err.toString());
// If the obj doesn't exist or it's empty
// I want to fill the form with ""
return ('');
} // catch End
} // fillForm End
Я создал это также потому, что передаваемый ему объект мог быть x, xm, xm [z], а typeof xm [z] потерпит неудачу с ошибкой, если xm не существует.
Я надеюсь, что это помогает. (Кстати, я новичок в JS)
Если вы заботитесь только о его существовании (было ли оно объявлено?), Достаточно утвержденного ответа:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Если вас волнует фактическое значение, вы должны добавить:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Так как typeof( null ) == "object"
например bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
Таким образом , вы убедитесь , что это не ни null
или undefined
, и так как typeof
не ошибка , если значение не существует плюс&&
короткого замыкания, вы никогда не получите ошибку во время выполнения.
Лично я бы предложил добавить куда-нибудь помощника fn (и давайте не будем доверять typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
установите значение Textbox равным одному кадру для встроенного кадра, используя панель вкладок div alignmnt. Прежде всего, перед тем, как установить значение, нам нужно проверить, доступен ли выбранный фрейм с вкладками или нет следующих кодов:
Код Javascript:
/////////////////////////////////////////
<script>
function set_TextID()
{
try
{
if(!parent.frames["entry"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["entry"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["education"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["education"].document.getElementById("form_id").value=setText;
}
if(!parent.frames["contact"])
{
alert("Frame object not found");
}
else
{
var setText=document.getElementById("formx").value;
parent.frames["contact"].document.getElementById("form_id").value=setText;
}
}catch(exception){}
}
</script>
ноль и ноль являются неявными указателями. Если вы не выполняете арифметику, сравниваете или выводите «0» на экран, нет необходимости его набирать. Это неявное. Как и подразумевается. Typeof также не требуется по той же причине. Смотреть.
if (obj) console.log ("существует");
Я не видел запрос на нет или еще там, поскольку он не включен как. Столько, сколько я люблю дополнительный контент, который не вписывается в вопрос. Давайте будем проще.
if (!maybeObject)
- но действительно, название требует обратного.
Или, вы все можете начать использовать мой эксклюзивный exist () вместо этого метод и иметь возможность делать вещи, которые считаются невозможными. то есть:
Такие вещи, как: exists("blabla")
или даже: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
также возможны ...
!==
для сравнения.