当前位置: 首页 > 面试题库 >

delete a.x vs a.x = undefined

岳泳
2023-03-14
问题内容

两者中的任何一个有实质性的区别吗?

delete a.x;

a.x = undefined;

哪里

a = {
    x: 'boo'
};

可以说它们相等吗?

(我没有考虑“V8喜欢不使用delete更好的东西”之类的东西)


问题答案:

它们不是等效的。主要区别在于设置

a.x = undefined

表示a.hasOwnProperty("x")仍将返回true,因此,它仍将for in循环显示,并在Object.keys()

delete a.x

表示a.hasOwnProperty("x")将返回false

它们相同的方式是您无法通过测试来判断属性是否存在

if (a.x === undefined)

如果要尝试确定某个属性是否存在,应该不执行该操作,应该始终使用

// If you want inherited properties
if ('x' in a)

// If you don't want inherited properties
if (a.hasOwnProperty('x'))

遵循原型链 调用delete将允许它向上扩展原型链,而将值设置为undefined将不会在链接的原型中寻找属性

var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
extended.x = "overriding";
console.log(extended.x); // overriding
extended.x  = undefined;
console.log(extended.x); // undefined
delete extended.x;
console.log(extended.x); // fromPrototype

删除继承的属性 如果您要删除的属性是继承的,delete则不会影响它。也就是说,delete仅从对象本身删除属性,而不从继承的属性删除。

var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
delete extended.x;
console.log(extended.x); // Still fromPrototype

因此,如果您需要确保对象的值是不确定的,delete则在继承该属性时将不起作用,undefined在这种情况下,您必须将其设置(覆盖)。除非正在检查的地方将使用hasOwnProperty,但是假设在所有检查它的地方都将使用将是不安全hasOwnProperty



 类似资料:
  • 问题内容: 两者都是其类型是所有类型(无人居住)的交集的术语。两者都可以在代码中传递,而不会失败,直到尝试对其进行评估。我能看到的唯一区别是,在Java中,存在一个漏洞,可以对一个操作进行精确的评估,即引用相等比较(),而在Haskell 中,如果不抛出异常就无法进行评估。这是唯一的区别吗? 编辑 我真正想解决的问题是,为什么在Java 中包含如此明显的错误决定,Haskell如何逃避呢?在我看来

  • 问题内容: 我猜想使用这种模式是新的热点,但是我不了解优点是什么,也不了解范围界定的含义。 模式: 所以我对此有几个问题。 封装这样的对象有特别的优势吗? 为什么要输入 窗口 和 文档 而不是正常访问? 到底为什么要传入? 将我们正在创建的对象直接附加到窗口是否是一个特别好的主意? 我习惯了我所说的Crockford风格的Java封装(因为我从Douglas Crockford Javascrip

  • 问题内容: 如何检查一个变量,如果是或,是什么之间的差异和? 和之间有什么区别(很难在Google上搜索“ ===”)? 问题答案: 如何检查一个变量,如果它还是… 是变量: …但请注意,如果is ,则后者也适用。 它是: …但是再次,请注意,最后一个是模糊的;如果是的话,也是正确的。 现在,尽管有上述情况, 检查这些内容的 通常 方法是使用它们是 假 的事实: 这由规范中的ToBoolean定义

  • 问题内容: 我想知道JavaScript 和之间的区别。 问题答案: 在JavaScript中,表示变量已被声明但尚未分配值,例如: 是分配值。可以将其分配给变量,以表示没有值: 从前面的示例中可以明显看出,和是两个不同的类型:是类型本身(未定义),而是对象。 和

  • 问题内容: 是否有一个通用的JavaScript函数检查一个变量的值,并确保它不还是?我有以下代码,但不确定是否涵盖所有情况: 问题答案: 您可以只检查 变量 是否具有值。那意味着 将计算为,如果是 不是 : - null - undefined - NaN - empty string (“”) - 0 - false 上面的列表代表ECMA- / Javascript中的所有可能值。在本节的规

  • 问题内容: 您是否曾经看过 jQuery 1.4 源代码,并注意到它是如何通过以下方式封装的: 我以前从未见过这种特殊的语法。那 在那里做什么?为什么 需要通过传递然后再次出现在末尾? 问题答案: undefined是一个普通变量,可以使用轻松更改。因此,jQuery创建了一个真正未定义的局部“未定义”变量。 由于性能原因,将window变量设为本地变量。因为当JavaScript查找变量时,它首

  • 问题内容: 为什么在JavaScript中被视为? 正在检查 与…相同 ? 并且: 和之间有什么区别? 问题答案: (name is undefined) You: What is name? () JavaScript:* ?什么啊 我不知道你在说什么您以前从未提到过。您是否在(客户端)看到其他脚本语言? You: What is name? JavaScript: I don’t know.。

  • 本文向大家介绍JavaScript中获取纯正的undefined的方法,包括了JavaScript中获取纯正的undefined的方法的使用技巧和注意事项,需要的朋友参考一下 1、为什么要获取undefined? 因为undefined在javascript中不是保留字,可以被用户当做变量来赋值,这样如果我们后期需要用到undefined来检测一个变量的话,那么检测的值就不准确了; 举个栗子: s