ฉันจะตรวจสอบการมีอยู่ของวัตถุใน JavaScript ได้อย่างไร
ผลงานดังต่อไปนี้:
if (!null)
alert("GOT HERE");
แต่นี่เป็นข้อผิดพลาด:
if (!maybeObject)
alert("GOT HERE");
ข้อผิดพลาด:
maybeObject
ไม่ได้กำหนดไว้
ฉันจะตรวจสอบการมีอยู่ของวัตถุใน JavaScript ได้อย่างไร
ผลงานดังต่อไปนี้:
if (!null)
alert("GOT HERE");
แต่นี่เป็นข้อผิดพลาด:
if (!maybeObject)
alert("GOT HERE");
ข้อผิดพลาด:
maybeObject
ไม่ได้กำหนดไว้
คำตอบ:
คุณสามารถใช้typeof
โอเปอเรเตอร์กับตัวแปรที่ไม่ได้กำหนดอย่างปลอดภัย
ถ้ามันได้รับการกำหนดค่าใด ๆ รวมถึงโมฆะ typeof จะส่งคืนสิ่งอื่นที่ไม่ใช่ undefined typeof จะส่งคืนสตริงเสมอ
ดังนั้น
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
มีครึ่งความจริงมากมายที่นี่ดังนั้นฉันคิดว่าฉันทำให้บางสิ่งชัดเจนขึ้น
ที่จริงแล้วคุณไม่สามารถบอกได้อย่างถูกต้องว่ามีตัวแปรอยู่หรือไม่ (ยกเว้นว่าคุณต้องการรวมทุกบรรทัดที่สองลงในบล็อก try-catch)
เหตุผลก็คือจาวาสคริปต์มีคุณค่าที่ฉาวโฉ่undefined
ซึ่งไม่ได้หมายความว่าตัวแปรนั้นไม่ได้ถูกกำหนดหรือมันไม่มีอยู่จริงundefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
ดังนั้นทั้งตัวแปรที่มีอยู่และอีกตัวที่ไม่สามารถรายงานundefined
ประเภทของคุณได้
สำหรับ @ null == undefined
ความเข้าใจผิดของเควิน มันเป็นเพราะการบีบบังคับประเภทและมันเป็นเหตุผลหลักที่ Crockford บอกกับทุกคนที่ไม่แน่ใจในเรื่องแบบนี้เสมอให้ใช้โอเปอเรเตอร์ความเสมอภาคที่เข้มงวด===
เพื่อทดสอบค่าที่ผิดพลาด 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 ไม่เกี่ยวข้องกับเรื่องของ OP ของคำถามอย่างเคร่งครัด)
undefined
คุณอีกครั้งสับสนคำว่าไม่ได้กำหนดไว้กับชนิด พวกเขาไม่เหมือนกัน (note) it can be used !== you should use
. ใช้สามัญสำนึกขณะอ่าน เมื่อมีการประกาศตัวแปร (รายการพารามิเตอร์หรือที่อื่น ๆ ) และคุณต้องการตรวจสอบว่ามันมีค่าหรือไม่!=
null มีความปลอดภัยอย่างสมบูรณ์ มันเป็น usecase ที่แตกต่างจากที่ OP ร้องขอนั่นคือสาเหตุที่ฉันบุกรุกมันเป็นโน้ต ย่อหน้าทั้งหมดเป็นเรื่องเกี่ยวกับการโพสต์ของ @ Kevin และประเภทการข่มขู่ btw ในขณะที่คุณสามารถสังเกตเห็นถ้าคุณอ่านอย่างระมัดระวัง
!= null
เมื่อคุณทราบว่ามีการประกาศตัวแปรแล้ว สิ่งนี้มีประโยชน์มากสำหรับการตรวจสอบอาร์กิวเมนต์ของฟังก์ชันให้พิจารณา:var hasValue = function(foo) {return foo != null}
คุณสามารถใช้ได้:
if (typeof objectName == 'object') {
//do something
}
สองทาง.
คุณสามารถทดสอบวัตถุท้องถิ่นโดยใช้ 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)
เช่นเดียวกับการตรวจสอบเป็นโมฆะในจาวาสคริปต์ของฉัน
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)
สำหรับฉันสิ่งนี้ใช้ได้กับ DOM-object:
if(document.getElementsById('IDname').length != 0 ){
alert("object exist");
}
หากคุณสนใจเกี่ยวกับการดำรงอยู่ของมันเท่านั้น (มันถูกประกาศ?) คำตอบที่ได้รับการอนุมัตินั้นเพียงพอแล้ว:
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
}
if (maybeObject !== undefined)
alert("Got here!");
ตั้งค่ากล่องข้อความให้เป็นหนึ่งเฟรมเป็นเฟรมแบบอินไลน์โดยใช้ 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>
ศูนย์และ null เป็นตัวชี้โดยนัย หากคุณไม่ได้ทำเลขคณิตเปรียบเทียบหรือพิมพ์ '0' ไปที่หน้าจอไม่จำเป็นต้องพิมพ์จริง มันโดยปริยาย ตามที่ระบุไว้ใน ไม่จำเป็นต้องพิมพ์ด้วยเหตุผลเดียวกัน ดู.
if (obj) console.log ("มีอยู่");
ฉันไม่เห็นการร้องขอไม่เช่นนั้นจะไม่รวมอยู่ใน เท่าที่ฉันรักเนื้อหาพิเศษที่ไม่พอดีกับคำถาม ช่วยให้มันง่าย
if (!maybeObject)
- แต่จริงๆแล้วชื่อเรื่องขอตรงกันข้าม
คิดว่ามันง่ายที่สุดเช่นนี้
if(myobject_or_myvar)
alert('it exists');
else
alert("what the hell you'll talking about");
หรือคุณสามารถเริ่มใช้เอกสิทธิ์ของฉันที่มีอยู่ ()แทนและสามารถทำสิ่งที่ถือว่าเป็นไปไม่ได้ เช่น:
สิ่งที่ต้องการ: exists("blabla")
หรือแม้กระทั่ง: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
ยังเป็นไปได้ ...
!==
เพื่อการเปรียบเทียบ