我嘗試這個簡單的JavaScript代碼:的eval()=意外標記:錯誤
eval('{"Topics":["toto","tata","titi"]}')
在Chrome控制檯,例如,這將返回
SyntaxError: Unexpected token :
我試圖JSON上JSONLint和它的有效。
你看到錯誤了嗎?
我嘗試這個簡單的JavaScript代碼:的eval()=意外標記:錯誤
eval('{"Topics":["toto","tata","titi"]}')
在Chrome控制檯,例如,這將返回
SyntaxError: Unexpected token :
我試圖JSON上JSONLint和它的有效。
你看到錯誤了嗎?
FWIW,使用JSON.parse
代替。比eval
更安全。
第一:不要使用eval。
第二。只有使用eval才能做出評估。例如:
eval('var topics = {"Topics":["toto","tata","titi"]}');
因爲這是評估一個對象。 eval()要求您傳遞語法上有效的javascript,並且您所做的只是傳入一個裸露的對象。呼叫應該更像:
eval('var x = {"Topics":etc...}');
因爲eval
不力的表達情況和提供的字符串是無效 JavaScript程序,因此前三個令牌(以及它們是如何看)是:
{ // <-- beginning of a block, and NOT an Object literal
"Topics" // <-- string value, okay (note this is NOT a label)
: // <-- huh? expecting ";" or "}" or an operator, etc.
快樂編碼。
用途:
function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }
var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');
console.log(yourJson.Topics[1]); // print 'tata''
適用於我..不知道這是否是最佳做法,但它讓我開始運行 – Patrick
投票簡單 – bresleveloper
你必須這樣
eval('('+stingJson+')');
寫入一個字符串轉換爲對象
希望我的幫助!
這是唯一的解決方案,在我的情況下工作。謝謝! –
thx,這比接受的答案要好得多。指出eval是邪惡的:)是很好的,但是,這仍然回答了這個問題。 – apocalypz
優秀!答對了! –
如果您正在使用JQuery的使用功能$.parseJSON()
,工作對我來說,有同樣的問題
我可以問你爲什麼的eval(「函數(){}」)拋出一個異常呢? – BiAiB
@BiAiB出於與上述相同的原因:)'eval'的內容在*語句*上下文中運行,因此它被視爲FunctionDeclaration語法結構。由此產生的錯誤是「SyntaxError:函數語句需要一個名稱」。或者給它一個名字('eval('function f(){}'); f()')或者強制它成爲一個FunctionExpression結構體('f = eval('(function(){alert(「hi」))} )'); f()')。見http://es5.github.com/x13.html – 2013-01-09 20:53:51
謝謝!對我來說棘手的部分是因爲像'3'這樣的字符串被正確評估,而不是'function(){}'。第二個不能被評估爲ExpressionStatement:'一個ExpressionStatement不能以function關鍵字開始,因爲這可能會使它與FunctionDeclaration模糊不清(http://es5.github.com/x12.html#x12.4) – BiAiB