12/08/2018, 16:52

Javascript: null vs undefined

Null? Null đại diện cho một giá trị không tồn tại null không mặc định có mà phải được gán một cách chủ đích let a = null ; console . log ( a ) ; // null Undefined? Các cách tạo ra undefined value 1. Không define (assign, gán) giá trị let a = 2018 ; Trong đoạn ...

Null?

  • Null đại diện cho một giá trị không tồn tại
  • null không mặc định có mà phải được gán một cách chủ đích
let a = null;
console.log(a);
// null

Undefined?

Các cách tạo ra undefined value

1. Không define (assign, gán) giá trị

let a = 2018;

Trong đoạn code trên, biến a trải qua 2 giai đoạn:

  • giai đoạn 1 declare: let a
  • giai đoạn 2 define: = 2018 Nếu chúng ta bỏ qua giai đoạn 2, a nhận giá trị undefined:
let a;
console.log(a);
// undefined

2. Chủ động gán giống null

Và vì undefined cũng là 1 kiểu dữ liệu, chúng ta vẫn có thể gán undefined cho 1 biến như bình thường:

let a = undefined;
console.log(a);
// undefined

3. Truy cập tới 1 thuộc tính không tồn tại của 1 object

Và khi truy vấn đến 1 thuộc tính không tồn tại trong 1 object

var a = {};
console.log(a.nonExistence);
// undefined

Điểm chung giữa null và undefined

1. Đều là falsy value

Cùng với 4 thằng false 0 ' (empty string) NaN, null và undefined cũng là 2 falsy value

console.log(!!null);
// false
console.log(!!undefined);
// false

hay

null !== undefined

null == undefined

2. Đều là giá trị nguyên thủy (primitive value)

Mặc dù nếu các bạn kiểm tra typeof null sẽ nhận được kết quả 'object', tuy nhiên cùng với Boolean, Number, String, Symbol (ES6), Null, Undefined vẫn được tính là giá trị nguyên thủy vì chúng ko có method. (tham khảo tại https://developer.mozilla.org/en-US/docs/Glossary/Primitive)

Sự khác biệt giữa null và undefined trong thực tế

Ví dụ khi chúng ta dùng giá trị mặc định cho param:

let greet = (str = 'konichiwa') => {
  console.log(str);
}

và không truyền param, chúng ta sẽ nhận được giá trị mặc định chúng ta đã đặt.

greet();
// konichiwa

và nếu chúng ta truyền string 'good afternoon':

greet('good afternoon');
// good afternoon

Nhưng nếu chúng ta truyền null hoặc undefined, sẽ có sự khác biệt:

greet(undefined);
// konichiwa
greet(null);
// null

Quay trở lại với đoạn định nghĩa function greet, cụ thể đoạn (str = 'konichiwa'), chúng ta có thể đọc đoạn code này bằng lời "nếu giá trị str không được định nghĩa, gán giá trị mặc định là 'konichiwa'. Đó là lý do khi bạn truyền undefined, greet sẽ hiểu biến str không được định nghĩa, và dùng giá trị mặc định.

0