首页 > 试题广场 >

以下代码中,哪一行会抛出错误?```javascriptco

[单选题]
以下代码中,哪一行会抛出错误?
const frozen = Object.freeze({ nested: { value: 1 } });
frozen.nested.value = 2;    // 行A
frozen.newProp = 'test';     // 行B(严格模式)
frozen.nested = {};           // 行C(严格模式)
  • 只有行A
  • 行B和行C
  • 行A、B和C
  • 只有行A和行C
Object.freeze() 使对象不可变,具体效果:
  1. 不能添加新属性
  2. 不能删除现有属性
  3. 不能修改现有属性的值
  4. 不能修改属性的描述符(writable、enumerable、configurable)
  const obj = Object.freeze({ name: "Alice", age: 30 });

  obj.name = "Bob";      // 静默失败(严格模式下抛出 TypeError)
  obj.newProp = "x";     // 同上
  delete obj.age;        // 同上

  console.log(obj);      // { name: "Alice", age: 30 } — 未变化

  注意事项:
  浅冻结:Object.freeze 只冻结对象的第一层,嵌套对象不受影响:
  const obj = Object.freeze({ nested: { x: 1 } });
  obj.nested.x = 99;    // 可以修改!
  console.log(obj.nested.x); // 99

  如需深度冻结,需递归处理:
  function deepFreeze(obj) {
    Object.keys(obj).forEach(key => {
      if (typeof obj[key] === "object" && obj[key] !== null) {
        deepFreeze(obj[key]);
      }
    });
    return Object.freeze(obj);
  }

  常见用途:
  - 定义常量配置对象,防止意外修改
  - 保护共享状态不被篡改
  - 配合函数式编程,强制不可变数据模式

  可用 Object.isFrozen(obj) 检查对象是否已被冻结。
发表于 2026-04-10 19:17:51 回复(0)