1. Typeof trong JavaScript

Typeof trong Js dùng để kiểm tra kiểu dữ liệu của một biến nào đó hoặc một giá trị nào đó. Nó sẽ trả về một chuỗi mô tả kiểu dữ liệu.

Ta có một cú pháp chung như sau:

var x = typeof value;

Trong đó value là cần được kiểm tra dữ liệu. Giá trị này có thể thuộc bất kỳ kiểu dữ liệu nào trong Js như chuỗi, số, mảng, ….

Ví dụ:

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 
  typeof "laptrinh" + "<br>" +
  typeof 3.14 + "<br>" +
  typeof NaN + "<br>" +
  typeof false + "<br>" +
  typeof [1,2,3,4] + "<br>" +
  typeof {name:'thanh', age:19} + "<br>" +
  typeof new Date() + "<br>" +
  typeof function () {} + "<br>" +
  typeof myCar + "<br>" +
  typeof null;
</script>

Lưu ý

Typeof sẽ trả về kiểu dữ liệu được xác định dưới dạng một chuỗi, nên chúng ta có thể dùng kết quả của toán tử trong phép so sánh chuỗi. Ví dụ:

<script>
let num = 78;

if (typeof num === 'number'){
  document.write('number');
} else

// number
</script>

Trong PHP để kiểm tra một biến nào đó có tồn tại hay không thì ta dùng hàm isset(). Còn trong Js thì ta dùng typeof kết hợp với kiểu dữ liệu undefined. Nghĩa là nếu kiểu dữ liệu của một biến nào đó là undefined thì tức là biến đó chưa được định nghĩa hoặc giá trị của nó không xác định. Các toán tử (+ – * /) không có bất kỳ kiểu dữ liệu nào. Còn typeof luôn trả về một chuỗi (kiểu dữ liệu của toán hạng).

2. Constructor trong JavaScript

Constructor sẽ trả về hàm xây dựng cho tất cả các biến Js. Tức là, chúng ta có thể kiểm tra kiểu biến mà không phải kiểm tra toàn bộ chuỗi nguyên mẫu.

Ví dụ:

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 
  "john".constructor + "<br>" +
  (3.14).constructor + "<br>" +
  false.constructor + "<br>" +
  [1,2,3,4].constructor + "<br>" +
  {name:'john', age:34}.constructor + "<br>" +
  new Date().constructor + "<br>" +
  function () {}.constructor;
</script>

Bạn có thể kiểm tra thuộc tính phương thức khởi tạo để tìm xem một đối tượng có phải là một Array (chứa từ “Array”) hay không:

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = isArray(fruits);

function isArray(myArray) {
  return myArray.constructor.toString().indexOf("Array") > -1;
}
</script>

Hoặc đơn giản hơn, bạn có thể kiểm tra xem đối tượng có phải là một hàm Array hay không :

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = isArray(fruits);

function isArray(myArray) {
  return myArray.constructor === Array;
}
</script>

3. Instanceof trong JavaScript

Toán tử instanceof so sánh hai giá trị (một biến và một function) bằng cách kiểm tra chuỗi nguyên mẫu (prototype chain) của biến với nguyên mẫu của function object. Vì toán hạng thứ 2 có thể là bất cứ function nào mà chúng ta muốn, nên instanceof có thể được sử dụng để kiểm tra các custom types nữa. Hơn nữa, bởi instanceof sử dụng toán hạng là một function thay vì một chuỗi, do đó, nếu ta có vô tình gõ nhầm thì trình biên dịch sẽ thông báo lỗi ngay.

Ví dụ:

function UserDefinedObject(){}
var a = new UserDefinedObject();
a instanceof UserDefinedObject // true
new Date() instanceof Date // true
/abc/ instanceof RegExp // true
new RegExp("abc") instanceof RegExp // true
[] instanceof Array // true

Kiểm tra chuỗi nguyên mẫu của đối tượng thì khá hữu ích, tuy nhiên instanceof sẽ luôn luôn trả về false cho các kiểu dữ liệu nguyên thủy (chuỗi, number, booleans, null và undefined) bởi chúng không phải là đối tượng và do đó không có nguyên mẫu.

4. Null và Undefined trong JavaScript

Trong JavaScript, một biến không có giá trị sẽ có giá trị undefined. Kiểu cũng vậy undefined. Và bất kỳ biến nào cũng có thể được làm trống bằng cách đặt giá trị thành undefined. Loại cũng sẽ được undefined.

Ví dụ:

<p id="demo"></p>

<script>
let car = "Honda";
car = undefined;

document.getElementById("demo").innerHTML = car + "<br>" + typeof car;
</script>

Trong Js nulllà “không có gì”. Nó được cho là một cái gì đó không tồn tại. Thật lạ là trong Js, kiểu dữ liệu của nulllà một đối tượng.

Bạn có thể làm trống một đối tượng bằng cách đặt nó thành null:

<script>
let person = {firstName:"Thành", lastName:"Nguyễn", age:19, eyeColor:"black"};
person = null;
document.write(typeof person);
</script>

Bạn cũng có thể làm trống một đối tượng bằng cách đặt nó thành undefined:

<script>
let person = {firstName:"Thành", lastName:"Nguyễn", age:19, eyeColor:"black"};
person = undefined;
document.write(person);
</script>

Sự khác nhau đơn giản giữa Null và Undefined là chúng bằng nhau về giá trị nhưng lại khác nhau về loại.

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
typeof undefined + "<br>" +
typeof null + "<br><br>" +
(null === undefined) + "<br>" +
(null == undefined);
</script>