delete Operator

The delete operator removes a property from an object.
It returns true if the property was removed (or didn’t exist), and false for non‑configurable properties in non‑strict mode.
In strict mode, attempting to delete a non‑configurable property or an unqualified identifier throws a TypeError/SyntaxError.


Syntax

delete object.property
delete object["property"]
delete array[index]

Examples

// ১) বেসিক: প্রপার্টি মুছুন
const ব্যবহারকারী = { নাম: "Mamun", শহর: "Dhaka" };
কনসোল.লগ("নাম" মধ্যে ব্যবহারকারী);   // true
কনসোল.লগ(মুছুন ব্যবহারকারী.শহর);      // true
কনসোল.লগ("শহর" মধ্যে ব্যবহারকারী);    // false

// ২) নেই এমন প্রপার্টি মুছলে true
কনসোল.লগ(মুছুন ব্যবহারকারী.দেশ);       // true

// ৩) non‑configurable প্রপার্টি
const obj = {};
Object.defineProperty(obj, "x", { value: 1, configurable: false });
কনসোল.লগ(মুছুন obj.x);                 // false (non‑strict)

// ৪) strict mode‑এ ত্রুটি
"use strict";
চেষ্টা {
  Object.defineProperty(obj, "y", { value: 2, configurable: false });
  মুছুন obj.y;                           // TypeError
} ধরুন (ত্রু) {
  কনসোল.সতর্ক("strict:", ত্রু.message);
}

// ৫) অ্যারে—slot মুছে hole হবে (length অপরিবর্তিত)
const A = [10, 20, 30];
কনসোল.লগ(A.length);          // 3
মুছুন A[1];                    // index 1 remove → hole
কনসোল.লগ(A.length);          // 3 (অপরিবর্তিত)
কনসোল.লগ(1 মধ্যে A);         // false (slot নেই)
কনসোল.লগ(A[1]);              // undefined

// ৬) ভেরিয়েবল/লেক্সিকাল বাইন্ডিং মুছা যায় না
var v = 1; let l = 2; const c = 3;
কনসোল.লগ(মুছুন v);            // false (var/ফাংশন‑স্কোপ)
কনসোল.লগ(মুছুন l);            // false
কনসোল.লগ(মুছুন c);            // false
// "use strict" হলে `মুছুন l`/`মুছুন c`/`মুছুন v`—সরাসরি আইডেন্টিফায়ার মুছতে গেলে SyntaxError

// ৭) Map/Set‑এ delete কাজ করে না
const ম্যাপ = new Map([["a", 1]]);
মুছুন ম্যাপ["a"];              // কিছু হবে না
কনসোল.লগ(ম্যাপ.has("a"));     // true
ম্যাপ.delete("a");             // সঠিক উপায়

Notes

  • delete only removes properties. For arrays, it removes the slot and leaves a hole (length unchanged); prefer .splice if you need to shift indices.
  • Returns true if the property doesn’t exist or is successfully removed; returns false for non‑configurable properties in non‑strict code.
  • In strict mode, deleting a non‑configurable property throws; deleting an unqualified identifier (e.g., delete x) is a SyntaxError.
  • Global var/function bindings are non‑configurable properties of the global object — they cannot be deleted. let/const are lexical bindings and are never deletable.
  • For Map/Set, use .delete(key) instead of delete.
  • Keep one language style (English/Bangla/Banglish) per file.