必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

的介绍文章,JSON 必威:是 JavaScript 原生格式

2019-11-08 22:32 来源:未知

eval剖判JSON字符串的二个不是难点

2016/02/24 · JavaScript · JSON

原稿出处: 韩子迟   

前边写过风度翩翩篇 至于 JSON 的介绍小说,里面聊到了 JSON 的解析。大家都精晓,高端浏览器可以用  JSON.parse() API 将二个 JSON 字符串深入分析成 JSON 数据,微微欠妥点的做法,大家得以用 eval() 函数。

JavaScript

var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('(' + str + ')'); console.log(obj); // Object {name: "hanzichi", age: 10}

1
2
3
var str = '{"name": "hanzichi", "age": 10}';
var obj = eval('(' + str + ')');
console.log(obj); // Object {name: "hanzichi", age: 10}

 

是否注意到,向 eval() 传参时,str 变量外裹了意气风发层小括号?为啥要那样做?

大家先来拜会 eval 函数的概念以至利用。

eval() 的参数是一个字符串。假诺字符串表示了四个表明式,eval() 会对表明式求值。即使参数表示了三个或八个 JavaScript 评释, 那么 eval() 会试行表明。不要调用 eval() 来为算数表明式求值; JavaScript 会自动为算数表明式求值。

差相当少地说,eval 函数的参数是二个字符串,假使把字符串 “noString” 化管理,那么获得的将是正规的能够运营的 JavaScript 语句。

怎么说?举个栗子,如下代码:

JavaScript

var str = "alert('hello world')"; eval(str);

1
2
var str = "alert('hello world')";
eval(str);

