Toán tử void đánh giá một biểu thức và trả về giá trị nguyên thủy không xác định. void 0 đánh giá 0, không làm gì cả, rồi trả về undefined. Nó thực sự là một bí danh cho undefined
Tại sao void 0 được sử dụng làm bí danh cho không xác định?
Một trong những điều kỳ quặc của JavaScript là undefined không phải là từ khóa dành riêng. Thay vào đó, nó là một thuộc tính của đối tượng toàn cầu
Trước ES5 (2009), có thể sửa đổi thuộc tính chung của undefined, điều này có thể dẫn đến hành vi không mong muốn cho undefined
Xem xét ví dụ sau (không hoạt động trong các công cụ JavaScript hiện đại)
// Pre-ES5 example - does not work in modern JS engines: // changes property 'undefined' on the global object: undefined = "something else"; // potentially in some other JavaScript file or script section: if (aVariable === undefined) { // aVariable is equal to "something else", // but not to the primitive value 'undefined' doSomething(); }Việc sửa đổi toàn cầu undefined thậm chí có thể xảy ra trong mã của bên thứ 3, e. g. , các thư viện được nhập qua thẻ script. Vì void 0 luôn trả về giá trị nguyên thủy thực tế undefined, nên nó thường được sử dụng trước ES5 để làm cho mã không an toàn đối với việc định nghĩa lại thuộc tính toàn cầu undefined
Thuộc tính toàn cầu 'không xác định' sau ES5
Vấn đề mà undefined có thể được sửa đổi trên đối tượng toàn cầu lớn đến mức tiêu chuẩn JavaScript đã bị thay đổi. Với ES5, thuộc tính toàn cầu undefined trở thành chỉ đọc. Cố gắng thay đổi giá trị không làm gì trong JavaScript hiện đại
globalThis.undefined = "something else"; console.log(undefined); // prints undefined in modern JS environmentsKhông xác định vẫn có thể bị che khuất bởi một biến cục bộ
Tuy nhiên, trong khi việc thay đổi thuộc tính chung của undefined không còn khả thi, thì undefined vẫn không phải là từ khóa dành riêng trong JavaScript. Do đó, nó vẫn có thể bị che khuất bởi một biến cục bộ
const undefined = "something else"; let check = aVariable === void 0; // void 0 is needed hereCó một biến cục bộ với tên undefined là một cạm bẫy mà bạn muốn tránh. Quy tắc ESLint không xác định không xác định không cho phép sử dụng không xác định làm tên biến và ngăn chặn các vấn đề về đổ bóng
Khoảng trống 0 có thể giúp giảm kích thước gói không?
Biểu thức void 0 ngắn hơn undefined. Kích thước gói JavaScript rất cần thiết để tạo các trang web tải nhanh và việc loại bỏ một vài byte có thể hữu ích
Tuy nhiên, tốt nhất là để việc tối ưu hóa kích thước mã cơ bản cho các công cụ khai thác như Terser như một phần của quy trình gói sản phẩm. Họ có thể thực hiện nhiều tối ưu hóa khác nhau và mã nguồn vẫn dễ đọc hơn mà không cần bất kỳ tối ưu hóa kích thước mã thủ công nào như sử dụng void 0 thay vì undefined
Tránh void 0 trong JavaScript hiện đại
Tóm lại, trong các trình duyệt và công cụ JavaScript hiện đại, không còn lý do gì để sử dụng void 0 nữa
- không thể thay đổi thuộc tính toàn cầu undefined trong ES5 và các môi trường mới hơn
- các biến cục bộ có tên undefined có thể không được phép với quy tắc ESLint no-undefined
- công cụ khai thác có thể thay thế undefined bằng void 0 khi tạo gói sản xuất
Ngược lại, void 0 làm cho mã JavaSCript khó đọc và khó hiểu hơn vì bạn cần biết ý nghĩa của void 0 và xử lý các thuật ngữ khác nhau (void 0, undefined) cho cùng một khái niệm (undefined)
Biến không xác định hoặc bất kỳ thứ gì không có giá trị sẽ luôn trả về "không xác định" trong JavaScript. Điều này không giống như null, mặc dù thực tế là cả hai đều ngụ ý trạng thái trống rỗng
Thông thường, bạn sẽ gán một giá trị cho một biến sau khi bạn khai báo nó, nhưng điều này không phải lúc nào cũng đúng
Khi một biến được khai báo hoặc khởi tạo nhưng không có giá trị nào được gán cho nó, JavaScript sẽ tự động hiển thị "không xác định". Nó trông như thế này
let myStr; console.log(myStr); // undefinedNgoài ra, khi bạn thử truy cập các giá trị, chẳng hạn như trong một mảng hoặc đối tượng không tồn tại, nó sẽ ném ra let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2
let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefinedĐây là một ví dụ khác
let myArr = [12, 33, 44]; console.log(myArr[7]); // undefinedTrong bài viết này, bạn sẽ tìm hiểu các phương pháp và cách tiếp cận khác nhau mà bạn có thể sử dụng để biết liệu một biến có phải là let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2 trong JavaScript hay không. Điều này là cần thiết nếu bạn muốn tránh các lỗi ném mã khi thực hiện thao tác với một biến không xác định
Trong trường hợp bạn đang vội, đây là ba phương pháp tiêu chuẩn có thể giúp bạn kiểm tra xem một biến có phải là let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2 trong JavaScript hay không
if(myStr === undefined){} if(typeof myArr[7] === "undefined"){} if(user.hobby === void 0){}Bây giờ hãy giải thích chi tiết hơn về từng phương pháp này
Cách kiểm tra xem một biến có phải là không xác định trong JavaScript với So sánh trực tiếp hay không
Một trong những phương pháp đầu tiên xuất hiện trong đầu là so sánh trực tiếp. Đây là nơi bạn so sánh đầu ra để xem nó có trả về let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2 không. Bạn có thể dễ dàng làm điều này theo cách sau
let user = { name: "John Doe", age: 14 }; if (user.hobby === undefined) { console.log("This is undefined"); }Điều này cũng hoạt động cho các mảng như bạn có thể thấy bên dưới
let scores = [12, 34, 66, 78]; if (scores[10] === undefined) { console.log("This is undefined"); }Và nó chắc chắn cũng hoạt động cho các biến khác
let name; if (name === undefined) { console.log("This is undefined"); }Cách kiểm tra xem một biến có phải là không xác định trong JavaScript với let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 6
Chúng ta cũng có thể sử dụng loại biến để kiểm tra xem nó có phải là let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2 không. May mắn cho chúng tôi, undefined là một kiểu dữ liệu cho một giá trị không xác định như bạn có thể thấy bên dưới.
let name; console.log(typeof name); // "undefined"Với điều này, giờ đây chúng ta có thể sử dụng kiểu dữ liệu để kiểm tra undefined cho tất cả các loại dữ liệu như chúng ta đã thấy ở trên. Đây là cách kiểm tra sẽ như thế nào đối với cả ba tình huống chúng tôi đã xem xét
if(typeof user.hobby === "undefined"){} if(typeof scores[10] === "undefined"){} if(typeof name === "undefined"){}Cách kiểm tra xem một biến có phải là không xác định trong JavaScript với Toán tử let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 8 hay không
Toán tử let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 9 thường được sử dụng để lấy giá trị nguyên hàm let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 2. Bạn có thể làm điều này bằng cách sử dụng "let myArr = [12, 33, 44]; console.log(myArr[7]); // undefined 1" tương tự như "let myArr = [12, 33, 44]; console.log(myArr[7]); // undefined 2" như bạn có thể thấy bên dưới
console.log(void 0); // undefined console.log(void(0)); // undefinedTheo nghĩa thực tế, điều này hoạt động giống như so sánh trực tiếp (mà chúng ta đã thấy trước đây). Nhưng chúng tôi sẽ thay thế undefined bằng let myArr = [12, 33, 44]; console.log(myArr[7]); // undefined 1 hoặc let myArr = [12, 33, 44]; console.log(myArr[7]); // undefined 2 như bên dưới
let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 0Hoặc như thế này
let user = { name: "John Doe", age: 14 }; console.log(user.hobby); // undefined 1Phần kết luận
Trong bài viết này, chúng ta đã học cách kiểm tra xem một biến có phải là không xác định hay không và nguyên nhân khiến một biến không được xác định
Chúng tôi cũng đã học được ba phương pháp mà chúng tôi có thể sử dụng để kiểm tra xem một biến có phải là không xác định hay không. Tất cả các phương pháp hoạt động hoàn hảo. Lựa chọn phương pháp ưa thích của bạn là hoàn toàn tùy thuộc vào bạn
Chúc các bạn code vui vẻ
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Nhà phát triển Frontend & Người viết kỹ thuật
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu