zoukankan      html  css  js  c++  java
  • js中eval() 方法的使用以及一些特殊的使用方式

    1、eval方法只能在非严格模式中进行使用,在use strict中是不允许使用这个方法的。

    2、eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值。如下:

     var code1='"a" + 2'; //表达式 
    var code2='{a:2}'; //语句 
    alert(eval(code1)); //->'a2' 
    alert(eval(code2)); //->2
    alert(eval('(' + code2 + ')')); //->[object Object]

      当eval中的字符串内是对象时加上括号则可以将原对象原样返回,如果将code2={a:2,b:3}时直接eval(code2)时会报错,加上括号就会将code2原样返回。

    3、eval直接在函数内部使用则返回的是局部变量

       function te (){

       eval('var a=1;')

         }

      te();

    alert(a);//这样会报错,因为a是局部变量,只能在te方法内使用

    4、有两种的处理方式可以使在函数内部使用的eval成为全局变量

    (1)利用window.eval()使其成为全局的

            function te (){

         window.eval(‘var a=1’)    

         }

         te();

     a 变量也是全局的

    (2) function te (){

        var a=eval;

        a(‘var b=1’);

         }

      te();

      这种方式下变量b 也是全局的。

    所以说在非严格的模式下,又多了一种方法将JSON字符串形式转换为对象的形式。就是利用var m=eval(‘(’+data+’)’),m是JSON对象。

    其功能和JSON.parse()是相似的,但是当已经为通过JSON.parse()转换为对象后的JSON不能再调用该函数继续进行转换,

    这样会报错,但是eval()方法不会当传入字符串是对象使继续使用上述的方式,然会返回原对象。

  • 相关阅读:
    webservice调用三种方式
    webservice访问权限控制利用TOMCAT用户
    ubuntu添加ppa源
    win7与ubuntu共享文件夹
    Cinema 4D* 中令人惊叹的体积效果
    线程并行化的概念及其用法
    什么是代码现代化?
    英特尔® 软件开发人员十大故事 | 五月
    英特尔® 实感™ 前置摄像头 SR300 和 F200 的比较
    面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
  • 原文地址:https://www.cnblogs.com/u-lhy/p/7062006.html
Copyright © 2011-2022 走看看