Kiểm tra các loại dữ liệu trong JavaScript

Xử lý các kiểu dữ liệu là một nhiệm vụ phổ biến trong cơ bản bất kỳ ngôn ngữ lập trình nào, có thể là động hoặc tĩnh, gõ yếu hoặc gõ mạnh. JavaScript cũng không ngoại lệ. Bạn đã bao giờ cần kiểm tra loại biến trong JavaScript chưa? Nếu vậy, có lẽ bạn đã phát hiện ra rằng một số kiểm tra có thể phức tạp hơn những gì bạn mong đợi. Trong bài viết này, chúng ta sẽ xem cách kiểm tra một số loại dữ liệu trong JS. Hãy tiếp tục đọc!

Data types and JavaScript

Trước tiên, hãy nói ngắn gọn về khái niệm loại dữ liệu hoặc ít nhất là ý nghĩa của loại dữ liệu trong bài viết này, trong ngữ cảnh của JavaScript. Trong khi khái niệm này trong lịch sử là một trong những chủ đề gây tranh cãi nhất trong khoa học máy tính, việc giải thích loại dữ liệu của chúng tôi ở đây là vô cùng thiết thực và phi học thuật. Trong bài viết này, những thứ như đối tượng, mảng (là đối tượng), hàm (cũng là đối tượng), số, NaN (là số) và những thứ khác sẽ được coi là các loại khác nhau. Vì vậy, nếu bạn có một nền tảng học vấn hoặc thực sự nghiêm ngặt khi nói đến hệ thống đánh máy, hãy thư giãn và đừng coi trọng khái niệm này cho đến bây giờ.

Strings

Chuỗi là giá trị nguyên thủy và kiểm tra chúng thực sự đơn giản. Bạn chỉ cần sử dụng toán tử typeof:

function printMessage(message) {
  if (typeof message !== 'string') {
    return;
  }

  // ...
}

Thực sự đơn giản, có phải là nó không? Tuy nhiên, có một trường hợp đặc biệt trong đó biểu thức này sẽ đánh giá thành _false: _ nếu chuỗi được khởi tạo bằng cách sử dụng hàm tạo String trực tiếp.

const message = new String('This will not work');
console.log(typeof message); //=> "object"

Xử lý các đối tượng chuỗi chắc chắn là không phổ biến và việc tạo chúng không được khuyến khích. Nếu bạn cần tạo một chuỗi, luôn ưu tiên cú pháp bằng chữ. Hàm tạo String được sử dụng dưới mui xe để tạo các đối tượng trình bao bọc. Bạn không cần phải sử dụng chúng trực tiếp. Tuy nhiên, nếu vì một lý do nào đó, bạn cần đảm bảo rằng một giá trị đã cho là một chuỗi, dù là nguyên thủy hay đối tượng, bạn có thể kết hợp các toán tử instanceoftypeof:

const isString = value => typeof value === 'string' || value instanceof String;

const message1 = 'This is a string primitive'; 
const message2 = new String('This is a string object'); 

console.log(isString(message1)); //=> true
console.log(isString(message2)); //=> true

Null and undefined

Trong JavaScript, null và _und xác định _are thường bị nhầm lẫn với nhau. Nói một cách đơn giản, undDef 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 chống lại cả hai, đây là những gì bạn nhận được:

console.log(typeof undefined); //=> "undefined"
console.log(typeof null); //=> "object"

Chà, chúng tôi đã nhận được những người không xác định được vì đã định nghĩa cho undained. Điều đó có ý nghĩa. Tuy nhiên, JavaScript đã cung cấp cho chúng tôi đối tượng trực tuyến là kiểu cho null. Đây không phải là do thiết kế. Nó là một lỗi cũ, bắt nguồn từ việc thực hiện ngôn ngữ gốc. Lỗi này không bao giờ được sửa chữa, vì một phần đáng kể của cơ sở mã JS hiện tại (vốn là rất lớn) sẽ bị hỏng nếu typeof null đột nhiên bắt đầu đánh giá thành null null.

Để kiểm tra null hoặc không xác định, bạn chỉ cần sử dụng toán tử đẳng thức nghiêm ngặt (===):

if(a === undefined) {}
if(a === null) {}

Nếu bạn muốn kiểm tra xem một biến là null hay _und xác định, tất nhiên, bạn có thể kết hợp hai phép thử ở trên (a === không xác định | | a === null). Tuy nhiên, có một cách làm ngắn gọn hơn, bằng cách sử dụng toán tử đẳng thức trừu tượng (==):

