如何在现代浏览器中触发“undefined is not a function”?

How to trigger `undefined is not a function` in modern broswers?

我记得很久以前遇到过这个错误。今天想给不熟悉Javascript的朋友看看。 Chrome 而 Safari 却给了我这样的东西:

> const o = {};
< undefined
> o.doge()
< TypeError: o.doge is not a function (In 'o.doge()',' 'o.doge' is undefined)

Chrome Firefox 似乎也很友好。

如果没有这个有用的消息,我如何得到原始错误?

您可以尝试查找并下载记录了 original 错误的旧版浏览器。 (如果该版本仍然公开可用)。

在现代浏览器中您永远不会遇到该错误;错误来自js引擎本身而不是浏览器;如果除此之外没有其他 Type Error,现代引擎将 return 通过对 () 之前输入的内容应用(类似的)/(w+)/ 正则表达式来产生对开发人员更友好的错误并将其放在错误消息中检查:

v8 (chrome) message templates 将生成错误字符串(第 51、52 ​​行):

T(CalledNonCallable, "% is not a function")   

SpiderMoneky (mozilla) message templates(第51、54行):

MSG_DEF(JSMSG_NOT_FUNCTION,            1, JSEXN_TYPEERR, "{0} is not a function")

non-callable test case in v8 and a SpiderMokney test case


所以在现代浏览器中出现 undefined is not a function 错误消息的唯一方法是 undefined() :)

undefined()