• 谈谈eval


    1. eval的定义和基本用法:eval(string)
      参数 -- 是要计算的字符串,其中包含要计算的js表达式或者要执行的语句
      返回值 -- 通过计算string得到的值
      说明 -- 该方法只接受原始字符串作为参数,否则将直接返回,所以不要传递String对象
          如果试图覆盖eval属性或者把eval()方法赋予另一个属性,并通过该属性调用他,则抛出异常
      抛出 -- 如果参数没有合法的表达式和语句,则抛出SyntaxError
          如果非法调用eval(),则抛出EvalError
          如果传递给eval()的js代码生成了一个异常,eval()将把该异常传递给调用者
    2. 在函数内执行全局代码
      (1).eval()函数动态执行的代码并不会创建新的作用域,其代码就是在当前的作用于执行的,因此eval()函数可以使用当前作用域的this和argument等对象

          var s='global'; //定义一个全局变量
          function demo1(){
            eval('var s="local"');
          }
          demo1();
          alert(s); //->global

      (1).对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码。
      (2).对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用window.eval则在全局空间执行。

          var X2={} //my namespace:)
          X2.Eval=function(code){
            if(!!(window.attachEvent && !window.opera)){
              //ie
              execScript(code); 
            }else{
              //not ie
              window.eval(code);
            }
          }
          var s='global';
          function demo3(){
            X2.Eval('var s="local"');
          }
          demo3();
          alert(s); //->'local'

    3. eval和JSON
      (1).eval函数试图去执行传入参数里的表达式或者合法的js语句,把最后一个表达式或者语句包含的值或者引用做为返回值
      (2).JSON 和 对象字面量(Object Literals)的区别:JSON 的名字部分严格用引号+名字来表示。
      (3).转化的JSON为JS对象时,需要将 JSON 字符串的外面包装一层园括号
        若不加外层的括号,那么eval会将大括号做为JS代码块的开始结束标志,则{}北认为是执行了一句空语句

          alert(eval("{}")); //return undefined 
          alert(eval("({})")); //return [object Object]
  • 相关阅读:
    JDBC
    两道关于回溯法,分支限界法的算法题
    旅行售货员问题
    jdbc学习
    mysql简单练习
    取会邮件客户端中的密码
    触发器的使用
    事务的数据一致性测试
    读取其他软件listview控件的内容
    sqlserver2008 ,只能选C盘目录,不能选其它盘目录
  • 原文地址:https://www.cnblogs.com/lindsayzhao103011/p/3186613.html
Copyright © 2020-2023  润新知