Chrome调试器中的十六进制值是什么?

时间:2019-04-08 23:05:05

标签: javascript google-chrome

我很好奇为什么在此Chrome调试器输出中似乎每个源都有一个十六进制数字...

WebSocket is already in CLOSING or CLOSED state.
(anonymous) @ websocket.js?13d9:192
exports.encodePacket @ browser.js?9636:123
(anonymous) @ websocket.js?13d9:170
WS.write @ websocket.js?13d9:202
Transport.send @ transport.js?87a5:110
Socket.flush @ socket.js?1006:565
Socket.sendPacket @ socket.js?1006:625
Socket.ping @ socket.js?1006:529
(anonymous) @ socket.js?1006:516
setTimeout (async)
Socket.setPing @ socket.js?1006:514
Socket.onPacket @ socket.js?1006:445
(anonymous) @ socket.js?1006:273
Emitter.emit @ index.js?ea2f:133
Transport.onPacket @ transport.js?87a5:145
Transport.onData @ transport.js?87a5:137
ws.onmessage @ websocket.js?13d9:147

例如,来源websocket.js13d9相关。

此十六进制值从何而来?它的用途是什么?

在这种情况下,我并不关心实际的错误,我仅以它为例。

1 个答案:

答案 0 :(得分:1)

这是文件URL的一部分。

无法确定在这种情况下是什么设置的,但这是在更新js文件时避免缓存的常用方法。

Chrome的控制台输出不会显示列号,因此:之后的行号。

const script = document.createElement('script');
const blob = new Blob([`const foo = "bar";
// should throw at line 3
throw new TypeError('not a baz');`], {type: "application/javacript"});
script.src = URL.createObjectURL(blob);
document.head.appendChild(script);

结果

Uncaught TypeError: not a baz            blob:null/96273a46-9...a3b1-12d1f1f3355c:3
   at 96273a46-9f81-4eed-a3b1-12d1f1f3355c:3

Error message from Chrome's console

如您所见,尽管Error.stack消息确实以script_url:lineno:colno的形式公开了列号,但这里仅显示行号

const script = document.createElement('script');
const blob = new Blob([`console.log(new Error('foo').stack);`], {type: "application/javacript"});
script.src = URL.createObjectURL(blob);
document.head.appendChild(script);


/*
Error: foo
    at blob:null/[random-blob-url]:1:13
*/