JavaScript 复杂的<三元运算符和比较操作>的组合--案例(一)

在逆向的时候,碰上有些复杂的js代码,逻辑弄得人有点混;

因此本帖用来记录一些棘手的代码,方便自己记忆,也让大家拓展认识~

----前言

内容:

javascript 复制代码
function(e, t, n) {
                    try {
                        1 == (e = "{" == e[0] ? JSON.parse(e) : JSON.parse(webInstace.shell(e))).Status || 200 == e.Code ? r(e.Data) : 200 == e.code ? r(e.data) : a(e.Msg)
                    } catch (e) {
                        a(e)
                    }

解析:

总:

这段 JavaScript 代码是一个复杂的三元运算符和比较操作的组合。这段代码主要用于确定如何处理结果对象 e,看是直接作为 JSON 解析,是通过某个 webInstance.shell 函数调用得到解析,以及如何处理成功与否后的调用。

步骤:

1.首先,判断变量 e 的第一个字符是否是 {:
如果 e0 === "{" 条件为 true,则假定 e 是一个 JSON 字符串,所以尝试 JSON.parse(e) 来解析它。
如果不满足 e0 === "{"(即 e 的首字母不是 {),则调用 webInstance.shell(e) 方法,随后对返回的结果尝试 JSON.parse。
计算结束后,无论 e 由哪种方式解析,结果会重新赋值给变量 e。
2.接下来的比较操作是在尝试归类 e 是否标识了成功的状态。为此进行了多个等价性比较:
  1. 首先比较 e.Status 是否等于 1。如果等于,这说明操作是成功的,然后调用函数 r(e.Data) 并传入 e.Data。
  2. 如果第一个条件不成立(e.Status 不等于 1),则检查 e.Code 是否等于 200。如果等于 200,也被认为是成功的,同样调用函数 r(e.Data)。
  3. 如果 e.Code 不等于 200,则还会检查 e.code (注意这里的 code 是小写)是否等于 200。如此相等,则调用函数 r(e.data) (这里 e.data 是小写)。
3.如果所有上述都为 false,即 e 的 Status 和 Code(或 code,注意大小写)都不符合成功的条件,则调用函数 a(e.Msg) 并传入 e.Msg,它通常代表某种错误或状态消息。

综上所述,这段代码的目的是处理一个动态响应体 e。它首先尝试解析 e, 然后根据 Status 或 Code (或 code) 字段的值来判断操作是否成功,并根据这些判断结果调用相应的函数

相关推荐
豆瓣鸡14 分钟前
算法日记 - Day3
java·开发语言·算法
夏殇之殁44 分钟前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
韭菜炒鸡肝天1 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
Aaron - Wistron1 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
新中地GIS开发老师2 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
丙氨酸長鏈2 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄3 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰3 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#