Відповіді:
Ви можете безпечно використовувати typeof
оператора на невизначених змінних.
Якщо йому було призначено будь-яке значення, включаючи null, typeof поверне щось інше, ніж невизначене. typeof завжди повертає рядок.
Тому
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Тут багато напівправди, тому я подумав, що я роблю деякі речі зрозумілішими.
Насправді ви не можете точно сказати, чи існує змінна (якщо ви не хочете загортати кожен другий рядок у блок-пробу).
Причина в тому, що 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
це добре для перевірки, чи існує. Ви виймаєте це з контексту. (Я також згадав, що це сиденот, не суворо пов'язаний з темою питання про ОП)
undefined
. Вони не однакові. (note) it can be used !== you should use
. Використовуйте здоровий глузд під час читання. Коли оголошена змінна (список параметрів або в іншому місці), і ви хочете перевірити, чи отримано це значення, !=
null повністю безпечний. Це інший випадок, ніж те, про що просив ОП, тому я натрапив на це як замітку. Весь абзац про пост @ Кевіна і тип примусу btw. Як можна помітити, якщо ви уважно читаєте.
!= 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)
нульову перевірку в своїх Java-скриптах.
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 не існувало.
Я сподіваюся, що це допомагає. (BTW, я початківець з 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)
- але дійсно, заголовок вимагає протилежного.
Або ви можете почати використовувати мій ексклюзивний метод існує () замість цього і мати можливість робити речі, які вважаються неможливими. тобто:
Такі речі, як: exists("blabla")
або навіть: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
також можливі ...
!==
для порівняння.