obj.alexa = eval("(" + obj.alexa + ")");
不知道大家有木有注意到 eval() 还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是
原因:归结于 eval 本身的问题,由于 json 是以 {} 的方式来开始以及结束的,在 JavaScript 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执 行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为 JavaScript 代码块的开始和结束标记,那么 {} 将会被认为是执行了一句空语句。
使用 JSON.parse 的 reviver 函数时一定要注意遍历到最后的顶层对象 key 为 "",需要返回 value。 var json = '{"name":"Harvy", "age":36, "gender":"male"}'; var person = JSON.parse(json, function (key, value) { if(key != "") return ""+value+""; else return value; });
对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于 eval()中执行一次。这种方式也适合以普通 javascipt 方式获取 json 对象,以下举例说明:
var u = eval('('+user+')');
为什么要 eval 这里要添加 ('('+user+')') 呢?
原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为 javascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined alert(eval("({})");// return object[Object]
var user = '{name:"张三",age:23,'+ 'address:{city:"青岛",zip:"266071"},'+ 'email:"iteacher@haiersoft.com.cn",'+ 'showInfo:function(){'+ 'document.write("姓名:"+this.name+"");'+ 'document.write("年龄:"+this.age+"");'+ 'document.write("地址:"+this.address.city+"");'+ 'document.write("邮编:"+this.address.zip+"");'+ 'document.write("E-mail:"+this.email+"");} }'; var u = eval('('+user+')'); u.showInfo();
尝试一下 »
eval(string):函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval("var a=1"); // 声明一个变量a并赋值1。 eval("2+3"); // 执行加运算,并返回运算值。 eval("mytest()"); // 执行mytest()函数。 eval("{b:2}"); // 声明一个对象。
删除数值的元素,数组的大小不变,代码如下:
var myObj, i, x = "";myObj = { "name":"网站", "num":3, "sites":[ "Google", "Facesoho", "Taobao" ]};delete myObj.sites[1];x = "sites.length = " + myObj.sites.length + "<br><br>"; for (i in myObj.sites) { x += i + " " + myObj.sites[i] + "<br>";}document.getElementById("demo").innerHTML = x;
delete 运算符并不是彻底删除元素,而是删除它的值,但仍会保留空间。
运算符 delete 只是将该值置为 undefined,而不会影响数组长度,即将其变为稀疏数组(《JS权威指南》7.5节)。
更多内容可参考:JS 中彻底删除 JSON 对象组成的数组中的元素
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
877JSON.parse()
不知道大家有木有注意到 eval() 还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是
原因:归结于 eval 本身的问题,由于 json 是以 {} 的方式来开始以及结束的,在 JavaScript 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执 行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为 JavaScript 代码块的开始和结束标记,那么 {} 将会被认为是执行了一句空语句。
876JSON.parse()
875JSON.parse()
对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于 eval()中执行一次。这种方式也适合以普通 javascipt 方式获取 json 对象,以下举例说明:
为什么要 eval 这里要添加 ('('+user+')') 呢?
原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为 javascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
测试实例
尝试一下 »
874JSON.parse()
eval(string):函数可计算某个字符串,并执行其中的的 JavaScript 代码。
873JSON 数组
删除数值的元素,数组的大小不变,代码如下:
尝试一下 »
delete 运算符并不是彻底删除元素,而是删除它的值,但仍会保留空间。
运算符 delete 只是将该值置为 undefined,而不会影响数组长度,即将其变为稀疏数组(《JS权威指南》7.5节)。