在 javascript 中使用 delete 关键字,将未定义的值分配给对象文字有什么区别?
what is difference between using delete keyword , assign undefined value to object literal in javascript?
我遇到了一些深度复制原始对象文字的需求,除了一些键。
我知道展开运算符不会深入复制整个嵌套对象,但这不是这个问题的重点,所以让我们通过这个问题。
所以,回到最初的问题,
我认为使用 delete 关键字和将 undefined 分配给我要删除的目标 属性 之间没有区别。
const original = {
a: 1,
b: 2,
}
const copied = {
...original,
b: undefined
}
const explicitDelete = {
...original
}
delete explicitDelete["b"]
似乎 copied
方式不那么冗长,但这种方式完全没问题?
I see no difference between using delete
keyword and assign undefined
to target property
区别在于 属性 仍然存在,值为 undefined
:
"b" in copied // true
"b" in explicitDelete // false
如果你不喜欢delete
的冗长,你可以使用辅助函数
function omit(obj, ...keys) {
const res = {};
for (const p in obj)
if (!key.includes(p))
res[p] = obj[p];
return res;
}
omit(orignal, "b")
或:
const {b:_, ...withoutB} = original;
另见 How to omit specific properties from an object in JavaScript, How do I remove a property from a JavaScript object?, 。
肯定是有区别的。当您使用 delete
时,对象将不再具有 属性 名称。 in
运算符将表明这一点。将 属性 值设置为 undefined
不会产生这种效果。
delete删除条目,这就是区别
let original = {a: 1, b: 2}
console.log("Original object:")
console.log(original)
original["a"] = undefined
console.log("After setting to undefined:")
console.log(original)
delete original["a"]
console.log("After actually deleting:")
console.log(original)
delete
实际上是从对象中删除键,但是将其设置为未定义会保留键,而只是使键未定义。差异很细微,但在某些情况下可能变得很重要。
这是有区别的。使用 delta,您将从对象中完全删除键“b”。但是,当您分配 undefined 时,密钥仍然存在并且已分配 undefined 。
我遇到了一些深度复制原始对象文字的需求,除了一些键。 我知道展开运算符不会深入复制整个嵌套对象,但这不是这个问题的重点,所以让我们通过这个问题。
所以,回到最初的问题, 我认为使用 delete 关键字和将 undefined 分配给我要删除的目标 属性 之间没有区别。
const original = {
a: 1,
b: 2,
}
const copied = {
...original,
b: undefined
}
const explicitDelete = {
...original
}
delete explicitDelete["b"]
似乎 copied
方式不那么冗长,但这种方式完全没问题?
I see no difference between using
delete
keyword and assignundefined
to target property
区别在于 属性 仍然存在,值为 undefined
:
"b" in copied // true
"b" in explicitDelete // false
如果你不喜欢delete
的冗长,你可以使用辅助函数
function omit(obj, ...keys) {
const res = {};
for (const p in obj)
if (!key.includes(p))
res[p] = obj[p];
return res;
}
omit(orignal, "b")
或
const {b:_, ...withoutB} = original;
另见 How to omit specific properties from an object in JavaScript, How do I remove a property from a JavaScript object?,
肯定是有区别的。当您使用 delete
时,对象将不再具有 属性 名称。 in
运算符将表明这一点。将 属性 值设置为 undefined
不会产生这种效果。
delete删除条目,这就是区别
let original = {a: 1, b: 2}
console.log("Original object:")
console.log(original)
original["a"] = undefined
console.log("After setting to undefined:")
console.log(original)
delete original["a"]
console.log("After actually deleting:")
console.log(original)
delete
实际上是从对象中删除键,但是将其设置为未定义会保留键,而只是使键未定义。差异很细微,但在某些情况下可能变得很重要。
这是有区别的。使用 delta,您将从对象中完全删除键“b”。但是,当您分配 undefined 时,密钥仍然存在并且已分配 undefined 。