Yanıtlar:
typeof
Tanımsız değişkenlerde operatörü güvenle kullanabilirsiniz .
Null dahil herhangi bir değer atandıysa, typeof tanımsız dışında bir değer döndürür. typeof her zaman bir dize döndürür.
bu nedenle
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Burada çok fazla yarı-gerçek var, bu yüzden bazı şeyleri daha açık hale getirdiğimi düşündüm.
Aslında bir değişkenin var olup olmadığını doğru bir şekilde söyleyemezsiniz (her ikinci satırı bir try-catch bloğuna sarmak istemiyorsanız).
Bunun nedeni Javascript'in bu kötü şöhretli değere sahip undefined
olması, çarpıcı bir şekilde değişkenin tanımlanmadığı veya var olmadığı anlamına gelmezundefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Yani hem var olan bir değişken hem de olmayan başka bir değişken undefined
türü bildirebilir .
@ Kevin'in yanlış algısına gelince, null == undefined
,. Bu, tip zorlamasından kaynaklanmaktadır ve Crockford'un bu tür şeylerden emin olmayan herkese her zaman ===
olası eşitlik değerlerini test etmek için sıkı eşitlik operatörü kullanmasını söylemesinin ana nedeni budur . null !== undefined
size ne beklediğinizi verir. O da not edin foo != null
değişken ne olup olmadığını kontrol etmek için etkili bir yol olabilir undefined
ne de null
. Tabii ki açık olabilirsiniz, çünkü okunabilirliğe yardımcı olabilir.
Soruyu bir nesnenin var olup olmadığını kontrol etmek için kısıtlarsanız, typeof o == "object"
dizilerin nesnelerini dikkate almamanız dışında iyi bir fikir olabilir, çünkü bu da object
sizi biraz karışık bırakabilir. Sadece yanlış olanı typeof null
size vereceğinden bahsetmiyorum bile object
.
Gerçekten konusunda dikkatli olmalıdır ilkel alan typeof
, undefined
, null
, unknown
diğer Misteries ve ana nesnelerdir. Onlara güvenilemez. İstedikleri neredeyse tüm kirli şeyleri yapmakta özgürdürler. Bu yüzden onlara dikkat edin, mümkünse işlevselliği kontrol edin, çünkü var olmayan bir özelliği kullanmanın tek güvenli yolu budur.
foo!=null
değilse basitçe yapmak ReferenceError üretir foo
. Bu nedenle, typeof
istisnayı yakalamayı planlamıyorsanız kullanmak daha iyidir .
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. != null
Var olup olmadığını kontrol etmek için iyi demedim . Bağlamdan çıkarıyorsunuz. (Ben de bunun bir sidenote olduğunu, kesinlikle OP sorusunun konusuyla ilgili olmadığını belirtti)
undefined
. Aynı değiller. (note) it can be used !== you should use
. Okurken sağduyunuzu kullanın. Değişken bildirildiğinde (parametre listesi veya başka bir yerde) ve bir değerinin olup olmadığını kontrol etmek istediğinizde, !=
null değeri tamamen güvenlidir. OP'nin istediğinden farklı bir kullanım alanı, bu yüzden onu not olarak davet ettim. Bütün paragraf @ Kevin'in gönderi ve tip zorlama btw hakkında. Dikkatlice okuduğunuzda fark edebileceğiniz gibi.
!= null
. Bu, işlev bağımsız değişkenlerini denetlemek için çok yararlıdır, var hasValue = function(foo) {return foo != null}
İki yol.
Typeof kullanarak yerel bir nesneyi test edebilirsiniz:
if (typeof object !== "undefined") {}
Pencere nesnesini inceleyerek genel bir nesneyi (genel kapsamda tanımlanan) test edebilirsiniz:
if (window.FormData) {}
Bu küresel bir nesne ise, if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
Küresel bir nesne ise biraz daha okunabilir buldum
"Typeof" kullanabilirsiniz.
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Konu bir süre önce açıldı. Bu arada üçlü bir operatörün en basit seçenek olduğunu düşünüyorum:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
ve olmadığını kontrol edin false
.
Ben sadece if(maybeObject)
benim javascripts null kontrol olarak yapardı .
if(maybeObject){
alert("GOT HERE");
}
Bu nedenle, yalnızca maybeObject
- bir nesne ise uyarı gösterilir. Sitemde bir örnek var.
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
, 0, 0.0, or ""
yanlış kontrol eder
Ben sadece yukarıdaki typeOf test ettik ve hiçbiri benim için çalıştı, bu yüzden bunun yerine kullandım:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
Nesnenin / değişkenin varlığını kontrol etmenin yanı sıra, "en kötü durum" çıktısı sağlamak veya en azından fark edilmeyecek şekilde bir uyarıya sıkıştırmak isteyebilirsiniz.
Kontrol eden, alternatif sağlayan ve hataları yakalayan işlev örneği.
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
Bunu ben de oluşturduğum nesne x, xm, xm [z] ve xm [z] tipeof olabilir eğer xm mevcut değilse bir hata ile başarısız olur.
Umut ediyorum bu yardım eder. (BTW, JS konusunda acemi oldum)
Yalnızca varlığını önemsiyorsanız (beyan edildi mi?), Onaylanmış cevap yeterlidir:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Gerçek bir değere sahip olmasını önemsiyorsanız şunları eklemelisiniz:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Gibi typeof( null ) == "object"
Örneğin bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
Bu yolu ikisi de değil kontrol null
veya undefined
, ve o zamandan beri typeof
değeri mevcut artı yoksa hata yapmaz &&
kısa devreler, bir çalışma zamanı hatası alıyorum asla.
Şahsen, bir yere bir yardımcı fn eklemenizi öneririm (ve güvenmeyelim typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
div alignmnt sekmeli panelini kullanarak Textbox değerini bir çerçeveye satır içi çerçeveye ayarlayın. Her şeyden önce, değeri ayarlamadan önce, aşağıdaki kodları kullanarak seçili sekmeli panel çerçevesini kontrol etmeliyiz:
Javascript Kodu:
/////////////////////////////////////////
<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>
sıfır ve null, örtük işaretçilerdir. Ekranda aritmetik, karşılaştırma veya '0' yazmıyorsanız, bunu gerçekten yazmanıza gerek yoktur. Örtük. Zımni olduğu gibi. Aynı nedenden ötürü typeof da gerekli değildir. İzlemek.
(obj) console.log ("varsa");
Ben bir istek için ya da başka orada görmedim olarak dahil değildir. Soruya uymayan ekstra içeriği sevdiğim kadar. Basit tutalım.
if (!maybeObject)
- ama gerçekten, başlık tam tersini istiyor.
Ya da, bunun yerine benim özel exist () yöntemimi kullanmaya başlayabilir ve imkansız olduğu düşünülen şeyleri yapabilirsiniz. yani:
Gibi şeyler:, exists("blabla")
hatta: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
mümkün de ...
!==
karşılaştırma için gerçekten yapabilirdi (gerekir) .