2010-11-20 41 views
58

Có điều gì đó trong javascript/jQuery để kiểm tra xem biến có được đặt/có sẵn hay không? Trong php, chúng tôi sử dụng isset($variable) để kiểm tra một cái gì đó như thế này.là có cái gì đó giống như isset của php trong javascript/jQuery?

cảm ơn.

+1

làm bạn có nghĩa là kiểm tra null hoặc séc sẵn dom ... – kobe

+0

những gì hiện ?? isset does..in php, tôi không biết đó là lý do tại sao tôi yêu cầu – kobe

+0

@gov isset - Xác định xem một biến được đặt và không phải là NULL - http://php.net/manual/en/function.isset.php –

Trả lời

114

Hãy thử biểu thức này:

typeof(variable) != "undefined" && variable !== null 

Đây sẽ là true nếu biến được định nghĩa và không phải null, đó là tương đương với cách isset PHP công trinh.

Bạn có thể sử dụng nó như thế này:

if(typeof(variable) != "undefined" && variable !== null) { 
    bla(); 
} 
+0

Tôi nghĩ bạn có nghĩa là '&& variable! == null'. – PleaseStand

+0

Không, tôi hoàn toàn có nghĩa là &&. Biến có thể được xác định và vẫn còn null. Bạn là chính xác về việc kiểm tra loại nghiêm ngặt mặc dù vì vậy tôi sẽ thêm rằng để trả lời của tôi, cảm ơn. –

+0

Tôi đã thử một lần nữa lựa chọn thay thế thứ hai của bạn. Nó không hoạt động vì cố gắng gọi hàm isset() với một đối số không xác định đã ném một ngoại lệ trong FF4. Tùy chọn đầu tiên làm việc cho tôi. Cảm ơn. –

2

Không một cách tự nhiên, không ... Tuy nhiên, một googling trong những điều đã cho điều này: http://phpjs.org/functions/isset:454

+0

+1. Tốc độ là tất cả mọi thứ trong Js ... –

2

http://phpjs.org/functions/isset:454

phpjs dự án là một nguồn đáng tin cậy. Rất nhiều hàm js tương đương có sẵn ở đó. Tôi đã sử dụng từ lâu rồi và không tìm thấy vấn đề gì cho đến nay.

3

typeof sẽ phục vụ mục đích này tôi nghĩ

if(typeof foo != "undefined"){} 
+0

Lưu ý, tuy nhiên, rằng 'typeof null == 'object'' - chỉ là một trong số các quirks của JavaScript. – PleaseStand

3

Nếu bạn muốn kiểm tra nếu một tài sản tồn tại: hasOwnProperty là con đường để đi

Và vì hầu hết các đối tượng là tài sản của một số đối tượng khác (cuối cùng dẫn đến đối tượng window) điều này có thể hoạt động tốt để kiểm tra xem các giá trị có được khai báo hay không.

+1

Thông minh, nhưng chỉ hữu ích nếu bạn biết bạn đang làm việc với đối tượng nào. –

8

JavaScript isset() on PHP JS

function isset() { 
    // discuss at: http://phpjs.org/functions/isset 
    // + original by: Kevin van  Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: FremyCompany 
    // + improved by: Onno Marsman 
    // + improved by: Rafał Kukawski 
    // *  example 1: isset(undefined, true); 
    // *  returns 1: false 
    // *  example 2: isset('Kevin van Zonneveld'); 
    // *  returns 2: true 
    var a = arguments, 
     l = a.length, 
     i = 0, 
     undef; 

    if (l === 0) { 
     throw new Error('Empty isset'); 
    } 

    while (i !== l) { 
     if (a[i] === undef || a[i] === null) { 
      return false; 
     } 
     i++; 
    } 
    return true; 
} 
+0

không hoạt động dazzafact

+1

Giải pháp này làm việc cho nhiều người. Có lẽ, bạn đã phạm sai lầm. Vui lòng cung cấp thêm chi tiết về vấn đề của bạn, ví dụ: đầu ra console hoặc cái gì khác. – Oleg

