Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Ngày xuất bản
Ngày xuất bản

Biến trong Javascript (Javascript Variable) - Hướng dẫn toàn diện cho người mới bắt đầu

Biến trong Javascript là gì?

Biến (Variable) trong Javascript là một "hộp chứa" dữ liệu cho phép bạn lưu trữ, thao tác và sử dụng lại các giá trị trong chương trình. Hiểu rõ về variables là nền tảng cơ bản để trở thành một Javascript developer giỏi.

💡 Tip cho người mới: Hãy tưởng tượng biến như một chiếc hộp có tên, bên trong chứa một giá trị. Bạn có thể đặt tên cho hộp, bỏ giá trị vào, lấy giá trị ra, hoặc thay đổi giá trị bất cứ lúc nào.

1. Khai báo biến (Variable Declaration)

Khai báo biến là cách bạn tạo ra một "hộp chứa" có tên để lưu trữ dữ liệu:

// Khai báo biến với let (khuyến nghị)
let userName;
let userAge;
let isActive;

// Khai báo biến với const (cho constants)
const PI = 3.14159;
const API_URL = "https://api.example.com";

// Khai báo biến với var (không khuyến nghị)
var oldWay;

2. Gán giá trị (Assignment)

Gán giá trị là cách bạn đặt dữ liệu vào biến:

// Gán giá trị sau khi khai báo
let userName;
userName = "Nguyen Van A";

let userAge;
userAge = 25;

let isActive;
isActive = true;

// Khai báo và gán giá trị cùng lúc
let email = "nguyenvana@example.com";
let score = 95.5;
let hobbies = ["reading", "coding", "music"];

3. Thay đổi giá trị (Reassignment)

Với let, bạn có thể thay đổi giá trị của biến bất cứ lúc nào:

let counter = 0;
console.log(counter); // 0

counter = 1;
console.log(counter); // 1

counter = counter + 1;
console.log(counter); // 2

counter += 1; // Tương đương counter = counter + 1
console.log(counter); // 3

// Thay đổi kiểu dữ liệu
let flexible = "Hello";
console.log(flexible); // "Hello"

flexible = 42;
console.log(flexible); // 42

flexible = true;
console.log(flexible); // true

4. Sử dụng biến (Using Variables)

Sử dụng biến trong các phép toán và logic:

// Tính toán với biến
let price = 100000;
let discount = 10;
let finalPrice = price - (price * discount / 100);
console.log(`Giá cuối: ${finalPrice} VND`);

// Sử dụng trong điều kiện
let userAge = 18;
let canVote = userAge >= 18;
console.log(`Có thể bầu cử: ${canVote}`);

// Sử dụng trong chuỗi
let firstName = "Nguyen";
let lastName = "Van A";
let fullName = firstName + " " + lastName;
console.log(`Xin chào, ${fullName}!`);

// Sử dụng trong mảng
let numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
    sum += numbers[i];
}
console.log(`Tổng: ${sum}`);

// Sử dụng trong object
let user = {
    name: "John Doe",
    age: 25,
    email: "john@example.com"
};
console.log(`User: ${user.name}, Age: ${user.age}`);

5. Ví dụ thực tế đơn giản

// Ví dụ: Tính điểm trung bình
let mathScore = 8.5;
let englishScore = 7.8;
let scienceScore = 9.2;

let averageScore = (mathScore + englishScore + scienceScore) / 3;
console.log(`Điểm trung bình: ${averageScore.toFixed(2)}`);

// Ví dụ: Kiểm tra đăng nhập
let username = "admin";
let password = "123456";
let isLoggedIn = false;

if (username === "admin" && password === "123456") {
    isLoggedIn = true;
    console.log("Đăng nhập thành công!");
} else {
    console.log("Sai thông tin đăng nhập!");
}

// Ví dụ: Tính tiền điện
let electricityUsed = 150; // kWh
let unitPrice = 2500; // VND/kWh
let totalBill = electricityUsed * unitPrice;

console.log(`Tiêu thụ: ${electricityUsed} kWh`);
console.log(`Đơn giá: ${unitPrice} VND/kWh`);
console.log(`Tổng tiền: ${totalBill.toLocaleString()} VND`);

Các cách khai báo biến trong Javascript

Javascript cung cấp 3 cách để khai báo biến: var, let, và const. Mỗi cách có đặc điểm và use cases khác nhau.

1. var - Cách khai báo cũ (không khuyến khích)

// Cú pháp cơ bản
var variableName = value;

// Ví dụ
var userName = "Nguyen Van A";
var userAge = 25;
var isActive = true;

Đặc điểm của var:

// 1. Function Scope hoặc Global Scope
var globalVar = "Tôi là global";

function testVarScope() {
    var functionVar = "Tôi chỉ tồn tại trong function";
    
    if (true) {
        var blockVar = "Tôi không bị giới hạn bởi block";
    }
    
    console.log(blockVar); // OK - vẫn truy cập được
}
console.log(functionVar); // Error - functionVar is not defined

// 2. Hoisting - có thể sử dụng trước khi khai báo
console.log(hoistedVar); // undefined (không lỗi)
var hoistedVar = "Giá trị";

