Tôi muốn kiểm tra xem biến có được xác định hay không. Ví dụ, sau đây ném một lỗi không xác định
alert( x );
Làm thế nào tôi có thể bắt lỗi này?
Tôi muốn kiểm tra xem biến có được xác định hay không. Ví dụ, sau đây ném một lỗi không xác định
alert( x );
Làm thế nào tôi có thể bắt lỗi này?
Câu trả lời:
Trong JavaScript, null
là một đối tượng. Có một giá trị khác cho những thứ không tồn tại , undefined
. DOM trả về null
cho hầu hết các trường hợp không tìm thấy cấu trúc nào đó trong tài liệu, nhưng trong chính JavaScript undefined
là giá trị được sử dụng.
Thứ hai, không, không có tương đương trực tiếp. Nếu bạn thực sự muốn kiểm tra cụ thể null
, hãy làm:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Nếu bạn muốn kiểm tra xem một biến có tồn tại hay không, điều đó chỉ có thể được thực hiện với try
/ catch
, vì typeof
sẽ xử lý một biến không được khai báo và một biến được khai báo với giá trị undefined
là tương đương.
Nhưng, để kiểm tra xem một biến có được khai báo hay không undefined
:
if (yourvar !== undefined) // Any scope
Trước đây, cần phải sử dụng typeof
toán tử để kiểm tra không xác định một cách an toàn, bởi vì có thể gán lại undefined
giống như một biến. Cách cũ trông như thế này:
if (typeof yourvar !== 'undefined') // Any scope
Vấn đề về undefined
việc có thể gán lại đã được khắc phục trong ECMAScript 5, được phát hành vào năm 2009. Bây giờ bạn có thể sử dụng một cách an toàn ===
và !==
kiểm tra undefined
mà không sử dụng typeof
như undefined
đã được đọc trong một thời gian.
Nếu bạn muốn biết liệu một thành viên tồn tại độc lập nhưng đừng quan tâm giá trị của nó là gì:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Nếu bạn muốn biết liệu một biến có trung thực hay không :
if (yourvar)
typeof
toán tử ( typeof null == 'object'
). Các null
giá trị là một giá trị nguyên thủy , mà là giá trị duy nhất của loại Null .
Cách duy nhất để thực sự kiểm tra nếu một biến là undefined
làm như sau. Hãy nhớ rằng, không xác định là một đối tượng trong JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Một số giải pháp khác trong luồng này sẽ khiến bạn tin rằng một biến không được xác định ngay cả khi nó đã được xác định (ví dụ với giá trị NULL hoặc 0).
ReferenceError
.
undefined
là một đối tượng trong javascript là thông tin sai. Câu nói này có liên quan đến câu trả lời của bạn không? Nó là một giá trị undefined
của loại undefined
, được gán cho định danh toàn cầu có tên undefined
.
undefined
đã được đọc từ ES5. Bạn có thể kiểm tra một cách an toàn cho việc không xác định bằng cách sử dụng if (x === undefined) {...}
hoặc sử dụng tốc ký như thế này : if (x === void 0)
.
Về mặt kỹ thuật, giải pháp thích hợp là (tôi tin):
typeof x === "undefined"
Đôi khi bạn có thể lười biếng và sử dụng
x == null
nhưng điều đó cho phép cả biến x không xác định và biến x chứa null, trả về true.
var x;
và sau đó typeof x;
bạn sẽ nhận được "undefined"
giống như bạn đã làmtypeof lakjdflkdsjflsj;
Một phiên bản thậm chí dễ dàng hơn và tốc ký hơn sẽ là:
if (!x) {
//Undefined
}
HOẶC LÀ
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Tôi thường làm:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Bạn cũng có thể sử dụng toán tử điều kiện ternary:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Bạn nên kiểm tra xem nếu a===undefined
thay vào đó
var x;
làm ở trên sẽ gây ra lỗi
!a
kiểm tra cho đúng undefined
, nó cũng kiểm tra đúng đối 0
và null
và false
. Điều này là rất không chính xác và cần được loại bỏ.
Tôi thường sử dụng cách đơn giản nhất:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
BIÊN TẬP:
Nếu không khởi tạo biến, ngoại lệ sẽ được ném "Uncaught ReferenceError: biến không được xác định ..."
Uncaught ReferenceError: variable is not defined
variable
được định nghĩa bởi var variable;
. Và đoạn mã này sẽ ghi đè variable
trong phạm vi địa phương. Nó có thể phá vỡ logic mà dự kiến sẽ truy cập vào một đóng hoặc biến toàn cục. Tức là:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Một "giải pháp" tiềm năng khác là sử dụng window
đối tượng. Nó tránh được vấn đề lỗi tham chiếu khi ở trong trình duyệt.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Điều này sẽ không làm điều đó.
Lỗi là nói với bạn rằng x
thậm chí không tồn tại! Nó chưa được khai báo , khác với việc được gán một giá trị.
var x; // declaration
x = 2; // assignment
Nếu bạn khai báo x
, bạn sẽ không gặp lỗi. Bạn sẽ nhận được một cảnh báo cho biết undefined
vì x
tồn tại / đã được khai báo nhưng chưa được gán một giá trị.
Để kiểm tra xem biến đã được khai báo chưa, bạn có thể sử dụng typeof
, bất kỳ phương pháp kiểm tra nào khác nếu một biến tồn tại sẽ đưa ra cùng một lỗi mà bạn gặp phải ban đầu.
if(typeof x !== "undefined") {
alert(x);
}
Đây là kiểm tra loại giá trị được lưu trữ trong x
. Nó sẽ chỉ trở lại undefined
khi x
chưa được khai báo HOẶC nếu nó đã được khai báo và chưa được chỉ định.
typeof
toán tử nữa.
Các void
lợi nhuận điều hành undefined
cho bất kỳ tranh luận / biểu được truyền cho nó. vì vậy bạn có thể kiểm tra lại kết quả (trên thực tế một số minifiers thay đổi mã của bạn từ undefined
để void 0
tiết kiệm một vài ký tự)
Ví dụ:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
và suy nghĩ undefined
có thể được chỉ định lại, điều này đã không thể thực hiện được trong khoảng một thập kỷ.
undefined
, vì Chúa chỉ biết lý do gì, sử dụng void 0
sẽ luôn quay trở lại undefined
bất kể.
Câu trả lời được chấp nhận là chính xác. Chỉ muốn thêm một lựa chọn. Bạn cũng có thể sử dụng try ... catch
khối để xử lý tình huống này. Một ví dụ quái đản:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
Hãy nhận biết catch
khối, một chút lộn xộn, vì nó tạo ra một phạm vi cấp khối. Và, tất nhiên, ví dụ cực kỳ đơn giản để trả lời câu hỏi được hỏi, nó không bao gồm các thực tiễn tốt nhất trong xử lý lỗi;).
Tôi sử dụng một hàm nhỏ để xác minh một biến đã được khai báo, điều này thực sự cắt giảm lượng lộn xộn trong các tệp javascript của tôi. Tôi thêm một kiểm tra cho giá trị để đảm bảo rằng biến không chỉ tồn tại mà còn được gán một giá trị. Điều kiện thứ hai kiểm tra xem biến đó có được khởi tạo hay không, bởi vì nếu biến đã được xác định nhưng không được khởi tạo (xem ví dụ bên dưới), nó vẫn sẽ báo lỗi nếu bạn cố tham chiếu giá trị của nó trong mã của mình.
Không được khởi tạo - var my_variable;
Khởi tạo -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Sau đó, bạn có thể sử dụng một câu lệnh có điều kiện để kiểm tra xem biến đó đã được xác định VÀ khởi tạo như thế này chưa ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
hoặc để kiểm tra rằng nó chưa được xác định và sử dụng ngay lập tức ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"