javascript基础知识系列:eval()
2012-08-09 11:39
381 查看
在用ztree.js做商品分类树状显示时遇到了JSON数据转换的问题,发现可以用eval做处理,在网上找资料学习了下:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
返回值
通过计算 string 得到的值(如果有的话)。
在解析JSON格式的数据时:如果服务器返回的是JSON字符串,需要将JSON字符串转换成JSON对象
View Code
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个
例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下
面两个执行结果是不同的:
字符串转换成json的三种方式:
第一种:eval方式解析
第二种:new Function形式
第三种:使用全局的JSON对象
另外:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下
name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:
eval(string): string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句返回值
通过计算 string 得到的值(如果有的话)。
说明
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。在解析JSON格式的数据时:如果服务器返回的是JSON字符串,需要将JSON字符串转换成JSON对象
View Code
var o={name:"张三", age:19}; //此处o是js对象 ,对象字面量 alert(o.name); //此时的str_json才是json类型的字符串 var str_json = '{"name":"张三", "age":19}'; //str_json是符合JSON规范的字符串 var oJSON = eval('('+str_json+')'); //使用eval()把JSON字符串转化成js对象oJSON alert(oJSON.name); //张三
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个
例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下
面两个执行结果是不同的:
alert(eval("{}"); // return undefined alert(eval("({})");// return object[Object]
字符串转换成json的三种方式:
第一种:eval方式解析
function strToJson(str){ var json = eval('(' + str + ')'); return json; }
第二种:new Function形式
function strToJson(str){ var json = (new Function("return " + str))(); return json; }
第三种:使用全局的JSON对象
function strToJson(str){ return JSON.parse(str); }
另外:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下
var str = '{name:"jack"}'; var obj = JSON.parse(str); // --> parse error
name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题
相关文章推荐
- 从零开始学_JavaScript_系列(48)——Promise(1)基础知识
- javascript基础知识系列:DOM学习
- 学习javascript基础知识系列第三节 - ()()用法
- 3 HTML&JS等前端知识系列之javascript的基础
- JavaScript 设计模式系列:基础知识
- 通过一段代码学习javascript基础知识系列
- 前端系列之JavaScript基础知识概述
- JavaScript系列(二:基础知识)
- 学习javascript基础知识系列第四节 - 闭包
- JavaScript知识夯实系列-1.JavaScript基础知识
- 学习javascript基础知识系列第二节 - this用法
- JavaScript知识夯实系列-2.基础语法
- 学习javascript基础知识系列第二节 - this用法
- JavaScript系列文章:详解正则表达式基本知识
- Javascript基础知识(三):函数参数(传参)
- 单点登录系列之一---基础知识
- Markdown系列(4)- 你不知道的Markdown基础知识
- memcached系列之1:memcached基础知识简介(为什么要使用memcached做缓存服务器)
- JavaScript学习总结(7)——JavaScript基础知识汇总
- JavaScript基础进阶知识汇总