2

这段代码在 Chrome 上的行为很有趣(在这里小提琴):

try {
   open('6:-=');
} catch(e) {}

首先,尽管代码被包装在 try-catch 中,但还是会抛出错误:

无法打开带有无效 URL '%36:%04-=' 的窗口。

其次,在 URL 中插入无关字符,即%3%04

为什么 try-catch 不拦截错误,为什么 URL 有那些额外的字符?

4

3 回答 3

5

try/catch没有任何影响,因为它不是例外。这只是打印到控制台的错误消息。你可以证明:

open('6:-=');
console.log(1);  // logged as usual

基本上,它就像console.error()不抛出异常一样,但它会向控制台打印一条类似异常的消息。

于 2012-09-01T15:09:18.857 回答
3

您的小提琴在冒号后面的字符串中包含一个不可打印的字符,ASCII 代码为 4 6:-=,它是 URL 编码的,如%04显示的错误中所示。此外,6:提供的 URL 部分被解释为 URL 方案,它不能以数字开头,因此 Chrome URL 显然%36也引用了 6,尽管 RFC 没有规定这种行为。

于 2012-09-01T15:10:42.557 回答
2

第一:正如 pimvdb 所说,这是因为它实际上并不是一个例外。

第二: %04 是 JSFiddle 插入的不可见字符。%36 是 Chrome 在为 URL 方案编码时将其转换为 %36 的数字 6。更新了没有 %04 的小提琴

于 2012-09-01T15:07:54.320 回答