2017-05-30 49 views
1

這可以通過獲取實際的變量名,或詳細的錯誤信息(如一個在瀏覽器的控制檯打印)如何獲取導致ReferenceError在JavaScript中被拋出的變量?

try { 
    alert(v); // v is undefined so a ReferenceError will be thrown 
} 
catch(err) { 
    alert(err.getVariableName()); // should return "v" 
} 

更新1來完成:我想這個錯誤從外部JS文件進行處理,所以我嘗試了以下內容:

<script>window.onerror = function(e){ console.log("caught error: "+e.message); return true;}</script> 
<script src="faulty.js"></script> 

但它返回未定義e.message,雖然try-catch語句內使用時,如@ Badacadabra的回答解釋

+1

嘗試'err.toString()'得到消息那將會在控制檯上打印 –

+0

如果你是爲了調試目的而這樣做,你可以設置一個斷點d瀏覽你的代碼,看看你在哪裏出錯。 –

回答

1

如果你只是想的名字,你可以在err.message使用String.prototype.split()

try { 
 
    alert(v); 
 
} catch (err) { 
 
    alert(err.message.split(' ')[0]); 
 
}


編輯

window.onerror處理程序具有特定的簽名。其第一個參數是錯誤消息,其最後一個參數是Error對象。在你的情況,你可以這樣做:

window.onerror = function (msg, url, line, col, err) { 
 
    console.log(err.message.split(' ')[0]); 
 
} 
 

 
alert(v);

或者只是這樣的:

window.onerror = function (msg) { 
 
    console.log(msg.split(' ')[1]); 
 
} 
 

 
alert(v);

+0

謝謝!請看看更新 – Russel

+0

@Russel:我修改了我的答案。告訴我,如果它是你想要的... – Badacadabra

+0

它適用於內聯腳本,但是,當使用外部腳本嘗試時,'err'爲'null','msg'爲'Script error'。有沒有可能與外部腳本一起使用它? – Russel

0

認爲你可能e.message正常工作有從默認的錯誤,以正則表達式像 正則表達式從err.message或err.stack

看着@ badacadra解決方案,嫌我的頭笑,他的解決方案是好的

+0

Badacadabra大聲笑解決方案的工作,好直觀的解決方案!' –

+0

是的,變量名是'err.message'中的第一個單詞。 'err.name'會返回錯誤的名稱('ReferenceError')。 :) – Badacadabra

相關問題