Có sự khác biệt nào giữaCách tốt nhất để so sánh giá trị với 'không xác định' là gì?
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
Chúng tôi nên sử dụng cái nào?
Có sự khác biệt nào giữaCách tốt nhất để so sánh giá trị với 'không xác định' là gì?
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
Chúng tôi nên sử dụng cái nào?
Trớ trêu thay, undefined
có thể được định nghĩa lại trong JavaScript, không phải là bất cứ ai đầu óc bình thường sẽ làm điều đó, ví dụ:
undefined = "LOL!";
tại thời điểm đó tất cả các kiểm tra bình đẳng tương lai chống lại undefined
sẽ năng suất kết quả bất ngờ!
Đối với chênh lệch giữa ==
và ===
(các nhà khai thác bình đẳng), == sẽ cố gắng ép buộc các giá trị từ loại này sang loại khác, trong tiếng Anh có nghĩa là 0 == "0"
sẽ đánh giá đúng sự thật mặc dù các loại khác nhau (Số vs Chuỗi) - nhà phát triển có xu hướng tránh loại bình đẳng lỏng lẻo này vì nó có thể dẫn đến khó khăn để gỡ lỗi trong mã của bạn.
Kết quả là nó an toàn nhất để sử dụng:
"undefined" === typeof a
Khi kiểm tra cho undefinedness :)
({tries undefined = true}) Ai trong họ ... tại sao ... AAHG! TẠI SAO S W MỘT NGƯỜI? Đó là một thất bại thực sự của EcmaScript. Tôi chưa bao giờ nghĩ đến việc đó. – cwallenpoole
Theo ví dụ của tôi, 'cho teh lolz!' Việc lặp lại tiếp theo của EcmaScript (tên mã Harmony) sẽ bao gồm hỗ trợ cho các hằng số, mà chỉ có thể là một điều tốt cho sự tỉnh táo của chúng ta;) http://wiki.ecmascript.org/doku.php?id=harmony%3aconst – JonnyReeves
nó là liên kết cho phần đầu tiên của câu trả lời của bạn: http://stackoverflow.com/questions/2703102/typeof-undefined-vs-null/2703131#2703131 – JohnJohnGa
var a;
(a == undefined) //true
(a === undefined) //true
((typeof a) == "undefined") //true
((typeof a) === "undefined") //true
NHƯNG:
var a;
(a == "undefined") //false
(a === "undefined") //false
((typeof a) == undefined) //false
((typeof a) === undefined) //false
Tất nhiên - câu hỏi là về sự khác biệt không phải là kết quả - – JohnJohnGa
@JohnJohn nếu tất cả đều mang lại cùng một điều không có 'khác biệt'. Nhưng tôi tin rằng đặt cược tốt nhất là lựa chọn thứ 2 của bạn. – Neal
Nếu bạn khai báo var a
, sau đó nó sẽ không được undefined nữa - nó sẽ được null
để thay thế. Tôi thường sử dụng typeof a == undefined
- và nó hoạt động tốt. Điều này đặc biệt hữu ích trong tình huống này:
function myfunc(myvar)
{
if(typeof myvar == "undefined")
{
//the function was called without an argument, simply as myfunc()
}
}
Nếu là undefined, sau đó
a == undefined
sẽ thực sự ném ra một lỗi. Sử dụng
(typeof a) === "undefined"
Thay vào đó.
tại sao điều đó lại có lỗi? – Neal
Gah, bạn nói đúng, tôi đã bỏ lỡ "var a" ở đầu mã OP. –
Cá nhân tôi thích sử dụng
[undefined, null].indexOf(variable) > -1
để kiểm tra cũng cho các giá trị null.
Bạn nên sử dụng nêu trên:
"undefined" === typeof a
Nhưng nếu bạn có rất nhiều biến để kiểm tra, mã của bạn có thể nhận được xấu xí tại một số điểm, vì vậy bạn có thể xem xét để sử dụng phương pháp của Java:
try { vvv=xxx; zzz=yyyy; mmm=nnn; ooo=ppp; }
catch(err){ alert(err.message); }
Rõ ràng cảnh báo() không nên được sử dụng trong phiên bản sản xuất, nhưng trong phiên bản gỡ lỗi, nó rất hữu ích. Nó sẽ làm việc ngay cả trong các trình duyệt cũ như IE 6:
https://msdn.microsoft.com/library/4yahc5d8%28v=vs.94%29.aspx
http://stackoverflow.com/q/2703102/469210 dường như có liên quan đến vấn đề này. – borrible
có thể trùng lặp của [Javascript: undefined! == undefined?] (Http://stackoverflow.com/questions/776950/javascript-undefined-undefined) –