重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
简单来说就是执行js语句,只不过这里的js语句是一个字符串,一个可以任意拼接的字符串,但前提是这个字符串是可执行的,例如:
成都创新互联主营余姚网站建设的网络公司,主营网站建设方案,App定制开发,余姚h5成都小程序开发搭建,余姚网站营销推广欢迎余姚等地区企业咨询
function(){
var data;
eval("data="+"12");
//相当于"data=12",这里是为了说明"12"这个值可以是另一个变量,
//而这个变量的值的来历则是你定的。
alert(data);
}
当上面这个函数执行的时候,页面会弹出12的字样,这说明,写在eval中的字符串被当做一个赋值语句执行了。
如果需要在页面刷新的时候默认执行一次点击事件,可以参考下面的方法实现:
1、使用原生js实现
使用原生js主要用到了window.onload方法:
onload 事件会在页面或图像加载完成后立即发生。
语法:onload="SomeJavaScriptCode"
参数SomeJavaScriptCode是必须的规定该事件发生时执行的 JavaScript。
实现代码:
script
window.onload = function() {
requestFullScreen();//直接执行onclick中的函数就行
}
/script
将代码放到body标签最下面即可。
2、使用Jquery实现
使用jquery实现该效果主要用到了jquery.ready(fn)和jquery.trigger()方法:
jquery.ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
jquery.trigger(type,[data]):在每一个匹配的元素上触发某类事件。
实现代码:
$(function() {
$("#sdsd").trigger("click");//触发button的click事件
});
JavaScript eval() 函数
JavaScript 全局对象
定义和用法:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:
eval(string)
返回值:
通过计算 string 得到的值(如果有的话)。
说明:
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
抛出:
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
扩展资料:
调用eval函数的三种情况:
1、直接调用
直接调用时,eval函数相关的执行环境属性ThisBinding,LexicalEnvironment,VariableEnvironment的值如下:
a) ThisBinding是调用eval函数时,调用方执行环境的ThisBinding
b) LexicalEnvironment是调用eval函数时,调用方执行环境的LexicalEnvironment
c) VariableEnvironemnt是调用eval函数时,调用方执行环境的VariableEnvironment
2、间接调用
所谓间接调用,即将eval赋值给另一个变量后在调用
3、严格模式下的eval
在严格模式下,eval的LexicalEnvironment,VariableEnvironment指向属于eval自己的Lexcial Environment,而不是调用方的Lexical Environment,但是ThisBinding还是调用方的ThisBinding。
同时,在严格模式下如果eval直接调用,那么eval的Lexical Environment的outer指针指向调用方的Lexical Environment,否则,如果是间接调用,那么eval的Lexical Environment的outer指针指向全局环境的Lexical Environment。
参考资料来源:百度百科--eval()
js中eval()和$.parseJSON()的区别以及JSON.stringify()
1.第一个区别是:安全性
json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢?
JSON.parse()之可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的
如:
[javascript] view plain copy
var str = 'alert(1000.toString())';
eval(str);
JSON.parse(str);
用eval可以解析,并且会弹出对话框,而用JSON.parse()则解析不了。 其实alert并没有什么坏处,可怕的是如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题。
注意:某些低级的浏览器尚不支持JSON.parse()
《高性能JavaScript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
2.第二个区别:JSON.parse()解析的必须是json格式的字符串要不报错,而eval()则没有这么严格
在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。
如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常
json的解析方法共有两种:eval 和 JSON.parse(),如:
[javascript] view plain copy
var jsonStr= '{"name":"lulu", "sex":"female"}';
var evalJson=eval('('+jsonStr+')');
var jsonParseJson=JSON.parse(jsonStr);
这样就把json格式的字符串jsonStr转换成了JSON对象。
但是区别是:
[javascript] view plain copy
var age = 27;
var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';
var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28
var jsonParseJson=JSON.parse(jsonStr);//报错
从上面eval()函数的用法我们可以看出eval()函数在解析json格式的字符串时要加上圆括号如eval('('+jsonStr+')'),这是因为:
eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
JSON.stringify()
JSON.stringify()是把json数据转化成json格式的字符串如:
[javascript] view plain copy
var jsonObj = {"name":"lulu","sex":"female"};
var jsonStr = JSON.stringify(jsonObj);
结果是:
'{"name":"lulu", "sex":"female"}'
贴出来你的data内容,很可能就是你的json格式有问题。。。
要保证data是字符串,如果已经是json数组了,你干嘛还要eval。。