Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách hủy biến (unset) trong JavaScript

JavaScript không có từ khóa unset như PHP. Để "hủy" biến, tùy mục đích có các cách khác nhau:

1. Gán undefined – Xóa giá trị, giữ biến


let x = 10;
x = undefined;
console.log(x); // undefined
// Biến x vẫn tồn tại trong scope

2. Gán null – Chỉ định "rỗng chủ động"


let user = { name: "An" };
user = null; // Giải phóng object để GC dọn (nếu không còn ref khác)
console.log(user); // null

3. delete – Xóa PROPERTY khỏi OBJECT (KHÔNG xóa biến)

QUAN TRỌNG: delete chỉ xóa property của object, KHÔNG xóa biến khai báo bằng var/let/const.


const obj = { a: 1, b: 2 };
delete obj.a; // true
console.log(obj); // { b: 2 }

let x = 10;
delete x; // false (strict mode: SyntaxError) - KHÔNG XÓA ĐƯỢC BIẾN

4. Ra khỏi Scope – Cách tự nhiên nhất


function foo() {
  let temp = "large data";
  // temp chỉ tồn tại trong foo()
} // temp tự động giải phóng khi ra khỏi scope (GC dọn nếu không còn ref)

5. Block Scope tạm (ES6)


{
  let temp = "chỉ trong block này";
  // xử lý temp
}
// temp tự hủy ở đây

Ví dụ từ bài gốc (đã sửa)


let str = "Demo Text";
let nxt = "Next";

window.onscroll = function() {
  let y = this.pageYOffset;
  if (y > 200) {
    document.write(nxt);
    nxt = undefined; // Unset giá trị
    // delete nxt; // ❌ SAI: không xóa được biến let
    // document.write(nxt); // undefined
  }
};

So sánh các cách

CáchÁp dụng choHiệu quảLưu ý
x = undefinedBiến (var/let)Giá trị = undefined, biến còn tồn tạiDùng khi sẽ gán lại sau
x = nullBiến (var/let)Giá trị = null, giải phóng object refDùng khi không dùng nữa, giúp GC
delete obj.propProperty của objectXóa hoàn toàn propertyKhông xóa được biến/property non-configurable
Ra khỏi scopeBiến let/const/var trong block/hàmTự động giải phóngCách tốt nhất, tự nhiên

Cạm bẫy delete

  • Không xóa được biến var/let/const (configurable: false).
  • Không xóa được property non-configurable (strict mode ném TypeError).
  • Không xóa được property kế thừa từ prototype (chỉ xóa own property).
  • Trong strict mode: delete variable → SyntaxError.

Best Practice

  1. Dùng const/let block scope – tự hủy khi ra scope.
  2. Gán null cho object lớn không dùng nữa → giúp GC.
  3. Dùng delete obj.prop chỉ khi thực sự cần xóa key khỏi object.
  4. Tránh biến global – dùng Module/IIFE.