// 3. Có thể khai báo lại
var userName = "User 1";
var userName = "User 2"; // OK - không lỗi

Vấn đề với var:

// Problem 1: Không có block scope
for (var i = 0; i < 3; i++) {
    setTimeout(() => {
        console.log(i); // In ra 3, 3, 3 (không phải 0, 1, 2)
    }, 100);
}
console.log(i); // 3 - i vẫn tồn tại ngoài loop

// Problem 2: Hoisting gây nhầm lẫn
console.log(confusingVar); // undefined
if (false) {
    var confusingVar = "This never runs";
}
console.log(confusingVar); // vẫn undefined

2. let - Cách khai báo hiện đại (khuyến khích)

// Cú pháp
let variableName = value;

// Ví dụ
let userName = "Nguyen Van A";
let userAge = 25;
let userEmail = "nguyenvana@example.com";

Đặc điểm của let:

// 1. Block Scope
function testLetScope() {
    let functionVar = "Trong function";
    
    if (true) {
        let blockVar = "Chỉ trong block này";
        console.log(blockVar); // OK
    }
    
    // console.log(blockVar); // Error: blockVar is not defined
}

// 2. Không thể khai báo lại trong cùng scope
let userName = "User 1";
// let userName = "User 2"; // Error: Identifier 'userName' has already been declared

// 3. Temporal Dead Zone
// console.log(letVar); // Error: Cannot access before initialization
let letVar = "Giá trị";

// 4. Có thể reassign
let counter = 0;
counter = 1; // OK
counter = counter + 1; // OK

Ví dụ thực tế với Block Scope:

// User authentication example
let isLoggedIn = false;

function authenticateUser(credentials) {
    if (credentials.valid) {
        let authToken = "jwt-token-12345";
        let sessionData = {
            userId: credentials.userId,
            loginTime: new Date()
        };
        
        isLoggedIn = true;
        console.log("User authenticated successfully");
        
        // authToken và sessionData chỉ tồn tại trong if block
    }
    
    // console.log(authToken); // Error: authToken is not defined
    console.log(`Login status: ${isLoggedIn}`); // OK
}

3. const - Hằng số (khuyến khích cho constants)

// Cú pháp
const CONSTANT_NAME = value;

// Ví dụ
const PI = 3.14159;
const API_BASE_URL = "https://api.example.com";
const MAX_LOGIN_ATTEMPTS = 3;

Đặc điểm của const:

// 1. Phải khởi tạo giá trị ngay khi khai báo
const API_URL = "https://api.example.com"; // OK
// const EMPTY_CONST; // Error: Missing initializer

// 2. Không thể reassign
const PI = 3.14159;
// PI = 3.14; // Error: Assignment to constant variable

// 3. Block scope như let
if (true) {
    const blockConstant = "Chỉ trong block";
}
// console.log(blockConstant); // Error: not defined

// 4. Object/Array bên trong vẫn có thể thay đổi
const user = {
    name: "John",
    age: 25,
    email: "john@example.com"
};

// Modify object properties - OK
user.age = 26;
user.phone = "0123456789";
delete user.email;

console.log(user); // { name: "John", age: 26, phone: "0123456789" }

// Nhưng không thể reassign object
// user = { name: "Jane" }; // Error: Assignment to constant variable

const colors = ["red", "green", "blue"];
colors.push("yellow"); // OK - modify array
colors[0] = "orange"; // OK - modify element
// colors = []; // Error - không thể reassign

So sánh chi tiết var, let, const

Đặc điểm var let const
Scope Function/Global Block Block
Hoisting Có (undefined) Có (TDZ) Có (TDZ)
Re-declaration ✅ Có ❌ Không ❌ Không
Re-assignment ✅ Có ✅ Có ❌ Không
Block Scope ❌ Không ✅ Có ✅ Có
Must Initialize ❌ Không ❌ Không ✅ Có
Khuyến nghị ❌ Tránh dùng ✅ Cho variables ✅ Cho constants

So sánh Variables với các ngôn ngữ khác

Ngôn ngữ Khai báo Kiểu dữ liệu Scope Hoisting
JavaScript let, const, var Dynamic Function/Block
Python Không cần từ khóa Dynamic Function/Block Không
Java int, String, etc. Static Block Không
C++ int, string, etc. Static Block Không
PHP $variable Dynamic Function Không
TypeScript let, const, var + types Static + Dynamic Function/Block

Kết luận

Variables là nền tảng cơ bản nhất trong Javascript, nhưng việc hiểu sâu và sử dụng chúng đúng cách sẽ tạo ra sự khác biệt lớn trong chất lượng code của bạn.

Những điểm quan trọng cần nhớ:

  1. Chọn đúng kiểu khai báo: Sử dụng const mặc định, let khi cần thay đổi, tránh var
  2. Đặt tên có ý nghĩa: Code là để đọc, không chỉ để chạy
  3. Hiểu về Scope: Block scope vs Function scope
  4. Tránh global variables: Sử dụng modules và patterns phù hợp