วิธีตรวจสอบค่า 'undefined' ใน jQuery


172

ซ้ำเป็นไปได้:
การตรวจจับคุณสมบัติวัตถุที่ไม่ได้กำหนดใน JavaScript จาวา
สคริปต์ที่ไม่ได้กำหนดเปรียบเทียบ

วิธีที่เราสามารถเพิ่มการตรวจสอบตัวแปรที่ไม่ได้กำหนดเช่น:

function A(val) {
  if (val == undefined) 
    // do this
  else
    // do this
}

คำตอบ:


379

ห้องสมุด JQuery ได้รับการพัฒนาโดยเฉพาะเพื่อให้ง่ายขึ้นและเพื่อรวมการทำงานของ JavaScript บางอย่างเข้าด้วยกัน

อย่างไรก็ตามถ้าคุณต้องการตรวจสอบตัวแปรเทียบกับundefinedค่าคุณไม่จำเป็นต้องคิดค้นวิธีพิเศษใด ๆ เนื่องจาก JavaScript มีตัวtypeofดำเนินการซึ่งง่ายรวดเร็วและข้ามแพลตฟอร์ม:

if (typeof value === "undefined") {
    // ...
}

มันจะส่งกลับสตริงที่ระบุประเภทของตัวแปรหรือตัวถูกดำเนินการที่ไม่ได้ประเมินค่าอื่น ๆ ข้อได้เปรียบหลักของวิธีนี้เมื่อเทียบกับif (value === undefined) { ... }คือtypeofจะไม่มีการเพิ่มข้อยกเว้นในกรณีที่valueไม่มีตัวแปร



9
ฮ่า ๆ ๆ ๆ คุณแสดงความคิดเห็นนี้จริงๆเหรอ? ฉันรู้ว่าเป็นผู้ชายคนเดียวกัน แต่ฉันคิดว่าเขาต้องการทราบว่ามีวิธีการบางอย่างใน jQuery เช่น $ .isUndefined (Object); และคืนค่าจริงหรือเท็จ typeof เป็นเพียงจาวาสคริปต์โดยไม่มีกรอบ
ncubica

ปัญหาอย่างหนึ่งของฉันคือ: ถ้าคุณทำอะไรแบบนี้("#myId")ต้องแน่ใจว่าคุณต้องการอะไรจริง ๆ : typeof ("#myId")=== "undefined" ข หรือ:typeof ("#myId").val() === "undefined"
Alberici

3
@Alberici ("#myId")ไม่มีอะไรนอกจากค่าคงที่สตริง มันจะถูกกำหนดและมีประเภท"string"เสมอ หากคุณหมายถึงวัตถุ jQueryจริงที่สร้างด้วยวัตถุ$("#myId")นั้นจะถูกกำหนดเป็น"object"(หากคุณมีการเชื่อมโยง jQuery อย่างถูกต้อง) การดำรงอยู่ขององค์ประกอบ DOM ที่มี ID myIdสามารถประเมินได้ด้วยในขณะที่การตรวจสอบถ้าค่าของมันจะไม่ว่างเปล่าที่สามารถทำได้ด้วยif ($("#myId").length > 0) { ... } if ($("#myId").val()) { ... }ข้อเหล่านี้ไม่เกี่ยวข้องกับหัวข้อของคำถามนี้
VisioN

1
@ user3284463 ดังที่กล่าวไว้ในคำตอบวิvalue === undefinedจะยกข้อยกเว้นหากvalueไม่มีตัวแปร ดังนั้นมันขึ้นอยู่กับคุณว่าจะใช้อะไรในชีวิตจริง
VisioN

26

ในกรณีนี้คุณสามารถใช้การ=== undefinedเปรียบเทียบ:if(val === undefined)

ใช้งานได้เพราะมีอยู่valเสมอ(เป็นอาร์กิวเมนต์ของฟังก์ชัน)

หากคุณต้องการทดสอบตัวแปรที่ไม่มีอาร์กิวเมนต์เช่นอาจไม่ได้กำหนดเลยคุณต้องใช้if(typeof val === 'undefined')เพื่อหลีกเลี่ยงข้อยกเว้นในกรณีที่valไม่มีอยู่


16

โปรดทราบว่า typeof คืนค่าสตริงเสมอและจะไม่สร้างข้อผิดพลาดหากตัวแปรไม่มีอยู่เลย

function A(val){
  if(typeof(val)  === "undefined") 
    //do this
  else
   //do this
}

1
สำหรับการเปรียบเทียบสตริงฉันคิดว่าเราต้องใช้===แทน==
Sreeram

@Seram พวกเขาทั้งสองทำการเปรียบเทียบในรูปแบบที่แตกต่างกัน ... นี้จะทำงานได้ดี
RGB

10

ฉันรู้ว่าฉันมาสายเพื่อรับฟังก์ชั่น แต่ jquery มีฟังก์ชั่นบิวด์ในการทำสิ่งนี้

if(jQuery.type(val) === "undefined"){
    //Some code goes here
}

อ้างถึงเอกสาร jquery API ของ jquery.type https://api.jquery.com/jQuery.type/สำหรับสิ่งเดียวกัน


3

คุณสามารถใช้เทคนิคชวเลขเพื่อตรวจสอบว่ามันไม่ได้กำหนดหรือเป็นโมฆะ

 function A(val)
 {
   if(val || "") 
   //do this
 else
 //do this
 }

หวังว่านี่จะช่วยคุณได้



1

เมื่อฉันทดสอบ " typeof obj === undefined" การalert(typeof obj)ส่งคืนobjectแม้ว่า obj จะไม่ได้กำหนด ตั้งแต่ obj เป็นประเภทของการObjectกลับมาของมันไม่ได้Objectundefined

ดังนั้นหลังจากเวลาทำการฉันเลือกเทคนิคด้านล่าง

if(document.getElementById(obj) !== null){
//do...
}else{
//do...
}

ฉันไม่แน่ใจว่าทำไมเทคนิคแรกไม่ทำงาน แต่ฉันทำงานเสร็จโดยใช้สิ่งนี้


0

หากคุณมีชื่อขององค์ประกอบและไม่ใช่ id เราสามารถบรรลุการตรวจสอบไม่ได้กำหนดในองค์ประกอบข้อความทั้งหมด (ตัวอย่าง) ดังต่อไปนี้และกรอกค่าเริ่มต้น 0.0:

var aFieldsCannotBeNull=['ast_chkacc_bwr','ast_savacc_bwr'];
 jQuery.each(aFieldsCannotBeNull,function(nShowIndex,sShowKey) {
   var $_oField = jQuery("input[name='"+sShowKey+"']");
   if($_oField.val().trim().length === 0){
       $_oField.val('0.0')
    }
  })

0

ฉันไม่แน่ใจว่ามันเป็นทางออกที่ดีที่สุด แต่ก็ใช้ได้ดี:

if($someObject['length']!=0){
    //do someting
}

0
function isValue(value, def, is_return) {
    if ( $.type(value) == 'null'
        || $.type(value) == 'undefined'
        || $.trim(value) == ''
        || ($.type(value) == 'number' && !$.isNumeric(value))
        || ($.type(value) == 'array' && value.length == 0)
        || ($.type(value) == 'object' && $.isEmptyObject(value)) ) {
        return ($.type(def) != 'undefined') ? def : false;
    } else {
        return ($.type(is_return) == 'boolean' && is_return === true ? value : true);
    }
}

ลองใช้ตัวตรวจสอบชนิดทั้งหมด


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.