位置: 编程技术 - 正文

JS中Eval解析JSON字符串的一个小问题(js中的eval)

编辑:rootadmin

推荐整理分享JS中Eval解析JSON字符串的一个小问题(js中的eval),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js eval解析json,js中eval函数是干嘛的,js eval json,js中的eval,js evaluate,eval json,js eval解析json,js中的eval,内容如对您有帮助,希望把文章链接给更多的朋友!

之前写过一篇 关于 JSON 的介绍文章,里面谈到了 JSON 的解析。我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用eval() 函数。

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔

是否注意到,向 eval() 传参时,str 变量外裹了一层小括号?为什么要这样做?

我们先来看看 eval 函数的定义以及使用。

eval() 的参数是一个字符串。如果字符串表示了一个表达式,eval() 会对表达式求值。如果参数表示了一个或多个 JavaScript 声明, 那么 eval() 会执行声明。不要调用 eval() 来为算数表达式求值; JavaScript 会自动为算数表达式求值。

简单地说,eval 函数的参数是一个字符串,如果把字符串 "noString" 化处理,那么得到的将是正常的可以运行的 JavaScript 语句。

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

执行后弹出 "hello world"。我们把 str 变量 "noString" 化,粗暴点的做法就是去掉外面的引号,内部调整(转义等),然后就变成了:

JS中Eval解析JSON字符串的一个小问题(js中的eval)

very good!这是正常的可以运行的 JavaScript 语句!运行之!

再回到开始的问题,为什么 JSON 字符串要裹上小括号。如果不加,是这个样子的:

恩,报错了。为什么会报错?试试把 str "noString" 化,执行一下:

毫无疑问,一个 JSON 对象或者说是一个对象根本就不是能执行的 JavaScript 语句!等等,试试以下代码:

这又是什么鬼?但是给 name 加上 "" 又报错?

好吧,快晕了,其实还是可以将 str "nostring" 化,看看是不是能正确执行的 JavaScript 语句。前者的结果是:

这确实是一条合法的 JavaScript 语句。{} 我们不仅能在 if、for 语句等场景使用,甚至可以在任何时候,因为 ES6 之前 JavaScript 只有块级作用域,所以对于作用域什么的并不会有什么冲突。去掉 {} 后 name: "hanzichi" 也是合法的语句,一个 label 语句,label 语句在跳出嵌套的循环中非常好用,具体可以参考 label,而作为 label 语句的标记,name 是不能带引号的,标记能放在 JavaScript 代码的任何位置,用不到也没关系。

一旦一个对象有了两个 key,比如 {name: "hanzichi", age: },ok,两个 label 语句?将 "hanzhichi" 以及 分别看做是语句,但是 语句之间只能用封号连接!(表达式之间才能用逗号)。所以改成下面这样也是没有问题的:

越扯越远,文章开头代码的错误的原因是找到了,为什么套个括号就能解决呢?简单来说,() 会把语句转换成表达式,称为语句表达式。括号里的代码都会被转换为表达式求值并且返回,对象字面量必须作为表达式而存在。

本文并不会大谈表达式,关于表达式,可以参考文末链接。值得记住的一点是,表达式永远有一个返回值。大部分表达式会包裹在() 内,小括号内不能为空,如果有多个表达式,用逗号隔开,也就是所谓的逗号表达式,会返回最后一个的值。

以上所述是小编给大家介绍了JS中Eval解析JSON字符串的一个小问题,希望对大家有所帮助!

javascript实现计时器的简单方法 计时器,在生活当中也是用得频繁的功能,比如锻炼身体,跑步比赛等等相关的活动.我们用Javascript来完成一个计时器.计时器,主要就是对时间的一个逻辑处

JSON简介以及用法汇总 JSON(JavaScriptObjectNotation)即JavaScript对象表示法,是一种轻量级的数据交换格式。它非常便于编程人员对数据的处理,也便于机器对数据的解析和生成,

