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;"> kiểu trả về của biến 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 một = 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; //'con số'
typeof +0; //'con số'
typeof -0; //'con số'
typeof Math.sqrt (2); //'con số'
typeof Infinity; //'con 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'

loại ''; //'sợi dây'
typeof 'freeCodeCamp'; //'sợi dây'
typeof `freeCodeCamp thật tuyệt vời`; //'sợi dây'
typeof '100'; //'sợi dây'
typeof Chuỗi (100); //'sợi dây'

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

typeof {blog: 'freeCodeCamp', tác giả: 'Tapas A'}; //'sự vật';
typeof ['This', 'is', 101]; //'sự vật'
typeof new Date (); //'sự vật'
typeof Mảng (4); //'sự vật'

typeof new Boolean (true); //'sự vật';
typeof new Number (101); //'sự vật';
typeof new String ('freeCodeCamp'); //'sự vật';
typeof new Object; //'sự vật'

cảnh báo typeof; //'hàm số'
hàm typeof () {}; //'hàm số'
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 số'

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

typeof null; //'sự vật'
 

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  Độ dài mảng JavaScript - javascript len ​​của mảng

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; //'sự vật'
 

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 (đầu vào) {
  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ủ đề trả về loại javascript biến

    Intro To JavaScript Unit Testing & BDD (2 Hour+ Course)

    • Tác giả: Traversy Media
    • Ngày đăng: 2020-10-27
    • Đánh giá: 4 ⭐ ( 2169 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Learn JavaScript unit testing in this full course

      Learn programming, design and more with Treehouse. Start your seven days of free learning: https://trhou.se/2ZsjIKw

      Follow Treehouse on YouTube: https://www.youtube.com/user/gotreehouse

      TimeStamps:
      Introduction – 0:00
      Introducing Unit Testing – 0:26
      Proving Our Code Works – 1:31
      Running Your First Automated Test – 5:56
      Different Types of Testing – 10:11
      Behavior Driven Development – 13:29
      Red, Green, Refactor – 16:19
      Greater Expectations – 24:18
      Getting Started with Mocha and Chai – 34:31
      General Structure of Test Files – 37:47
      Test Suites and Test Specs – 41:59
      Writing Our First Test Suite – 45:35
      Writing Our First Test Suite Part 2 – 01:00:07
      Challenge: Expanding Our Expectations – 01:08:44
      Answer: Expanding Our Expectations – 01:18:44
      Making Tests Easier with Fixtures: Setup – 01:30:52
      Making Tests Easier with Fixtures: Teardown – 01:38:30
      Covering Edge Cases – 01:42:10
      Challenge: Writing Testable Code – 01:53:09
      Answer: Writing Testable Code – 01:55:11
      Changing Mocha’s Reporter – 01:59:50
      Outlining Your Test Suite – 02:03:04
      Watching Test Files – 02:07:28
      Mocks and Stubs – 02:13:26
      Testing Asynchronous Code – 02:22:58

    Hàm trong JavaScript là gì – Các hàm trong JavaScript

    • Tác giả: laptrinhcanban.com
    • Đánh giá: 4 ⭐ ( 8078 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Cùng tìm hiểu về hàm trong javascript hay còn gọi là function trong javascript. Bạn sẽ học được khái niệm hàm trong javascript là gì, cách phân biệt các thành phần sử dụng trong hàm javascript như tha

    Bài 2: Biến và các kiểu dữ liệu trong JavaScript

    • Tác giả: goclamweb.com
    • Đánh giá: 5 ⭐ ( 4719 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: JavaScript là một ngôn ngữ định kiểu yếu hay động. Điều đó nghĩa là không cần phải khai báo kiểu của các biến trước khi dùng. Kiểu dữ liệu của biến phụ thuộc vào giá trị chúng ta gán cho biến. Trong bài này mình sẽ giới thiệu cho các bạn về biến và các kiểu dữ liệu trong Javascript

    Cùng tìm hiểu về biến trong JavaScript

    • Tác giả: viblo.asia
    • Đánh giá: 4 ⭐ ( 4827 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Mở đầu Các biến là phần thiết yếu của mọi ngôn ngữ lập trình. Vì vậy, bạn phải hiểu những điều cơ bản của biến trước khi bạn đi sâu vào ứng dụng. Nên hôm nay mình xin trình bày đôi nét về biến Javascr…

    Biến trong JavaScript

    • Tác giả: viettuts.vn
    • Đánh giá: 4 ⭐ ( 8417 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Một biến JavaScript đơn giản là một tên của vị trí lưu trữ. Có hai loại biến trong JavaScript: biến cục bộ (local) và biến toàn cầu (global).

    Biến trong JavaScript

    • Tác giả: hocjavascript.net
    • Đánh giá: 3 ⭐ ( 4699 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Vì vậy, phải hiểu những điều cơ bản của biến trước khi đi sâu vào ứng dụng. Bài viết này sẽ trình bày đôi nét về biến trong JavaScript.

    Kiểm tra xem một biến có phải là một chuỗi trong JavaScript không

    • Tác giả: qastack.vn
    • Đánh giá: 4 ⭐ ( 8827 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Bạn có thể sử dụng typeoftoán tử: var booleanValue = true; var numericalValue = 354; var…

    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