Tổng quan về cú pháp JavaScript

Cú pháp cơ bản

Các chú thích

// chú thích một dòng (single-line comment)

/*
Chú thích
nhiều dòng
(multiple lines comment)
*/

Các giá trị cơ sở

// Kiểu boolean
true
false

// Kiểu số
-123
3.14

// Kiểu chuỗi
'abc'
"abc"

Trên môi trường Node.js bạn có thể sử dụng hàm assert.equal(arg1, arg2) để kiểm tra xem arg1 có bằng arg2 không? Nếu không bằng, một ngoại lệ được tạo ra; nếu đúng nó không trả về kết quả nào. Ví dụ:

assert.equal(7 + 1, 8); // -> undefined

Có thể hiển thị một giá trị ra console (trên trình duyệt) và terminal (trên Node.js) bằng hàm console.log():

console.log('Hello!');

Có thể in một thông báo lỗi bằng console.error:

console.error('Something went wrong!');

Các toán tử:

// Toán tử lôgic
assert.equal(true && false, false); // toán tử And
assert.equal(true || false, true); // toán tử Or

// Toán tử số học
assert.equal(3 + 4, 7);
assert.equal(5 - 1, 4);
assert.equal(3 * 4, 12);
assert.equal(9 / 3, 3);

// Toán tử chuỗi
assert.equal('a' + 'b', 'ab');
assert.equal('I see ' + 3 + ' monkeys', 'I see 3 monkeys');

// Toán tử so sánh
assert.equal(3 < 4, true);
assert.equal(3 <= 4, true);
assert.equal('abc' === 'abc', true);
assert.equal('abc' !== 'def', true);

Khai báo biến:

let x;	// khai báo biến x (có thể thay đổi)
x = 3 * 5;	// gán giá trị cho x

let y = 3 * 5;	// khai báo và gán

const z = 8; // khai báo hằng z (không thể thay đổi)

Các câu lệnh điều khiển:

// Lệnh điều kiện
if (x < 0) { // nếu x nhỏ hơn 0 thì?
  x = -x;
}

Khai báo hàm:

// add1() có hai tham số a và b
function add1(a, b) {
return a + b;
}
// Chạy (gọi) hàm vừa khai báo
assert.equal(add1(5, 2), 7);

Biểu thức hàm mũi tên:

const add2 = (a, b) => { return a + b };
// Gọi hàm add2
assert.equal(add2(5, 2), 7);

// Tương đương với add2
const add3 = (a, b) => a + b;

Các đối tượng:

// Tạo đối tượng bằng object literal
const obj = {
  first: 'Jane', // thuộc tính
  last: 'Doe', // thuộc tính
  getFullName() { // phương thức
    return this.first + ' ' + this.last;
  },
};

// Đọc một thuộc tính
assert.equal(obj.first, 'Jane');

// Ghi thuộc tính
obj.first = 'Janey';

// Gọi phương thức
assert.equal(obj.getFullName(), 'Janey Doe');

Các mảng (mảng cũng là các đối tượng):

// Tạo một mảng bằng array literal
const arr = ['a', 'b', 'c'];

// Đọc phần tử của mảng
assert.equal(arr[1], 'b');

// Ghi một phần tử của mảng
arr[1] = 'β';

Các module

Mỗi module là một file. Ví dụ 2 file sau, mỗi file là một module:

file-tools.js
main.js

Module trong file-tools.js export hàm isTextFilePath():

export function isTextFilePath(filePath) {
  return filePath.endsWith('.txt');
}

Module main.js import toàn bộ module path và hàm isTextFilePath() của module file-tools.js:

// Import toàn bộ module path vào đối tượng path
import * as path from 'path';

// Import một phần của module file-tools.js
import {isTextFilePath} from './file-tools.mjs';

Tên biến và tên thuộc tính

Tên biến và tên thuộc tính được gọi chung là các định danh (identifiers).

Các định danh cho phép có những ký tự sau:

  • Chữ cái Unicode: A-Z, a-z
  • Kí tự $_
  • Chữ số Unicode: 0-9
  • Kí tự đầu tiên không được là chữ số.

Một vài từ có ý nghĩa đặc biệt trong JavaScript được gọi là các từ khóa. Ví dụ: if, true, const.

Các từ khóa không được phép dùng làm tên biến:

const if = 123;
// SyntaxError: Unexpected token if

Nhưng từ khóa được phép dùng làm tên thuộc tính:

const obj = { if: 123 };
assert.equal(obj.if, 123);

Tuy không bắt buộc, nhưng trong JavaScript ta có quy ước sau:

  • Đối với tên biến, tên hàm, tên thuộc tính (phương thức): kí tự đầu tiên được viết thường, sau đó các kí tự bắt đầu mỗi từ được viết hoa. Ví dụ: threeConcatenateWorlds.
  • Đối với tên lớp: kí tự đầu tiên được viết hoa, kí tự đứng đầu mỗi từ được viết hoa, các kí tự còn lại viết thường. Ví dụ: MyClass.
  • Tên hằng: tất cả các từ được viết hoa, sử dụng kí tự _ để phân cách cách từ với nhau. Ví dụ: MY_CONSTANT.
  • Nếu tên một tham số bắt đầu bằng _ thì tham số đó không được sử dụng: arr.map((_x, i) => i)
  • Nếu tên một thuộc tính bắt đầu bằng _ thì nó được xem là thuộc tính riêng (private): class ValueWrapper { constructor(value) { this._value = value; } }

Đặt dấu chấm phảy ở đâu?

Tại cuối của một câu lệnh:

const x = 123;
func();

Nhưng không đặt dấu chấm phảy nếu câu lệnh kết thúc bằng }:

while (false) {
  // ···
} // không có dấu chấm phảy

function func() {
  // ···
} // không có dấu chấm phảy