• 深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解


    深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

    (1)JSON.parse 函数

        将JSON字符串转换为对象

    (2)JSON.stringify()函数

        将 JavaScript 值转换为JSON字符串

    (3)eval()函数

        作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

        语法:eval(string)

        参数:string 必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句

        使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码

    // JSON.parse()
    var json = '{"name":"GDT","age":,"University":"GDUT"}';
    var info = JSON.parse(json);    //解析为JSON对象
    document.write(info); //output为[object Object]
    //eval()
    var json = '{"name":"GDT","age":,"University":"GDUT"}';
    var info = eval('(' + json + ')'); //解析为JSON对象
    document.write(info); //output为[object Object]

    eval()还要用一对圆括号将字符串包起来,

    原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式

    解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同

    alert(eval("{}")); // return undefined
    alert(eval('('+'{}'+')')); // return object[Object]

    BUT 如果恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval是可以操作的,而用JSON.parse()则不必担心这个问题。

  • 相关阅读:
    IE8及其以下浏览器边框圆角兼容问题
    关于git的一些指令及遇到的问题和解决方法
    vue项目环境搭建及运行
    webpack中的重要功能
    webpack 的重要功能
    c++ stl sort 自定义排序函数cmp要遵循 strict weak ordering
    spring boot 包jar运行
    windows上传文件到linux云服务器上
    最少硬币数目的问题
    leetcode 415 两个字符串相加
  • 原文地址:https://www.cnblogs.com/yangai/p/16186534.html
Copyright © 2020-2023  润新知