eval
1 | var json = '{"a":"1", "b":2}'; |
为什么要加括号呢? 因为js中{}通常是表示一个语句块,eval只会计算语句块内的值进行返回。加上括号就变成一个整体的表达式。
1 | console.log( eval('{}') ); // undefind |
eval作用域问题
在局部环境使用eval便会创建局部变量。可以显示指定eval调用者来改变上下文环境。
1
2
3
4
5
6
7 var s = 1;
function a() {
eval('var s=2');
console.log(s);
}
a(); // 2
console.log(s); // 1
1 | var s = 'global'; |
对参数json进行校验防止xss漏洞
1 | var rx_one = /^[\],:{}\s]*$/; |
递归手动扫描每个字符
new Function 函数声明的传参形式
1 | var add = new Function('a, b', 'return a+b;'); |
1 | var jsonStr = '{ "age": 20, "name": "jack" }', |
插入script
模拟jsonP的方式拼接字符串然后以callBack的方式返回。