2

所以我不完全确定这是可能的,但我很好奇是否有可能破解“未定义”对象的定义。首先,这样做的目的是防止在对未定义的对象执行 .replace 时启动错误。是否有可能进入“后端”(甚至有这样的事情吗??)并向未定义的对象添加一个方法(如果它甚至是首先定义的??)。基本上类似于

undefined.prototype.replace = function(v,r){ return false };

显然,这适用于字符串或对象,但未定义,本质上似乎没有定义。但感觉你应该仍然可以处理它,因为 javascript 将它作为可用的最终结果。

谢谢你的时间!我真的很好奇这里会出现什么!

编辑:主要问题是我正在与其他 8 位具有版本控制功能的开发人员共同开发,而一些新加入的人并不熟悉 javascript(或对此问题的良好错误处理),所以我想做一个必要时可以接收默认返回的微小错误的全局处理程序。看起来这个想法行不通。也许是一个全球性的尝试和捕捉场景?

4

3 回答 3

1

4.3.2 原始值

第 8 条中定义的 Undefined、Null、Boolean、Number 或 String 类型之一的成员。

注意原始值是直接在语言实现的最低级别表示的数据。

4.3.10 未定义类型

唯一值是未定义值的类型。

如您所见undefined,这是一个原始值,因此您无法为其定义属性。因为它不是一个对象。想到它的最佳方式是null. 唯一的区别是这null意味着故意为空,而undefined对于那些尚未定义的变量,它是一个默认值和类型。

于 2010-10-07T18:10:38.437 回答
0

undefined 类似于 null;它不是具有要覆盖的原型的对象。我认为你不能用 js 代码来做到这一点——你必须改变特定的 js 解释器处理 undefined 的方式。这样做基本上是在改变 javascript。

对于在未定义上调用方法时没有出错的具体示例;你为什么想这么做?即使可能,您只是在掩盖代码中的错误,以后可能会发生更糟糕的事情。

你总能做到

var obj = getObj()

if (obj && obj.replace) obj.replace()...

以防止未定义的错误...

是否有任何语言允许您在未定义的值上调用方法而不会出错?

于 2010-10-07T18:03:22.853 回答
0

这现在可能适用于某些浏览器,但我不会这样做。早期的 ECMAScript 规范undefinedundefined. 更好的方法是测试该值是否未定义:

if (x !== undefined) {
    // OK
} else {
    // do nothing/set default value/skip
}
// alternate approach:
if (typeof x != "undefined") {
    // OK
} else {
    // do nothing/set default value/skip
}

请注意,在第一种情况下,您必须使用!==or ===,因为一些奇怪的情况,如undefined == null返回 true。

于 2010-10-07T18:09:37.067 回答