Kiểu dữ liệu và kiểm tra kiểu là những khía cạnh cơ bản của bất kỳ ngôn ngữ lập trình nào. Nhiều ngôn ngữ lập trình như Java có kiểm tra kiểu nghiêm ngặt. Điều này có nghĩa là nếu một biến được xác định với một kiểu cụ thể thì nó có thể chứa một giá trị chỉ của kiểu đó. Tuy nhiên, JavaScript được gõ lỏng lẻo (hoặc động

Bạn đang xem: < font style = "vertical-align: inherit;"> hàm typeof trong javascript

Kiểu dữ liệu và kiểm tra kiểu là những khía cạnh cơ bản của bất kỳ ngôn ngữ lập trình nào.

Nhiều ngôn ngữ lập trình như Java có tính năng kiểm tra kiểu nghiêm ngặt. Điều này có nghĩa là nếu một biến được xác định với một kiểu cụ thể thì biến đó có thể chứa giá trị chỉ của kiểu đó.

Tuy nhiên, JavaScript là ngôn ngữ được nhập lỏng (hoặc nhập động). Điều này có nghĩa là một biến có thể chứa giá trị thuộc bất kỳ loại nào. Mã JavaScript có thể thực thi như sau:

  let one = 1;
một = 'một';
một = đúng;
một = Boolean (true);
one = String ('Có thể');
 

Với lưu ý này, điều quan trọng là phải biết loại biến tại bất kỳ thời điểm nào.

Loại biến được xác định bởi loại giá trị được gán cho nó. JavaScript có một toán tử đặc biệt được gọi là typeof cho phép bạn nhận loại giá trị bất kỳ.

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng typeof , cùng với một số vấn đề cần lưu ý.

Các loại dữ liệu JavaScript

Hãy cùng xem qua JavaScript các kiểu dữ liệu trước khi chúng ta tìm hiểu toán tử typeof .

Trong JavaScript, có bảy kiểu nguyên thủy. Nguyên thủy là bất cứ thứ gì không phải là đối tượng. Chúng là:

  1. Chuỗi
  2. Số
  3. BigInt
  4. Biểu tượng
  5. Boolean
  6. không xác định
  7. null

Mọi thứ khác đều là một đối tượng – thậm chí bao gồm cả mảng chức năng . Đối tượng là tập hợp các cặp khóa-giá trị.

Toán tử typeof JavaScript

typeof chỉ nhận một toán hạng (toán tử một ngôi). Nó đánh giá kiểu của toán hạng và trả về kết quả dưới dạng một chuỗi. Đây là cách bạn sử dụng nó khi đánh giá kiểu số, 007.

  typeof 007; // trả về 'số'
 

Có một cú pháp thay thế cho toán tử typeof nơi bạn có thể sử dụng nó như một hàm :

 < code class = "language-js"> typeof (toán hạng)
 

Cú pháp này hữu ích khi bạn muốn đánh giá một biểu thức hơn là một giá trị đơn lẻ. Đây là một ví dụ về điều đó:

  typeof (typeof 007); // trả về 'chuỗi'
 

Trong ví dụ trên, biểu thức typeof 007 đánh giá thành số kiểu và trả về chuỗi ‘số’. typeof ('number') thì kết quả là 'string' .

Hãy xem một ví dụ khác để hiểu tầm quan trọng của dấu ngoặc đơn với toán tử typeof .

  typeof (999-3223); // trả về, "số"  

Nếu bạn bỏ qua dấu ngoặc đơn, nó sẽ trả về NaN (Không phải số):

 < mã class = "language-js"> typeof 999-3223; // trả về, NaN  

Điều này là do, typeof 999 đầu tiên sẽ dẫn đến một chuỗi, “số”. Biểu thức "number" - 32223 cho kết quả là NaN khi bạn thực hiện phép tính trừ giữa một chuỗi và số.

Ví dụ về kiểu JavaScript

Đoạn mã sau đây hiển thị kết quả kiểm tra kiểu của các giá trị khác nhau bằng cách sử dụng toán tử typeof .

 typeof 0; // 'số'
typeof +0; // 'số'
typeof -0; // 'số'
typeof Math.sqrt (2); // 'số'
typeof Infinity; // 'số'
typeof NaN; // 'số', ngay cả khi nó không phải là Số
typeof Number ('100'); // 'số', Sau khi cưỡng chế thành công số
typeof Number ('freeCodeCamp'); // 'number', mặc dù nó không thể bị ép buộc thành một số

typeof đúng; // 'boolean'
typeof false; // 'boolean'
typeof Boolean (0); // 'boolean'

kiểu chữ 12n; // 'bigint'

kiểu chữ ''; // 'chuỗi'
typeof 'freeCodeCamp'; // 'chuỗi'
typeof `freeCodeCamp thật tuyệt vời`; // 'chuỗi'
typeof '100'; // 'chuỗi'
typeof Chuỗi (100); // 'chuỗi'

typeof Symbol (); // 'biểu tượng'
typeof Symbol ('freeCodeCamp'); // 'biểu tượng'

typeof {blog: 'freeCodeCamp', tác giả: 'Tapas A'}; // 'đối tượng';
typeof ['This', 'is', 101]; // 'đối tượng'
typeof new Date (); // 'đối tượng'
typeof Mảng (4); // 'đối tượng'

typeof new Boolean (true); // 'đối tượng';
typeof new Number (101); // 'đối tượng';
typeof new String ('freeCodeCamp'); // 'đối tượng';
typeof new Object; // 'đối tượng'

cảnh báo typeof; // 'hàm'
hàm typeof () {}; // 'hàm'
typeof (() = & gt; {}); // 'function' - một hàm mũi tên nên bắt buộc phải có dấu ngoặc đơn
typeof Math.sqrt; // 'hàm'

hãy để một;
kiểu chữ a; // 'không xác định'
kiểu chữ b; // 'không xác định'
typeof không xác định; // 'không xác định'

typeof null; // 'đối tượng'
 

Bảng bên dưới hiển thị các giá trị kiểm tra kiểu của typeof :

TYPE TRẢ LẠI GIÁ TRỊ CỦA TYPEOF < / strong> Chuỗi 'string' Number 'number' BigInt 'bigint' Symbol 'Symbol' Boolean 'boolean' undefined 'undefined' Đối tượng chức năng 'function' null 'object' (xem bên dưới!) Bất kỳ đối tượng nào khác 'object'

Xem Thêm  Từ điển Python - khai báo từ điển trong python

Gotchas phổ biến với typeof

Ở đó là những trường hợp mà toán tử typeof có thể không trả về các loại mà bạn mong đợi. Điều này có thể gây nhầm lẫn và sai sót. Dưới đây là một số trường hợp.

Loại NaN là một số

  typeof NaN; // 'số', ngay cả khi nó không phải là Số  

typeof NaN 'number' . Điều này thật kỳ lạ, vì chúng ta sẽ không phát hiện ra NaN bằng cách sử dụng typeof . Có nhiều cách tốt hơn để đối phó với nó. Chúng ta sẽ thấy chúng sau một phút.

Loại null là đối tượng < / strong>

  typeof null; // 'đối tượng'
 

Trong JavaScript, typeof null là một đối tượng gây ấn tượng sai rằng, null là một đối tượng mà nó là giá trị nguyên thủy .

Kết quả typeof null này thực sự là một lỗi ngôn ngữ. Trước đây, chúng tôi đã cố gắng khắc phục sự cố này nhưng đã bị từ chối do vấn đề tương thích ngược.

Loại của một biến chưa khai báo là không xác định

Trước ES6, kiểm tra kiểu trên một biến chưa khai báo được sử dụng để dẫn đến 'undefined' . Nhưng đây không phải là cách xử lý lỗi an toàn.

Với ES6, chúng ta có thể khai báo các biến phạm vi khối bằng các từ khóa let hoặc const . Nếu bạn sử dụng chúng với toán tử typeof trước khi chúng được khởi tạo, chúng sẽ tạo ra một ReferenceError .

  mèo đánh máy; // ReferenceError
 let cat = 'brownie';  

Loại của một hàm tạo là một đối tượng

Tất cả các hàm tạo, ngoại trừ hàm tạo Hàm , sẽ luôn là typeof ‘object’.

  typeof new String ('freeCodeCamp'); // 'object'  

Điều này có thể dẫn đến một số nhầm lẫn, vì chúng tôi cho rằng nó là kiểu thực (trong ví dụ trên, kiểu string ).

Kiểu của Mảng là một đối tượng

Mặc dù về mặt kỹ thuật đúng, đây có thể là điều đáng thất vọng nhất. Chúng tôi muốn phân biệt giữa Mảng và Đối tượng ngay cả khi Mảng về mặt kỹ thuật là một Đối tượng trong JavaScript.

  typeof Array (4); // 'object'  

May mắn thay, có nhiều cách để phát hiện một Mảng một cách chính xác. Chúng ta sẽ sớm thấy điều đó.

Beyond typeof – Kiểm tra loại tốt hơn

Bây giờ chúng ta đã thấy một số hạn chế với toán tử typeof , hãy xem cách khắc phục chúng và kiểm tra loại tốt hơn.

Cách phát hiện NaN

Trong JavaScript, NaN là một giá trị đặc biệt. Giá trị NaN đại diện cho kết quả của một biểu thức số học mà thực tế không thể được biểu diễn. Ví dụ:

 let result = 0/0;
console.log (kết quả); // trả về, NaN
 

Ngoài ra, nếu chúng tôi thực hiện bất kỳ phép tính số học nào với NaN , nó sẽ luôn dẫn đến NaN .

  console.log (NaN + 3); // trả về, NaN
 

Việc kiểm tra kiểu trên NaN bằng toán tử typeof không giúp ích nhiều vì nó trả về kiểu dưới dạng 'number' . JavaScript có một hàm toàn cục được gọi là isNaN () để phát hiện xem kết quả có phải là NaN hay không.

  isNaN (0/0); // trả về, true
 

Nhưng cũng có một vấn đề ở đây.

  isNaN (không xác định); // trả về true cho 'undefined'
 

Trong ES6, phương thức isNaN () được thêm vào đối tượng Number chung. Phương pháp này đáng tin cậy hơn nhiều và vì vậy nó là phương pháp được ưu tiên hơn.

  Number.isNaN (0/0); // trả về, true
Number.isNaN (không xác định); // trả về, sai
 

Một khía cạnh thú vị khác của NaN là nó là giá trị JavaScript duy nhất không bao giờ bằng bất kỳ giá trị nào khác kể cả chính nó. Vì vậy, đây là một cách khác để phát hiện NaN cho các môi trường không hỗ trợ ES6:

  function isNaN (input) {
  trả về đầu vào! == đầu vào;
}
 

Cách phát hiện null trong JavaScript

Chúng tôi đã thấy, phát hiện null bằng cách sử dụng toán tử typeof là khó hiểu. Cách ưa thích để kiểm tra xem nội dung nào đó có rỗng hay không là sử dụng toán tử bình đẳng nghiêm ngặt ( === ).

  function isNull (input ) {
 trả về đầu vào === null;
}
 

Đảm bảo không sử dụng == do nhầm lẫn. Sử dụng == thay cho === sẽ dẫn đến việc phát hiện kiểu sai.

Cách phát hiện một mảng trong JavaScript

Từ ES6 trở đi, chúng tôi có thể phát hiện một mảng bằng phương thức Array.isArray . < / p>

  Array.isArray ([]); // trả về true
Array.isArray ({}); // trả về false
 

Trước ES6, chúng ta có thể sử dụng toán tử instanceof để xác định Mảng:

  function isArray (input) {
  trả về đầu vào instanceof Array;
}
 

Giải pháp Chung để Kiểm tra Nhập trong JavaScript

< p> Có một cách chúng ta có thể tạo một giải pháp chung để kiểm tra kiểu. Hãy xem phương thức, Object.prototype.toString . Điều này rất mạnh và cực kỳ hữu ích để viết một phương thức tiện ích để kiểm tra kiểu.

Khi Object.prototype.toString được gọi bằng cách sử dụng call () hoặc apply () , nó trả về kiểu đối tượng ở định dạng: [object Type] . Phần Type trong giá trị trả về là kiểu thực tế.

Hãy xem nó hoạt động như thế nào với một số ví dụ:

  // trả về '[mảng đối tượng]'
Object.prototype.toString.call ([]);

// trả về '[đối tượng Ngày]'
Object.prototype.toString.call (new Date ());

// trả về '[chuỗi đối tượng]'
Object.prototype.toString.call (new String ('freeCodeCamp'));

// trả về '[object Boolean]'
Object.prototype.toString.call (new Boolean (true));

// trả về '[object Null]'
Object.prototype.toString.call (null);
 

Vì vậy, điều này có nghĩa là nếu chúng ta chỉ lấy chuỗi trả về và lấy ra phần Type , chúng ta sẽ có kiểu thực tế. Đây là một nỗ lực để làm điều này:

  function typeCheck (value) {
  const return_value = Object.prototype.toString.call (giá trị);
  // chúng ta cũng có thể sử dụng regex để thực hiện việc này ...
  const type = return_value.substring (
           return_value.indexOf ("") + 1,
           return_value.indexOf ("]"));

  return type.toLowerCase ();
}
 

Bây giờ, chúng ta có thể sử dụng hàm typeCheck để phát hiện các loại:

  typeCheck ( []); // 'mảng'
typeCheck (new Date ()); // 'ngày'
typeCheck (new String ('freeCodeCamp')); // 'sợi dây'
typeCheck (mới Boolean (true)); // 'boolean'
typeCheck (null); // 'vô giá trị'
 

Tóm tắt

Để tóm tắt những gì chúng ta đã học được trong bài viết này:

< ul>

  • Kiểm tra loại JavaScript không nghiêm ngặt như các ngôn ngữ lập trình khác.
  • Sử dụng toán tử typeof để phát hiện các loại.
  • Có hai biến thể cú pháp của toán tử typeof : typeof typeof (biểu thức) .
  • Kết quả của typeof < / code> toán tử đôi khi có thể gây hiểu nhầm. Trong những trường hợp đó, chúng ta cần dựa vào các phương thức khả dụng khác ( Number.isNaN , Array.isArry , v.v.).
  • Chúng ta có thể sử dụng < code> Object.prototype.toString để tạo một phương pháp phát hiện kiểu chung.
  • Trước khi chúng ta kết thúc …

    Cảm ơn bạn đã đọc đến đây! Hãy kết nối. Bạn có thể @ me trên Twitter (@tapasadhikary) với các nhận xét.

    Bạn cũng có thể thích các bài viết khác sau:

    Bây giờ, đó là tất cả. Hẹn gặp lại các bạn với bài viết tiếp theo của tôi ngay sau đây. Cho đến lúc đó, hãy chăm sóc bản thân thật tốt.


    Xem thêm những thông tin liên quan đến chủ đề hàm typeof trong javascript

    Programming: Functions and Objects in JavaScript

    • Tác giả: LearnWebCode
    • Ngày đăng: 2020-08-31
    • Đánh giá: 4 ⭐ ( 4563 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Let’s learn the basic concepts behind functions and objects in JavaScript. Towards the end of this video we build a basic feature in the browser, and also see a preview of the more exciting app we’ll build in the next lesson.

      CodePen Finished Product: https://codepen.io/learnwebcode/pen/abNBBaM

      The 10 Days of JavaScript Playlist: https://www.youtube.com/playlist?list=PLpcSpRrAaOaoIqHQddZOdbRrzr5dJtgSs

      Playlist for this full series: https://www.youtube.com/playlist?list=PLpcSpRrAaOargYaCNYxZCiFIp9YTqEl-l

      Follow me for updates on new episodes:
      Instagram: https://www.instagram.com/javaschiff/
      Twitter: https://twitter.com/learnwebcode
      Facebook: https://www.facebook.com/Brad-Schiff-1542576316048470/
      Twitch: https://www.twitch.tv/learnwebcode

      Check out my premium courses:
      https://www.udemy.com/user/bradschiff/

    typeof trong JavaScript và cách kiểm tra kiểu dữ liệu

    • Tác giả: laptrinhcanban.com
    • Đánh giá: 5 ⭐ ( 8904 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Hướng dẫn cách sử dụng toán tử typeof trong JavaScript. Bạn sẽ học được cách sử dụng typeof để kiểm tra kiểu dữ liệu trong JavaScript sau bài học này.

    Học Javascript: Tìm hiểu hàm typeof trong Javascript

    • Tác giả: hoangluyen.com
    • Đánh giá: 5 ⭐ ( 8595 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Hàm typeof trong Javascript dùng để kiểm tra một biến có kiểu dữ liệu trong Javascript là gì, kiểm tra một biến có tồn tại hay không.

    Toán tử typeof trong JavaScript – Minh Hoàng Blog

    • Tác giả: minhhn.com
    • Đánh giá: 3 ⭐ ( 6976 lượt đánh giá )
    • Khớp với kết quả tìm kiếm:

    [JavaScript] Thuôc tính typeof trong JavaScript

    • Tác giả: viblo.asia
    • Đánh giá: 3 ⭐ ( 4271 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Toán tử typeof trả về một chuỗi là loại JavaScript cho một giá trị nhất định nào đó. Cách dùng

    Các kiểu dữ liệu trong JavaScript

    • Tác giả: completejavascript.com
    • Đánh giá: 3 ⭐ ( 8892 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Mỗi giá trị đều có một kiểu dữ liệu nhất định. Sau đây mình sẽ tìm hiểu xem kiểu dữ liệu là gì, các kiểu dữ liệu trong JavaScript và cách kiểm tra kiểu dữ liệu của một biến.

    Kiểm tra kiểu dữ liệu trong JavaScript

    • Tác giả: laptrinhtudau.com
    • Đánh giá: 4 ⭐ ( 8591 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Kiểm tra kiểu dữ liệu trong JavaScript – Lập Trình Từ Đầu 1 JavaScript Căn Bản

    Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

    By ads_php