- vừa được xem lúc

JavaScript: Sự khác nhau giữa Null và Undefined

0 0 8

Người đăng: Nguyễn Thị Trọng Nghĩa

Theo Viblo Asia

Khi làm quen với Javascript, mình đã tự hỏi tại sao lại có 2 giá trị đều mang nghĩa là "không có gì cả", đó là nullundefined. Đây là một trong những điểm dễ gây nhầm lẫn, nullundefined, hai khái niệm này không thể đồng nhất làm một dù cho ý nghĩa thực tế của chúng lại tương đối giống nhau. Vậy sự khác biệt giữa nullundefined là gì?

1. Undefined

Undefined có nghĩa là không xác định. Trong javascript, khi bạn khai báo một biến nhưng chưa gán giá trị cho nó, giá trị của biến đó sẽ là undefined.

var test;
alert(test); //undefined

Bất cứ biến nào cũng có thể bị làm rỗng bằng cách thiết lập giá trị về không xác định (undefined).

var test = undefined;
alert(test) //undefined

2. Null

Null có nghĩa là giá trị rỗng hoặc giá trị không tồn tại, nó có thể được sử dụng để gán cho một biến như là một đại diện không có giá trị.

var test = null;
alert(test); //null

3. Sự khác biệt giữa null và undefined

typeof undefined // undefined
typeof null // object

Có thể thấy undefind có kiểu giá trị là undefined nhưng null lại là 1 object (bạn có thể coi đó là một lỗi nhỏ trong JavaScript khi để kiểu của null là đối tượng, đáng ra kiểu của nó nên là null).

null === undefined // false
null == undefined // true

Ngoài lề một chút:

  • Phép so sánh === (!==) Trên thực tế, phép toán so sánh === tuân theo quy luật dưới đây:
  • Nếu x và y khác kiểu nhau, false
  • Nếu như cả 2 vế đều là null hoặc undefined (null === null), true (tuy nhiên điều này không đúng với NaN đâu nhé)
  • Nếu cả 2 vế đều là kiểu Number, 1 trong 2 vế, hoặc cả 2 vế là NaN, false. Còn không thì so sánh giá trị
  • Nếu cả 2 vế đều là kiểu String, nội dung giống nhau: true, còn lại false
  • Nếu cả 2 vế đều là kiểu Boolean, giống nhau thì là true, khác nhau là false
  • Nếu cả 2 vế đều là kiểu Object tham chiếu, nếu cùng tham chiếu tới 1 object: true, còn lại là false
  • Phép so sánh == (!=)
  • Nếu cả 2 vế đều là null, hoặc undefined, true
  • Nếu một vế là giá trị kiểu Number, vế còn lại là giá trị kiểu String, String sẽ được convert sang kiểu Number và so sánh giá trị
  • Nếu một vế là kiểu Boolean, một vế là kiểu Number, Boolean sẽ được chuyển sang kiểu Number và so sánh giá trị
  • Nếu một vế là kiểu Boolean, một vế là kiểu String, cả 2 vế sẽ được chuyển về kiểu Number và so sánh giá trị
  • Nếu một vế là kiểu Number, một vế là kiểu Object tham chiếu, vế Object tham chiếu sẽ được chuyển sang Number và so sánh giá trị
  • Nếu một vế là kiểu String, một vế là kiểu Object tham chiếu, vế Object tham chiếu sẽ được chuyển sang kiểu String và so sánh nội dung
  • Ngoài những trường hợp trên, tất cả đều là false Vậy nếu so sánh với toán tử == thì null và undefined bằng nhau nhưng với toán tử === thì chúng không bằng nhau. Javascript đã tự động ép kiểu trong phép so sánh null == undefined, để loại bỏ rủi ro có thể xảy ra này, chúng ta nên sử dụng === thay cho == và !== thay cho != trong các phép so sánh.

4. Tổng kết.

Hy vọng bài viết có thể phần nào giải thích được sự khác nhau giữa null và undefined trong javascript. Rất mong nhận được sự đóng góp ý kiến của các bạn để bài viết hoàn thiện hơn. Link tài liệu tham khảo: http://www.neilstuff.com/winhttp.html#null-vs-undefined https://mytechnetknowhows.wordpress.com/2016/05/27/some-java-script-nuances-null-undefined-nan/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 738

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 358

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 449

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 433