js_delete.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js_delete</title>
</head>
<body>

<script>
    /*参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete
    知识点:
        1.delete 操作符用于删除对象的某个属性。
    *       语法:
    *           delete object.property
                delete object['property']
    *       参数:
                object,对象的名称,或计算结果为对象的表达式。
                property,要删除的属性。
    *       返回值:
                对于所有情况都是 true,除非属性是一个(自己)不可配置的属性,
                这种情况下,非严格模式返回 false。
            异常:
                在严格模式下,如果属性是一个(自己)不可配置的属性,
                会抛出 Global_objects/SyntaxError。
    *       描述:
                与通常的看法不同,delete 操作符与直接释放内存无关。
                内存管理通过断开引用来间接完成的,查看内存管理页可了解详情。
                delete 操作符会从某个对象上移除指定属性。
    *           成功删除的时候回返回 true,否则返回 false。
    *           但是,以下情况需要重点考虑:
                如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true
                如果对象的原型链上有一个与待删除属性同名的属性,
                那么删除属性之后,对象会使用原型链上的那个属性
                (也就是说,delete操作只会在自身的属性上起作用)。
                任何使用 var 声明的属性不能(从全局作用域或函数的作用域中)删除。
                这样的话,delete操作不能删除任何在全局作用域中的函数
                (无论这个函数是来自于函数声明或函数表达式)。
                在对象(object)中的函数是能够用delete操作删除的。
                任何用let或const声明的属性不能够(从它被声明的作用域中)删除。
                不可设置的(Non-configurable)属性不能被移除。
                这意味着像 Math, Array, Object内置对象的属性以及
                使用 Object.defineProperty()方法设置为不可设置的属性不能被删除。
    * */

    // 1.更改对象的属性名。
    let o = {"y": 39.065345, "x": 117.045389, "z": 183.37};
    console.log("o:", o);
    // o: {y: 39.065345, x: 117.045389, z: 183.37}
    o.longitude = o.x, o.latitude = o.y, o.height = o.z;
    delete o.x, delete o.y, delete o.z;
    console.log("o:", o);
    // o: {longitude: 117.045389, latitude: 39.065345, height: 183.37}

    // 2.
    console.log("\n2.");
    let Employee = {
        age: 28,
        name: 'abc',
        designation: 'developer'
    };
    console.log(delete Employee.name);   // returns true
    console.log(delete Employee.age);    // returns true
    // 当试着删除一个不存在的属性时, 同样会返回true
    console.log(delete Employee.salary); // returns true
    console.log("Employee:", Employee);

    // 3.不可配置属性
    //  当一个属性被设置为不可设置,delete操作将不会有任何效果,
    //  并且会返回false。在严格模式下会抛出语法错误(SyntaxError)。
    console.log("\n3.");
    Employee = {};
    Object.defineProperty(Employee, 'name', {configurable: false});
    console.log(delete Employee.name);  // returns false
    console.log("Employee:", Employee);

    // 4.var, let以及const创建的属性,不可设置,不能被delete操作删除。
    console.log("\n4.");
    let nameOther = 'XYZ';
    // 通过以下方法获取全局属性:
    console.log(Object.getOwnPropertyDescriptor(window, 'nameOther'));
    // var 声明时:{value: "XYZ", writable: true, enumerable: true, configurable: false}
    // let 声明时:undefined
    // 因为“nameOther”使用var关键词添加,它默认被设置为不可设置(non-configurable)
    console.log(delete nameOther);  // false

    // // 5.
    // function f() {
    //     console.log(delete salary);  // false
    //     var salary;
    // }
    //
    // // "use strict";
    // f();
    //
    // // 6.
    // // 在全局作用域创建 adminName 属性
    // adminName = 'xyz';
    // // 在全局作用域创建 empCount 属性
    // var empCount = 43;
    // EmployeeDetails = {
    //     name: 'xyz',
    //     age: 5,
    //     designation: 'Developer'
    // };
    // // adminName 是全局作用域的一个属性。
    // // 因为它不是用 var 创建的,所在可以删除。
    // // 因此,它是可配置的。
    // console.log("6.");
    // console.log(delete adminName);  // true
    // // 相反,empCount 是不可配置的,因为创建它时使用了 var。
    // console.log(delete empCount);  // false
    // // delete 可用于删除对象的属性
    // console.log(delete EmployeeDetails.name);  // true
    // // 甚至属性不存在,它也会返回 "true"
    // console.log(delete EmployeeDetails.salary);  // true
    // // delete 对内建静态属性不起作用
    // console.log(delete Math.PI); // false
    // // EmployeeDetails 是全局作用域的一个属性。
    // // 因为定义它的时候没有使用 "var",它被标记为可配置。
    // console.log(delete EmployeeDetails);  // true
    //
    // // 7.delete 和原型链
    // // 在下面的示例中,我们删除一个对象的自己的属性,
    // // 而原型链上具有相同名称的属性可用:
    // function Foo() {
    //     this.bar = 10;
    // }
    //
    // Foo.prototype.bar = 42;
    // var foo = new Foo();
    // console.log("7.");
    // console.log(foo.bar);  // 10
    // // 返回 true,因为删除的是 foo 对象的自身属性
    // console.log(delete foo.bar);  // true
    // // foo.bar 仍然可用,因为它在原型链上可用。
    // console.log(foo.bar);  // 42
    // // 从原型上删除属性
    // console.log(delete Foo.prototype.bar);  // true
    // // 输出 "undefined",因为不能继承这个属性了
    // console.log(foo.bar);  // undefined
    //
    // // 8.删除数组元素
    // // 当你删除一个数组元素时,数组的长度不受影响。
    // // 即便你删除了数组的最后一个元素也是如此。
    // // 当用 delete 操作符删除一个数组元素时,被删除的元素已经不再属于该数组。
    // // 下面的例子中用 delete 删除了 trees[3]。
    // let trees = ["a", "b", "c", "d", "e"];
    // console.log("8.");
    // console.log("tress:", trees);
    // // tress: (5) ["a", "b", "c", "d", "e"]
    // console.log(delete trees[3]);  // true
    // console.log("tress:", trees);
    // // tress: (5) ["a", "b", "c", empty, "e"]
    // if (3 in trees) {
    //     // 这里不会执行
    //     console.log("3 in trees");
    // }
    // // 如果你想让一个数组元素继续存在但是其值是 undefined,
    // // 那么可以将 undefined 赋值给这个元素, 而不是使用 delete。
    // // 下面的例子中,trees[3] 被赋值为 undefined,但该元素仍然存在。
    // trees = ["a", "b", "c", "d", "e"];
    // trees[3] = undefined;
    // if (3 in trees) {
    //     // 这里会执行
    //     console.log("trees[3]:", trees[3]);
    //     // trees[3]: undefined
    // }
    //
    // // 移除一个数组元素,并改变数组的长度,
    // // 请使用splice方法。
    // // 通过使用splice,将trees[3]从数组中移除。
    // trees = ["a", "b", "c", "d", "e"];
    // trees.splice(3, 1);
    // console.log("trees:", trees);
    // // trees: (4) ["a", "b", "c", "e"]

</script>

</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值