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, nulllà 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ề nullcho 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 undefinedlà 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ì typeofsẽ 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ị undefinedlà 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 typeoftoá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 undefinedgiống như một biến. Cách cũ trông như thế này:
if (typeof yourvar !== 'undefined') // Any scope
Vấn đề về undefinedviệ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 undefinedmà không sử dụng typeofnhư 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)
typeoftoán tử ( typeof null == 'object'). Các nullgiá 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à undefinedlà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.
undefinedlà 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ị undefinedcủ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===undefinedthay vào đó
var x; làm ở trên sẽ gây ra lỗi
!akiểm tra cho đúng undefined, nó cũng kiểm tra đúng đối 0và nullvà 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 đè variabletrong 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 xthậ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 undefinedvì xtồ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 undefinedkhi xchưa được khai báo HOẶC nếu nó đã được khai báo và chưa được chỉ định.
typeoftoán tử nữa.
Các voidlợi nhuận điều hành undefinedcho 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 0tiết kiệm một vài ký tự)
Ví dụ:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeofvà suy nghĩ undefinedcó 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 0sẽ luôn quay trở lại undefinedbấ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 ... catchkhố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 catchkhố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"