if (a == null) {}

Biểu thức trên ước tính thành true chỉ khi anull hoặc _und được xác định. _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ì các giá trị null và _und xác định are falsy, cả hai sẽ bằng nhau với toán tử đẳng thức trừu tượng. _ Điều này không có ý nghĩa gì, vì các giá trị giả mạo khác như 0 (không), khăn ăn (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 một đẳng thức.

console.log(null == ''); //=> false
console.log(null == NaN); //=> false
console.log(null == 0); //=> false
console.log(undefined == ''); //=> false
console.log(undefined == NaN); //=> false
console.log(undefined == 0); //=> false

Thực tế là không có logic thực sự đằng sau điều này. Nó chỉ xảy ra vì Đặc điểm kỹ thuật ECMAScript (chỉ cần kiểm tra điểm thứ hai và thứ ba của phần 11.9.3)

Arrays

Mảng là đối tượng. Nếu bạn cố gắng sử dụng toán tử typeof để chống lại một mảng, bạn sẽ nhận được kết quả là đối tượng. Cách đúng để kiểm tra xem một biến có phải là một mảng hay không bằng cách sử dụng phương thức tĩnh _Array.isArray () _ (IE9 +):

Array.isArray(someVar);
Array.isArray([11, 22, 33]); //=> true
Array.isArray({}); //=> false

Function

Chức năng 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:

const f = function() {};
console.log(typeof f === 'function'); //=> true

Objects

Để 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 biến tương ứng với hộp 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. Xin lưu ý rằng điều này sẽ đánh giá true cho bất kỳ loại đối tượng nào, bao gồm cả mảng và hàm:

const a = {};
console.log(a === Object(a)); //=> true

const b = [];
console.log(b === Object(b)); //=> true

const c = function() {};
console.log(c === Object(c)); //=> true

const d = 123;
console.log(d === Object(d)); //=> false

const e = '';
console.log(e === Object(e)); //=> false

Numbers and Booleans

Số và Booleans thực sự giống với Chuỗi về kiểm tra loại. Hầu hết thời gian, bạn chỉ cần sử dụng typeof:

if (typeof a === 'string') {}
if (typeof b === 'boolean') {}

Nhưng, trong trường hợp bạn cũng cần kiểm tra các đối tượng trình bao bọc và không chỉ các giá trị nguyên thủy, bạn có thể kết hợp typeofinstanceof:

const isBoolean = value => typeof value === 'boolean' || value instanceof Boolean;
const isNumber = value => typeof value === 'number' || value instanceof Number;

NaN, Infinity and -Infinity

Nếu bạn sử dụng _typeof _against NaN (từ viết tắt của Không phải là Số), Infinity (JavaScript số vô hạn dương) hoặc -Infinity (số vô hạn âm), bạn sẽ nhận được _ số thứ tự _. Tôi biết rằng thoạt nhìn có vẻ lạ, nhưng theo [Đặc tả ECMAScript, loại Number bao gồm các giá trị số đặc biệt này](http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-4.3. 20). Để kiểm tra các giá trị này, bạn có thể sử dụng các hàm dựng sẵn cụ thể:

if (isNaN(value)) {} // Checks if value is NaN

if (!isFinite(value)) {} // Checks if value is Infinity or -Infinity

Hoặc, nếu bạn cần kiểm tra xem một biến cụ thể là vô cực dương hay âm:

if (value === Number.POSITIVE_INFINITY) {} // Checks if value is Infinity

if (value === Number.NEGATIVE_INFINITY) {} // Checks if value is -Infinity

Conclusion

  • Trong JavaScript, các loại dữ liệu khác nhau yêu cầu các hình thức kiểm tra riêng biệt.
  • Chuỗi, số, booleans và hàm có thể dễ dàng kiểm tra bằng cách sử dụng toán tử typeof.
  • Đối với nullundained, bạn có thể sử dụng phép so sánh đơn giản với toán tử đẳng thức nghiêm ngặt.
  • Mảng có thể được nhận ra bằng cách sử dụng phương thức tĩnh Array.isArray
  • Bạn có thể kiểm tra bất kỳ loại đối tượng nào bằng cách so sánh chúng với giá trị được đóng hộp của chúng
  • Chúng tôi có các hàm đặc biệt như isNaN và isFinite, để chúng tôi kiểm tra các giá trị số như NaN, Infinity và -Infinity

#javascript #web-development

Kiểm tra các loại dữ liệu trong JavaScript
24.05 GEEK