两者中的任何一个有实质性的区别吗?
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