如果Object.create创建对象的新深度副本,从新创建的对象中删除属性后会发生什么?
预期输出:未定义
实际产出: Karna
密码
var obj1 = {name:"Karna",loc:"Bengaluru"};
var obj2 = Object.create(obj1);
delete obj2.name;
console.log(obj2.name);
你能帮我理解为什么吗。仍然引用obj1属性的名称?
有两点你应该注意:1-对象。create不复制原始对象,它创建一个新对象,参数对象作为所创建新对象的原型。(prototype属性不是可配置属性)2-delete操作符只处理对象的可配置属性。
因此,原型属性不能被
删除
运算符删除,因为它们是不可配置的。
Object.create
创建一个新对象,参数对象作为新创建对象的原型(参考新创建对象的__proto__
)。它没有将Obj1
的属性添加到Obj2
。因此,如果您在Obj2
上调用删除
,它将删除Obj2的属性,而不是原型中的属性。
例子:
var obj1 = { name: 'John' }
var obj2 = Object.create(obj1);
console.log(obj2.__proto__ === obj1) // returns true
console.log(obj2.hasOwnProperty('name')) // returns false;
console.log(obj2.name) // returns John
delete obj2.name; // returns true
console.log(obj2.name) // returns John, since delete will not traverse the prototype chain to delete keys
从 JSON 对象删除除了指定属性之外的任何其他属性。 使用 Object.keys() 方法遍历给定的 JSON 对象并删除给定数组中不包含的 keys 。 如果你传递一个特殊的键 childIndicator ,它也会深入地将这个函数应用到内部对象中。 const cleanObj = (obj, keysToKeep = [], childIndicator) => { Object.k
问题内容: 如何通过匹配对象属性从数组中删除对象? 请只使用本机JavaScript。 我在使用接头时遇到麻烦,因为每次删除的长度都会减少。使用克隆并在原始索引上进行拼接仍然会给您带来长度减少的问题。 问题答案: 我以为你用过这样的东西? 修复bug所需要做的就是在下一次减少,然后(也可以选择向后循环): 为了避免线性时间删除,可以编写要 保留 在数组上的数组元素: 为了避免在现代运行时中进行线性
问题内容: 如何删除JavaScript对象中或JavaScript对象中的所有属性? (问题与此数组类似) 问题答案: 您可以遍历对象: 如果您担心此属性删除不会使对象的proptype链运行起来,则还可以: 有关null与未定义的一些注意事项:
问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版
问题内容: 我有一个JSON: 我试图删除所有以 “ umb_” 开头的属性。这在json.net中可能吗? 输出将是这样的: 使用删除我能够做到,但是不能一次全部完成。 有什么建议吗? 问题答案: 您可以先解析字符串: 更新 或: 更新#2 您可以在子句中指定更多条件: 要么 或任何您需要的。
本文向大家介绍MongoDB的创建、更新和删除,包括了MongoDB的创建、更新和删除的使用技巧和注意事项,需要的朋友参考一下 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐, 同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题! 一、创建 按照我