JavaScript编程学习技巧汇总 本文实例为大家分享了JavaScript编程学习技巧,供大家参考,具体内容如下1、变量转换varmyVar="3.",str=""+myVar,//tostringint=~~myVar,//tointegerfloat=1*myVar,//tofloa

标签: js中的eval

本文链接地址:https://www.jiuchutong.com/biancheng/380397.html 转载请保留说明!

上一篇:浏览器检测JS代码(兼容目前各大主流浏览器)(浏览器检测js代码)

下一篇:javascript实现计时器的简单方法(如何用js实现一个简单的计算器)

  • 购买土地的契税怎么计算
  • 办房产证的完税证明是什么
  • 增值税结转和个体工商户的增值税缴纳分录如何做?
  • 受让应收账款的账务处理
  • 营利性医疗机构筹建是什么意思
  • 房地产项目公司是什么意思
  • 小规模电子发票一张可以开多少金额
  • 有限合伙企业应当
  • 员工预支工资账务处理
  • 上月发票错误退回怎么做账
  • 劳务所得报酬
  • 工商年报的应交税费包含哪些
  • 国有企业党组织工作应遵循的原则包括
  • 会计核算制度包括哪些准则
  • 开办费用怎么确定摊销年限及财务处理分析
  • 现金支票提取现金备用
  • 商标注册费用计入会计科目二级
  • 会员卡退钱是退全额吗
  • 开的是全额发票但是有分包如何做账务处理?
  • 制造业贷款用途
  • 营改增后填用作废的发票可以用来报销吗?
  • 营改增个体工商户优惠政策
  • 劳务派遣专用发票超过9万怎么办理
  • 同一建筑工程签不同合同
  • 取得抵债房产的涉税风险,你清楚吗?
  • 毛利润率的计算公式举例
  • 银行中间业务能开具增值税专票吗
  • 福利费不属于工资
  • 怎么计提担保赔偿准备金?
  • 固定资产的折旧从什么时候开始
  • 农业公司收到项目资金
  • 开具红字发票后如何在申报表中填写?
  • mac苹果系统怎么用
  • 劳务外包开什么样的发票
  • 子公司可以接总公司的工程吗
  • 以前年度多计提的附加税怎么冲回
  • 工程完工结转成本怎么算
  • 应付股利属于什么科目
  • 克拉莫16首
  • 销售过程会计核算实训过程
  • 一场雷雨还是一阵雷雨
  • 莱达尔湖, 英格兰坎布里亚郡湖区 (© Tranquillian1/iStock/Getty Images Plus)
  • 多目标pso
  • 哪些项目计入其他应收款
  • 稽查补缴以前年度的社保
  • python3 静态方法
  • 高速过路费电子发票怎么开
  • 结算备付金管理办法(2019年修订版)
  • MySQL常用命令关键字
  • 增值税专用发票和普通发票的区别
  • 销项发票属于哪个科目
  • 一般纳税人登记 核算地址
  • 累计扣除包括哪些
  • 小规模纳税人免税会计分录
  • 固定资产错记到费用了怎么办
  • 税控盘服务费会计科目
  • 企业到外地
  • 出口免税的税种包括
  • 暂估入账后费用怎么做账
  • 购买方退货的会计分录怎么写
  • mysql5.7.19 zip 详细安装过程和配置
  • 怎么用sql脚本创建数据库
  • mysql local-infile
  • 安装 apt
  • ubuntu软件安装
  • win7共享打印机提示0x000709
  • win10系统玩游戏闪退怎么解决
  • cocos lua教程
  • 批处理 >nul
  • pythonreduce函数的作用
  • cocos 2.5d
  • js 文件缓存
  • python3利用smtplib通过qq邮箱发送邮件方法示例
  • unityui
  • 如何在android studio中导入其他包
  • 2012 05-26 Unity3D研究院之两种方式播放游戏视频(二十五) 雨松MOMO
  • 基础的十进制按什么来算
  • 文化公司税务筹划
  • 关联公司销售
  • 国企残疾职工安置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设