1

Vấn đề là đi qua một biến không xác định đến một chức năng gây ra một lỗi.

Điều này có nghĩa là bạn phải chạy typeof trước khi chuyển nó làm đối số.

Cách sạch nhất mà tôi tìm thấy để làm điều này là như vậy:

function isset(v){ 
    if(v === 'undefined'){ 
     return false; 
    } 
    return true; 
} 

Cách sử dụng:

if(isset(typeof(varname))){ 
    alert('is set'); 
} else { 
    alert('not set'); 
} 

Bây giờ đang nhiều hơn nữa nhỏ gọn và dễ đọc.

này vẫn sẽ đưa ra một lỗi nếu bạn cố gắng gọi một biến từ một biến không khởi tạo như:

isset(typeof(undefVar.subkey)) 

do đó trước khi cố gắng chạy này, bạn cần phải chắc chắn đối tượng được định nghĩa:

undefVar = isset(typeof(undefVar))?undefVar:{}; 
+1

Nếu bạn lười biếng như tôi và bạn đang sử dụng một IDE thích hợp như netbeans. Chỉ cần thêm một cái gì đó như thế này vào mẫu mã của bạn: (viết tắt: isset) isset (typeof ($ {cursor})). Những thứ nhỏ như thế này có thể giúp bạn tiết kiệm rất nhiều thời gian. –

+1

Một phím tắt netbeans khác: (viết tắt: set) $ {variable} = isset (typeof ($ {variable}))? $ {Variable}: {}; –

-1

Bạn có thể chỉ:

if(variable||variable===0){ 
    //Yes it is set 
    //do something 
} 
else { 
    //No it is not set 
    //Or its null 
    //do something else 
} 
+1

nếu nó là 0 – niklas

+0

@ user9 nếu 0 nó sẽ chuyển sang khác vì 0 bằng false – a1204773

+0

và đó có thể là hành vi không mong muốn và không tương tự với isset – niklas

0

đây :)

function isSet(iVal){ 
return (iVal!=="" && iVal!=null && iVal!==undefined && typeof(iVal) != "undefined") ? 1 : 0; 
} // Returns 1 if set, 0 false 
+3

Bạn có thể muốn thêm chi tiết bổ sung tại sao điều này sẽ giúp OP. – Zane

+0

có, vui lòng thêm một số giải thích về mã của bạn, cách giải quyết vấn đề và những gì OP bị thiếu hoặc làm sai. Điều này sẽ giúp những người khác trong tương lai –

0

ngoài @-vikström emil 's câu trả lời, kiểm tra variable!=null sẽ là đúng đối với variable!==null cũng như cho variable!==undefined (hoặc typeof(variable)!="undefined").

0

Một số phần của mỗi câu trả lời này hoạt động. Tôi đã biên dịch tất cả chúng thành một hàm "isset" giống như câu hỏi được hỏi và hoạt động giống như trong PHP.

// isset helper function 
var isset = function(variable){ 
    return typeof(variable) !== "undefined" && variable !== null && variable !== ''; 
} 

Đây là một ví dụ sử dụng như thế nào để sử dụng nó:

var example = 'this is an example'; 
if(isset(example)){ 
    console.log('the example variable has a value set'); 
} 

Nó phụ thuộc vào các tình huống mà bạn cần nó cho nhưng hãy để tôi phá vỡ những gì từng phần:

  1. typeof(variable) !== "undefined" kiểm tra xem biến có được xác định ở tất cả
  2. variable !== null kiểm tra xem biến có null hay không (một số người đặt rõ ràng là không và không nghĩ rằng nếu nó được đặt thành rỗng là đúng, trong trường hợp đó, hãy xóa phần này)
  3. variable !== '' kiểm tra xem biến có được đặt thành chuỗi rỗng, bạn có thể loại bỏ điều này nếu đếm chuỗi rỗng như quy định đối với trường hợp sử dụng của bạn

Hy vọng điều này sẽ giúp người :)

Các vấn đề liên quan