Kiểm tra biến tồn tại trong javascript
Xử lý kiểu dữ liệu là một nhiệm vụ phổ biến trong bất kỳ ngôn ngữ lập trình nào, dù là kiểu động hay kiểu tĩnh, kiểu mạnh hay kiểu yếu,… JavaScript cũng không ngoại lệ. Bạn đã bao giờ cần kiểm tra kiểu dữ liệu trong JavaScript chưa? Bạn đã bao giờ phải nhức đầu vì kiểu dữ liệu trong JavaScript khi không thể biết nó đang là cái gì. Trong bài viết này, chúng ta sẽ xem đi qua một số cách kiểm tra kiểu dữ liệu trong JavaScript. Bắt đầu nào! >> Xem ngay Tài liệu Java Core giúp bạn “Nâng Cấp” kỹ năng lập trình Kiểu dữ liệu trong JavaScriptTrước tiên, hãy thảo luận ngắn gọn về khái niệm kiểu dữ liệu, hoặc ít nhất là ý nghĩa kiểu dữ liệu trong bài viết này và trong ngữ cảnh là ngôn ngữ JavaScript. Mặc dù khái niệm này về mặt lịch sử là một trong những chủ đề được tranh luận nhiều nhất trong lập trình, nhưng cách giải thích về kiểu dữ liệu ở đây là cực kỳ thực tế và phi học thuật. Trong bài viết này, những thứ như Object, Array, Function, Number, NaN và những thứ khác sẽ được coi là các kiểu riêng biệt. StringCác chuỗi là các giá trị nguyên thủy và việc kiểm tra chúng thực sự đơn giản. Bạn chỉ cần sử dụng toán tử typeof:
Thật đơn giản phải không? Tuy nhiên, có một trường hợp đặc biệt mà biểu thức này sẽ trả về là false: nếu chuỗi được khởi tạo bằng cách sử dụng trực tiếp hàm tạo chuỗi.
Tất nhiên, việc này chẳng phổ biến và không bao giờ được khuyến khích. Nếu bạn cần tạo một chuỗi, hãy luôn ưu tiên cú pháp theo nghĩa đen. Tuy nhiên, nếu vì lý do nào đó, bạn cần đảm bảo rằng một giá trị đã cho là một chuỗi, có thể là nguyên thủy hoặc một đối tượng, bạn có thể kết hợp toán tử instanceof và typeof:
Null và undefinedTrong JavaScript, null và undefined thường bị nhầm lẫn với nhau. Nói một cách đơn giản, undefined là giá trị mặc định cho các biến chưa được khởi tạo và null luôn được đặt rõ ràng thành một biến. Nếu bạn sử dụng toán tử typeof để kiểm tra cả hai, đây là những gì bạn nhận được:
Chà, chúng ta đã nhận ‘undefined’ cho undefined. Điều đó có ý nghĩa. Tuy nhiên, JavaScript đã cho chúng ta “object” cho null. Đây không phải là do thiết kế, mà là một lỗi lâu rồi, có từ khi triển khai ngôn ngữ gốc. Lỗi này chưa bao giờ được sửa, vì một phần đáng kể của cơ sở mã JavaScript hiện tại (rất lớn) sẽ bị hỏng nếu typeof null đột nhiên thay đổi thành “null”. Để kiểm tra null hoặc undefined, bạn chỉ có thể sử dụng toán tử bình đẳng nghiêm ngặt (===):
Nếu bạn muốn kiểm tra xem một biến là null hay undefined, tất nhiên, bạn có thể kết hợp hai cách ở trên (a === undefined || a === null). Tuy nhiên, có một cách ngắn gọn hơn để làm như vậy, bằng cách sử dụng toán tử bình đẳng trừu tượng (==):
Biểu thức trên trả về là true chỉ khi a là null hoặc undefined. Một số người cố gắng tìm ra logic đằng sau hành vi này, lập luận rằng vì null và undefined là các giá trị sai, cả hai sẽ bằng nhau nếu được so sánh với toán tử bình đẳng trừu tượng. Điều này không có ý nghĩa, vì các giá trị sai khác như 0, “” (chuỗi trống) hoặc NaN, khi được so sánh với null hoặc không xác định, sẽ không dẫn đến bằng nhau.
Thực tế là không có logic thực sự đằng sau điều này. Nó chỉ xảy ra bởi vì đặc tả ECMAScript nói như vậy (chỉ cần kiểm tra phần thứ hai và thứ ba của phần 11.9.3). ArrayMảng là các đối tượng. Nếu bạn cố gắng sử dụng toán tử typeof đối với một mảng, kết quả là bạn sẽ nhận được “object”. Cách đúng để kiểm tra xem một biến có phải là một mảng hay không là sử dụng phương thức tĩnh Array.isArray() (IE9+):
FunctionHàm cũng là đối tượng. Tuy nhiên, khác với mảng, có thể kiểm tra các hàm bằng cách sử dụng toán tử typeof:
ObjectĐể kiểm tra xem một biến có phải là một đối tượng hay không, bạn có thể so sánh nó với đối tượng tương đương của nó. Nếu cả hai đều bằng nhau, điều đó có nghĩa là biến của bạn đã là một đối tượng. Trả về true cho bất kỳ loại đối tượng nào, bao gồm các mảng và hàm:
Number và BooleanNumber và Boolean thực sự tương tự như Strings về cách kiểm tra. Hầu hết thời gian, bạn chỉ cần sử dụng typeof: 0 Tuy nhiên, trong trường hợp bạn cần kiểm tra các đối tượng wrapper và các giá trị nguyên thủy, bạn có thể kết hợp typeof và instanceof: 1 NaN, Infinity và -InfinityNếu bạn sử dụng typeof với NaN (từ viết tắt của Not a Number), Infinity (số dương vô cùng của JavaScript) hoặc -Infinity (số âm vô cùng của JavaScript), thì kết quả là bạn sẽ nhận được ‘number’. Nhìn ó vẻ kỳ lạ, nhưng theo đặc điểm kỹ thuật của ECMAScript, kiểu Number bao gồm các giá trị số đặc biệt này. Để kiểm tra các giá trị này, bạn có thể sử dụng các hàm cụ thể sau: |