eval() javascript如何安全地获得指示,如果它可以评估和防止异常
How safely eval() javascript to get indication if it can be evaluated and prevent exceptions?
考虑以下代码。JsFiddle
var a = { prop : 1};
var b = { prop : 2};
var c = { prop : 3};
var d = { prop : 4};
var e = { prop : 5};
var obj = { a : a, b : b, c : c, d : d, e : e, f : 'f stands for fail' };
$(function(){
console.log('try/catch');
try{
for(var p in obj){
if (typeof p != 'undefined')
console.log(eval(p));
}
}catch(e){}
});
$(function(){
console.log('check typeof and you will get string');
for(var p in obj){
if (typeof p != 'undefined')
console.log(eval(p));
}
});
是否有一种方法可以检查"在线"(如typeof p != 'undefined'
),而不必使用try catch
,人们会得到eval()
的内容因任何原因无法评估的指示。基本上是在没有错误的情况下以某种方式获得true
,如果失败则获得false
。
您可以使用Function
构造函数检查代码是否在语法上有效,而无需对其求值。
function isSyntacticallyValid(p){
try {
new Function(p);
return true;
} catch(e){} // e will typically be a SyntaxError
return false;
}
在一般情况下,提前检查代码是不可能在没有错误的情况下完成的(这是一个无法确定的问题)。
例子:
var codes = [
"y = x+2", // is OK
"alert('Hey!')", // this one too
"random garbage" // but not this one
];
codes.forEach(function(p){
try {
new Function(p);
} catch(e){
console.log("Bad code : ", p);
}
});
相关文章:
- 如果 a 为 false,则 if(a) === if(false)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 如果href包含X,请更改href
- 如果localstorage为空,则显示欢迎消息
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如果元素's的ID以数字开头
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery模板,如果xx&&如果yy
- 如果值为空,如何设置输入的默认值?jQuery
- 如果选中了多个复选框,如何添加事件
- 如果未评估条件 - 则所有选项都不匹配
- “;如果(console.clear)“;评估为true
- eval() javascript如何安全地获得指示,如果它可以评估和防止异常
- 如果 Javascript 由服务器上的 Java 评估,则会出现安全问题
- 为什么跨域AJAX被阻止*如果*你不打算评估响应作为一个脚本