Sự khác biệt giữa Host objects và Native objects trong JavaScript

Trong JavaScript, có hai loại đối tượng chính mà lập trình viên làm việc thường xuyên: Host objectsNative objects. Mặc dù cả hai đều là các đối tượng có thể được sử dụng trong mã JavaScript, chúng khác nhau về nguồn gốc và cách thức được cung cấp.

1. Native objects (Đối tượng gốc)

Native objects (hay còn gọi là Built-in objects) là những đối tượng được định nghĩa bởi chính ngôn ngữ JavaScript theo tiêu chuẩn của ECMAScript. Những đối tượng này luôn có sẵn trong môi trường JavaScript, bất kể nền tảng thực thi.

Các đối tượng Native bao gồm các kiểu dữ liệu và phương thức cơ bản được cung cấp trực tiếp bởi JavaScript. Chúng được cài đặt trong bất kỳ trình duyệt hoặc môi trường thực thi JavaScript nào mà tuân thủ tiêu chuẩn ECMAScript.

Ví dụ về các Native objects:

Object: Đối tượng cơ bản nhất trong JavaScript.

const obj = new Object();

Array: Đối tượng mảng cho phép lưu trữ nhiều giá trị theo thứ tự.

const arr = [1, 2, 3];

String: Đối tượng chuỗi để xử lý các chuỗi ký tự.

const str = new String('Hello');

Number: Đối tượng để làm việc với các số.

const num = new Number(123);

Function: Đối tượng đại diện cho các hàm.

const func = new Function('return 42');

Các đối tượng Native khác bao gồm Boolean, Date, RegExp, Math, JSON, và nhiều đối tượng khác được quy định bởi ECMAScript.

2. Host objects (Đối tượng Host)

Host objects là các đối tượng được cung cấp bởi môi trường thực thi JavaScript (thường là trình duyệt hoặc Node.js), chứ không phải là một phần của bản thân ngôn ngữ JavaScript (ECMAScript). Các Host objects thay đổi tùy thuộc vào môi trường mà mã JavaScript đang chạy.

Trong trình duyệt, các đối tượng Host liên quan đến việc thao tác với Document Object Model (DOM), API giao diện người dùng, và các tính năng của trình duyệt. Trong Node.js, các Host objects cung cấp khả năng truy cập vào hệ thống file, mạng, hoặc các tài nguyên của máy chủ.

Ví dụ về các Host objects trong trình duyệt:

window: Đối tượng toàn cục đại diện cho cửa sổ trình duyệt.

console.log(window.location);

document: Đối tượng đại diện cho tài liệu HTML.

console.log(document.title);

XMLHttpRequest: Đối tượng để thực hiện các yêu cầu HTTP.

const xhr = new XMLHttpRequest();

console: Đối tượng để hiển thị thông tin ra bảng điều khiển của trình duyệt.

console.log('Hello world');

Ví dụ về các Host objects trong Node.js:

process: Đối tượng đại diện cho tiến trình hiện tại trong Node.js.

console.log(process.pid);

require: Hàm dùng để nạp các module trong Node.js.

const fs = require('fs');

Buffer: Đối tượng để thao tác với các khối dữ liệu nhị phân.

const buf = Buffer.from('Hello');

3. Sự khác biệt chính giữa Host objects và Native objects

Tiêu chíHost objectsNative objects
Nguồn gốcĐược cung cấp bởi môi trường thực thi JavaScript (trình duyệt, Node.js, v.v.)Được định nghĩa bởi chính ngôn ngữ JavaScript (ECMAScript)
Khả năng tương thíchCó thể thay đổi tùy thuộc vào môi trường, có thể không nhất quán giữa các nền tảngLuôn nhất quán và có sẵn trong mọi môi trường JavaScript tuân theo ECMAScript
Ví dụwindow, document, console, XMLHttpRequest, process (Node.js)Object, Array, String, Number, Function, Date, RegExp
Tiêu chuẩn hóaKhông được tiêu chuẩn hóa, phụ thuộc vào môi trường thực thiĐược quy định bởi tiêu chuẩn ECMAScript

Kết luận

  • Native objects là những đối tượng gốc của JavaScript và luôn có sẵn trong mọi môi trường thực thi JavaScript theo tiêu chuẩn ECMAScript.
  • Host objects là các đối tượng mà môi trường thực thi (trình duyệt, Node.js, v.v.) cung cấp cho JavaScript, cho phép nó tương tác với hệ thống hoặc trình duyệt.

Hiểu được sự khác biệt này rất quan trọng khi làm việc với các ứng dụng đa nền tảng hoặc khi cần chuyển đổi mã giữa các môi trường JavaScript khác nhau.