2009-12-14 25 views
9

Đây là một chức năng thực sự tuyệt vời viết bằng jQuery để xác định giá trị của một trường url:Javascript IsNull

$.urlParam = function(name){ 
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); 
    return results[1] || 0; 
} 

// example.com?someparam=name&otherparam=8&id=6 
$.urlParam('someparam'); // name 
$.urlParam('id'); // 6 
$.urlParam('notavar'); // null 

http://snipplr.com/view/11583/retrieve-url-params-with-jquery/

Tôi muốn nói thêm một điều kiện để kiểm tra null, nhưng điều này ngoại hình loại klunky:

if (results == null) { 
    return 0; 
} else { 
    return results[1] || 0; 
} 

Q: Cách thanh lịch để hoàn thành câu lệnh if/then ở trên là gì?

+0

lol, mảnh chính xác mã tôi đã sắp đặt câu hỏi chính xác trên.3yrs sau – sMaN

+0

Thử nghiệm cho 'kết quả [1]' sẽ là không cần thiết, vì nếu 'kết quả' là không null, nó có nghĩa là regexp đã thành công, có nghĩa là nhóm được chụp đầu tiên cũng được tìm thấy. Vì vậy, tất cả những gì bạn cần là 'kết quả? kết quả [1]: 0'. –

Trả lời

21
return results == null ? 0 : (results[1] || 0); 
+0

@Brad (kết quả [1] || 0) là gì? Tôi chưa từng thấy điều đó trước đây. – imperium2335

+0

Đối tượng của nó ở vị trí chỉ số 1 trong 'kết quả' hoặc giá trị 0. – Brad

+0

Brad, hãy thử sử dụng '.test()' là tốt nhất – KingRider

10
return results == null ? 0 : (results[1] || 0); 
+0

không đúng: || thỏa thuận với giá trị tại kết quả [1] – Frunsi

+0

@DDaviesBrackett: không: js> results = null; null js> kết quả [1] || 0; typein: 2: TypeError: kết quả không có thuộc tính –

+0

Vâng, có vẻ như bạn đã trả lời trước, vì vậy bạn đang nhận được upvote của tôi. –

1
if (typeof(results)!='undefined'){ 
    return results[1]; 
} else { 
    return 0; 
}; 

Nhưng bạn có thể muốn kiểm tra nếu kết quả là một mảng. Mảng là kiểu Object, do đó bạn sẽ cần điều này function

function typeOf(value) { 
    var s = typeof value; 
    if (s === 'object') { 
     if (value) { 
      if (value instanceof Array) { 
       s = 'array'; 
      } 
     } else { 
      s = 'null'; 
     } 
    } 
    return s; 
} 

Vì vậy, mã của bạn trở nên

if (typeOf(results)==='array'){ 
     return results[1]; 
} 
else 
{ 
     return 0; 
} 
1
return results==null ? 0 : (results[1] || 0); 
+0

Bạn vừa viết lại mã do OP cung cấp để sử dụng toán tử bậc ba thay vì ' if'. –

2

Bạn có thể thử này:

if(typeof(results) == "undefined") { 
    return 0; 
} else { 
    return results[1] || 0; 
} 
3

sự ngắn gọn nhất giải pháp sẽ thay đổi return results[1] || 0; đến return (results && results[1]) || 0.

+0

Tôi nhận được lỗi "kết quả là null" trong firebug nếu tôi trả lại kết quả [1] || 0 –

+0

Điều gì && làm gì? Bạn có thể giải thích dòng mã này được không? –

+0

Không cần các parens, đó là ưu tiên mặc định, vì vậy 'results && results [1] || 0'. –

1
return (results||0) && results[1] || 0; 

Các & & hành vi hành như bảo vệ và trả về 0 nếu kết quả nếu falsy và trả lại phần ngoài cùng bên phải nếu truthy.

1

Tất cả các giải pháp được đề cập là legit nhưng nếu chúng ta đang nói về sự thanh lịch sau đó tôi sẽ pitch ở với ví dụ sau:

//function that checks if an object is null 
var isNull = function(obj) { 
    return obj == null; 
}    

if(isNull(results)){ 
return 0; 
} else { 
    return results[1] || 0; 
} 

Sử dụng chức năng IsNull giúp mã dễ đọc hơn.

1

Tôi thích phong cách

(results || [, 0]) [1] 
+0

Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. – sanders

+1

Nó thực sự cung cấp một câu trả lời rõ ràng cho câu hỏi. Nó không phải là một phê phán hay yêu cầu làm rõ. Trong ý nghĩa nào đó không phải là câu trả lời? Đó là một cấu trúc tôi sử dụng tất cả thời gian để giải quyết câu hỏi chính xác được hỏi bởi OP, đó là cách xử lý chính xác với một kết quả 'null' từ' RegExp # exec'. –

+0

Tôi thích câu trả lời này là tốt nhất bởi vì tôi không thể tìm cách giải thích sai nó VÀ quan trọng là câu trả lời mặc định (0) được chỉ định một lần. Nhiều lỗi mã hóa được giới thiệu khi một số ma thuật cụ thể xuất hiện ở nhiều nơi. –

0

Bạn cũng có thể sử dụng toán tử không. Nó sẽ kiểm tra nếu một biến là null, hoặc, trong trường hợp của một chuỗi, là rỗng. Nó làm cho mã của bạn nhỏ gọn hơn và dễ đọc hơn.

Ví dụ:

var pass = ""; 
if(!pass) 
    return false; 
else 
    return true; 

này sẽ trả về false vì chuỗi rỗng. Nó cũng sẽ trả về false nếu pass biến là null.

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