履行后弹出 “hello world”。大家把 str 变量 “noString” 化,狰狞点的做法就是去掉外面的引号,内部调度(转义等卡塔尔,然后就变成了:

JavaScript

alert('hello world')

1
alert('hello world')

very good!那是正规的能够运作的 JavaScript 语句!运转之!

再重返伊始的难点,为啥 JSON 字符串要裹上小括号。假如不加,是其同样子的:

JavaScript

var str = '{"name": "hanzichi", "age": 10}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token :

1
2
var str = '{"name": "hanzichi", "age": 10}';
var obj = eval(str);  // Uncaught SyntaxError: Unexpected token :

恩,报错了。为啥会报错?试试把 str “noString” 化,实行一下:

JavaScript

{"name": "hanzichi", "age": 10}; // Uncaught SyntaxError: Unexpected token :

1
{"name": "hanzichi", "age": 10};  // Uncaught SyntaxError: Unexpected token :

不容置疑,一个 JSON 对象大概说是七个对象根本就不是能施行的 JavaScript 语句!等等,试试以下代码:

JavaScript

var str = '{name: "hanzichi"}'; var obj = eval(str); console.log(obj); // hanzichi

1
2
3
var str = '{name: "hanzichi"}';
var obj = eval(str);
console.log(obj); // hanzichi

这又是什么样鬼?不过给 name 加上 “” 又报错?

JavaScript

var str = '{"name": "hanzichi"}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token : console.log(obj);

1
2
3
var str = '{"name": "hanzichi"}';
var obj = eval(str);  // Uncaught SyntaxError: Unexpected token :
console.log(obj);

好啊,快晕了,其实还可以将 str “nostring” 化,看看是否能科学履行的 JavaScript 语句。前面二个的结果是:

JavaScript

{name: "hanzichi"}

1
{name: "hanzichi"}

那真的是一条官方的 JavaScript 语句。{} 大家不但能在 if、for 语句等现象使用,甚至足以在其余时候,因为 ES6 以前 JavaScript 独有块级效率域,所以对于成效域什么的并不会有哪些冲突。去掉 {} 后 name: "hanzichi"也是官方的话语,贰个 label 语句,label 语句在跳出嵌套的轮回中那多少个好用,具体能够参照他事他说加以考察 label,而作为 label 语句的号子,name 是不能够带引号的,标识能放在 JavaScript 代码的别的地点,用不到也没提到。

生龙活虎经二个目的有了七个 key,比方 {name: "hanzichi", age: 10} ,ok,三个 label 语句?将 “hanzhichi” 以致 10 分别作为是说话,然则 讲话之间只可以用封号连接!(表明式之间能力用逗号卡塔 尔(阿拉伯语:قطر‎。所以改成上边那样也是未曾难题的:

JavaScript

var str = '{name: "hanzichi"; age: 10}'; var obj = eval(str); console.log(obj); // 10

1
2
3
var str = '{name: "hanzichi"; age: 10}';
var obj = eval(str);  
console.log(obj); // 10

越扯越远,随笔在此以前代码的大错特错的案由是找到了,为啥套个括号就能够缓慢解决呢?简单的话,() 会把语句调换到说明式,称为语句表明式。括号里的代码都会被撤换为表明式求值而且重返,指标字面量必需作为表明式而存在

本文并不会大谈表明式,关于表明式,能够参照他事他说加以考查文末链接。值得记住的一些是,表明式永恒有三个再次来到值。超过一半表明式会卷入在() 内,小括号内不可能为空,若是有多个表明式,用逗号隔绝,也正是所谓的逗号表明式,会重返最终叁个的值。

聊起表明式,一定要提函数表明式,以前翻译过风流倜傥篇有关立即实行函数表达式的小说,能够参照下,文末。

Read More:

  • [译]JavaScript中:表达式和话语的分别
  • (译卡塔尔安详严整javascript立即试行函数表明式(IIFE)
  • 深深研讨javascript的 {} 语句块

    1 赞 1 收藏 评论

必威 1

javascript中eval解析JSON字符串,evaljson

我们都知道,高端浏览器能够用  JSON.parse() API 将三个 JSON 字符串解析成 JSON 数据,微微欠妥点的做法,我们得以用 eval() 函数。

var str = '{"name": "hanzichi", "age": 10}';
var obj = eval('(' + str + ')');
console.log(obj); // Object {name: "hanzichi", age: 10}

是不是注意到,向 eval() 传参时,str 变量外裹了生机勃勃层小括号?为何要如此做?

我们先来探问 eval 函数的定义以致接纳。

eval() 的参数是叁个字符串。假诺字符串表示了二个表明式,eval() 会对表达式求值。假若参数表示了三个或八个 JavaScript 评释, 那么 eval() 会施行注脚。不要调用 eval() 来为算数表明式求值; JavaScript 会自动为算数表明式求值。

简单易行地说,eval 函数的参数是一个字符串,若是把字符串 “noString” 化管理,那么获得的将是例行的能够运营的 JavaScript 语句。

怎么说?举个栗子,如下代码:

var str = "alert('hello world')";
eval(str);

实践后弹出 “hello world”。我们把 str 变量 “noString” 化,残忍点的做法就是去掉外面包车型地铁引号,内部调治(转义等卡塔 尔(阿拉伯语:قطر‎,然后就成为了:

alert('hello world')

very good!那是常规的可以运转的 JavaScript 语句!运维之!

再回到开端的主题材料,为啥 JSON 字符串要裹上小括号。假使不加,是以此样子的:

var str = '{"name": "hanzichi", "age": 10}';
var obj = eval(str); // Uncaught SyntaxError: Unexpected token :

恩,报错了。为啥会报错?试试把 str “noString” 化,推行一下:

{"name": "hanzichi", "age": 10}; 
// Uncaught SyntaxError: Unexpected token :

必然,一个 JSON 对象恐怕说是五个目的根本就不是能实施的 JavaScript 语句!等等,试试以下代码:

var str = '{name: "hanzichi"}';
var obj = eval(str);
console.log(obj); // hanzichi

那又是怎么样鬼?不过给 name 加上 “” 又报错?

var str = '{"name": "hanzichi"}';
var obj = eval(str); // Uncaught SyntaxError: Unexpected token :
console.log(obj);

好吧,快晕了,其实照旧足以将 str “nostring” 化,看看是否能准确推行的 JavaScript 语句。后边三个的结果是:

{name: "hanzichi"}

那着实是一条官方的 JavaScript 语句。{} 大家不但能在 if、for 语句等情况使用,以致能够在别的时候,因为 ES6 在此以前 JavaScript 唯有块级效能域,所以对于作用域什么的并不会有怎么着冲突。去掉 {} 后 name: "hanzichi"也是官方的言语,二个 label 语句,label 语句在跳出嵌套的巡回中卓殊好用,具体能够参照 label,而作为 label 语句的标记,name 是无法带引号的,标识能放在 JavaScript 代码的其余地点,用不到也没提到。

假定三个指标有了四个 key,比方 {name: "hanzichi", age: 10} ,ok,多个label 语句?将 “hanzhichi” 以致 10 分别作为是唇舌,不过语句之间只可以用封号连接!(表达式之间工夫用逗号卡塔 尔(阿拉伯语:قطر‎。所以改成上边那样也是绝非难题的:

var str = '{name: "hanzichi"; age: 10}';
var obj = eval(str); 
console.log(obj); // 10

越扯越远,文章开头代码的不当的案由是找到了,为何套个括号就能够消除吧?轻便的话,() 会把语句调换来表明式,称为语句表明式。括号里的代码都会被更改为表达式求值並且再次回到,对象字面量必得作为表达式而存在。

正文并不会大谈表达式,值得记住的少数是,表达式永世有一个重回值。大多数表明式会卷入在() 内,小括号内不能够为空,假诺有四个表明式,用逗号隔绝,也正是所谓的逗号表明式,会重回最终贰个的值。

本课程主要重介绍eval()函数的语法与应用办法,及在后头小编还补充了eval()深入解析json数据的连带例子,希望小说能支援到各位深入精晓eval()使用格局吧。

JS中Eval解析JSON字符串的一个寻常,jsevaljson字符串

以前写过风姿浪漫篇 关于 JSON 的介绍文章,里面说起了 JSON 的解析。大家都知晓,高端浏览器能够用 JSON.parse() API 将三个 JSON 字符串分析成 JSON 数据,稍稍欠妥点的做法,我们能够用eval() 函数。

JSON (JavaScript Object Notation卡塔尔意气风发种简易的数码格式,比xml更轻松。 JSON 是 JavaScript 原生格式,那代表在 JavaScript 中处理 JSON 数据没有必要其他至极的 API 或工具包。

JSON的法则很简短: 对象是叁个冬日的“‘名称/值'对”集合。三个目的以“{”(左括号卡塔尔初叶,“}”(右括号卡塔 尔(英语:State of Qatar)截至。各类“名称”后跟一个“:”(冒号卡塔尔;“‘名称/值' 对”之间选用“,”(逗号卡塔尔分隔

var str = '{"name": "hanzichi", "age": 10}';
var obj = eval('(' + str + ')');
console.log(obj); // Object {name: "hanzichi", age: 10}

是或不是注意到,向 eval() 传参时,str 变量外裹了生机勃勃层小括号?为何要如此做?

大家先来走访 eval 函数的定义以至接收。

eval() 的参数是贰个字符串。固然字符串表示了三个表明式,eval() 会对表达式求值。若是参数表示了二个或多少个 JavaScript 注解, 那么 eval() 会施行评释。不要调用 eval() 来为算数表明式求值; JavaScript 会自动为算数表明式求值。

粗略地说,eval 函数的参数是二个字符串,倘若把字符串 "noString" 化管理,那么获得的将是健康的能够运维的 JavaScript 语句。

怎么说?举个栗子,如下代码:

var str = "alert('hello world')";
eval(str);

施行后弹出 "hello world"。我们把 str 变量 "noString" 化,严酷点的做法正是去掉外面包车型大巴引号,内部调治(转义等卡塔 尔(阿拉伯语:قطر‎,然后就成为了:

alert('hello world')

very good!那是例行的能够运营的 JavaScript 语句!运转之!

再回到最先的标题,为何 JSON 字符串要裹上小括号。借使不加,是以此样子的:

var str = '{"name": "hanzichi", "age": 10}';
var obj = eval(str); // Uncaught SyntaxError: Unexpected token :

恩,报错了。为啥会报错?试试把 str "noString" 化,实施一下:

{"name": "hanzichi", "age": 10}; // Uncaught SyntaxError: Unexpected token :

必然,一个 JSON 对象可能说是多个指标根本就不是能施行的 JavaScript 语句!等等,试试以下代码:

var str = '{name: "hanzichi"}';
var obj = eval(str);
console.log(obj); // hanzichi

那又是怎么着鬼?不过给 name 加上 "" 又报错?

var str = '{"name": "hanzichi"}';
var obj = eval(str); // Uncaught SyntaxError: Unexpected token :
console.log(obj); 

好吧,快晕了,其实还能够将 str "nostring" 化,看看是否能科学实行的 JavaScript 语句。前者的结果是:

{name: "hanzichi"}

那真的是一条官方的 JavaScript 语句。{} 大家不但能在 if、for 语句等现象使用,以致能够在别的时候,因为 ES6 早前 JavaScript 只有块级功用域,所以对于成效域什么的并不会有何冲突。去掉 {} 后 name: "hanzichi" 也是官方的说话,三个 label 语句,label 语句在跳出嵌套的巡回中十二分好用,具体能够参见 label,而作为 label 语句的记号,name 是无法带引号的,标识能放在 JavaScript 代码的别的职分,用不到也没涉及。

要是三个指标有了多少个 key,例如 {name: "hanzichi", age: 10},ok,三个label 语句?将 "hanzhichi" 以至 10 分别作为是唇舌,但是语句之间只好用封号连接!(表明式之间技艺用逗号卡塔尔国。所以改成下边那样也是绝非难题的:

var str = '{name: "hanzichi"; age: 10}';
var obj = eval(str); 
console.log(obj); // 10

越扯越远,小说开端代码的错误的原由是找到了,为何套个括号就能够减轻呢?轻松的话,() 会把语句转变到表明式,称为语句表明式。括号里的代码都会被更改为表明式求值并且再次来到,对象字面量必需作为表明式而留存。

正文并不会大谈表明式,关于表明式,能够参见文末链接。值得记住的一些是,表达式长久有多少个再次来到值。一大半表明式会卷入在() 内,小括号内不能够为空,假诺有多少个表明式,用逗号隔离,也正是所谓的逗号表明式,会回来最终三个的值。

如上所述是小编给我们介绍了JS中Eval剖析JSON字符串的二个没反常,希望对大家有所帮忙!

您恐怕感兴趣的篇章:

  • javascript eval和JSON之间的联络
  • js下用eval生成JSON对象
  • jqeury eval将字符串转变json的方法
  • jquery eval拆解深入分析JSON中的注意点介绍
  • js使用eval解析json(js中使用json)
  • js使用eval深入分析json实例与注意事项分享
  • 为什么JS中eval管理JSON数据要加括号
  • JS使用eval解析JSON的注意事项解析
  • javascript巧用eval函数组装表单输入项为json对象的措施

大家都理解,高端浏览器可以用 JSON.parse() API 将二个 JSON 字符串拆解剖判成 JSON 数据,稍稍欠妥点的做法,...

 

您可能感兴趣的文章:

  • JS使用eval解析JSON的注意事项分析
  • js使用eval拆解剖析json实例与注意事项分享
  • js使用eval解析json(js中使用json)
  • jquery eval分析JSON中的注意点介绍

以前写过豆蔻年华篇 关于 JSON 的介绍小说,里面聊起了 JSON 的解析。我们都精通,高端浏览器...

前不久提及js中尽量不要选择eval,但是eval到底是何许那?明日大家就说说eval的这一点事。  

率先看一下本定义:

概念和用法

eval() 函数可计算有个别字符串,并进行个中的的 JavaScript 代码。

语法

eval(string)

 

参数

描述

 

string    必得。要总括的字符串,在那之中蕴涵要总计的 JavaScript 表明式或要实行的语句。   

返回值

通过总括 string 得到的值(倘使有个别话卡塔 尔(阿拉伯语:قطر‎。

说明

该方法只选取原始字符串作为参数,假如 string 参数不是原始字符串,那么该措施将不作任何变动地回到。因而请不要为 eval() 函数字传送递 String 对象来作为参数。

若果策动覆盖 eval 属性或把 eval() 方法予以另叁个属性,并透过该属性调用它,则 ECMAScript 完结允许抛出二个EvalError 相当。

抛出

要是参数中一直违法的表达式和讲话,则抛出 SyntaxError 分外。

借使违法调用 eval(),则抛出 EvalError 非凡。

举例传递给 eval() 的 Javascript 代码生成了叁个特别,eval() 将把该特别传递给调用者。

提醒和注释

TAG标签:
版权声明:本文由必威发布于必威-前端,转载请注明出处:的介绍文章,JSON 必威:是 JavaScript 原生格式