Javascript 字符串中的单转义符和双转义符(反斜杠)有什么区别?

2023-12-04

在尝试回答这篇文章的问题后

另一个SO帖子

我注意到这

Function('return "\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"')()

or

Function('return "\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"')()

两者都返回相同的字符串 - “黄色按钮”。

关于我上面链接的问题,JS 代码片段是在标签中运行的。

我过去还注意到,在处理某些 JSON 字符串时,需要使用 '\' 而不是 '\'

什么时候有必要? 为什么有必要? 如果没有必要,那为什么要这么做呢?

链接和补充阅读对我很有帮助。

UPDATE:也许我没有提供足够的信息来问这个问题。

我明白何时以及为何需要逃避。

我想知道两件事

在上面的链接中,代码有两个功能;一个像这样嵌套在另一个中

Function(
  Function(
    'return\'\\141\\75\\160\\162\\157\\155\\160\\164\\50\\47\\105\\156\\164\\162\\145\\172\\40\\154\\145\\40\\155\\157\\164\\40\\144\\145\\40\\160\\141\\163\\163\\145\\47\\51\\73\\151\\146\\50\\141\\75\\75\\47\\164\\157\\164\\157\\61\\62\\63\\154\\157\\154\\47\\51\\173\\141\\154\\145\\162\\164\\50\\47\\142\\162\\141\\166\\157\\47\\51\\73\\175\\145\\154\\163\\145\\173\\141\\154\\145\\162\\164\\50\\47\\146\\141\\151\\154\\56\\56\\56\\47\\51\\73\\175\'')())()

这个脚本和这个脚本一样有效

Function(
  Function('return "\141\75\160\162\157\155\160\164\50\47\105\156\164\162\145\172\40\154\145\40\155\157\164\40\144\145\40\160\141\163\163\145\47\51\73\151\146\50\141\75\75\47\164\157\164\157\61\62\63\154\157\154\47\51\173\141\154\145\162\164\50\47\142\162\141\166\157\47\51\73\175\145\154\163\145\173\141\154\145\162\164\50\47\146\141\151\154\56\56\56\47\51\73\175"')())()

如果两个脚本都可以工作,为什么需要“\\”而不是“\”?我在这里缺少什么吗?

第二个问题是,

当需要“\\”而不是“\”时,是否存在基本情况?

我认为 sventschui 正在实现这一目标,但还没有完全实现。


I think 斯文特舒伊有正确的想法,让我尝试以不同的方式解释它。

当您使用定义字符串时str1='"\\101\\40\\171\\145\\154\\154\\157\\167\\40\\142\\165\\164\\164\\157\\156\\56"'

The \\是转义序列,内存中的实际字符串是(包括它周围的引号)"\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"


当您将字符串定义为str2="\101\40\171\145\154\154\157\167\40\142\165\164\164\157\156\56"

The \101,\40,... 是转义序列,内存中的实际字符串是(包括它周围的引号)"A yellow button"


当您创建一个Function(),它重新评估字符串(例如eval),对于第一种情况,str1现在它治疗\101, \40作为转义序列,返回的字符串是A yellow button,没有引号。

当您对第二个字符串执行相同的操作时,没有转义序列,只有常规字符,因此该字符串保持不变(除了它周围的引号)

var str1 = '"\\101"'; // "\101"
var str2 = '"\101"'; //  "A"

var str1Evaled = eval(str1); // \101 is the escape sequence, outputs A
var str2Evaled = eval(str2); // No escape sequence, a raw A

console.log({str1, str2, str1Evaled, str2Evaled});

//  Object {str1: ""\101"", str2: ""A"", str1Evaled: "A", str2Evaled: "A"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 字符串中的单转义符和双转义符(反斜杠)有什么区别? 的相关文章

  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • .textContent 不适用于克隆节点

    我正在尝试克隆一个 DOM 元素 然后替换其中的文本 这是一个非常简单的例子 https codepen io anon pen rmZbPR https codepen io anon pen rmZbPR 问题在于克隆似乎会阻止 tex
  • 在 Fortran 中按名称获取文件单元,反之亦然

    Fortran 90 有没有办法通过名称获取文件单元和通过单元号获取文件名 我知道这会很昂贵 但是我有很多文件名 我希望在创建它们后能够在子例程中重新访问它们 像这样的命令 inquire unit 12 opened openedq fi
  • angularjs在指令中查找div的属性

    Angular 新手 StackOverflow 新手 几天来一直试图解决这个问题 这是我的问题 我想将一组盒子居中 有没有办法访问 div 的属性 带有 id 或类名 并在指令中操作它们 在我的 html 中 我使用 ng repeat
  • 在javascript中从一个字节中获取两个半字节的最佳方法?

    我正在用 javascript 解析一个二进制文件 该文件每个字节存储两条信息 每个半字节一条信息 当然 这些值是 0 16 和 0 16 在文件格式的所有其他部分中 每个字节代表一条信息 因此我一直使用以下内容来成功获取我需要的数值 va
  • jQuery 已弃用“.toggle()”。寻求替代方法

    Since toggle was 已弃用 http bugs jquery com ticket 11786从 jQuery 我正在寻找一个新的简单解决方案 它将使我能够创建一个 阅 读更多 按钮 该按钮可以向下滑动一个段落 同时将按钮文本
  • Angular 2 - 内容未加载到路由器插座中

    我对 Angular 2 还是很陌生 希望你们能帮助我 我有一个相当简单的应用程序 有一个登录页面 成功登录后用户将被定向到带有侧菜单的页面 登录屏幕没有此侧边菜单 当用户注销时 他会再次被引导至登录页面 问题是登录后侧菜单变得可见 但其他
  • 如何使用另一个方法的签名创建一个新方法

    如何从一个类复制方法的签名 并在另一个类中创建具有相同签名的 代理方法 我正在用 python 编写一个 RPC 库 服务器支持对服务器端类 C 的远程调用 当客户端连接到服务器时 它应该为C创建一个具有相同签名的代理类 当程序调用代理实例
  • React Jest 示例不起作用

    尝试运行 Jest 测试 React 代码的示例 来自https github com facebook jest tree master examples react https github com facebook jest tree
  • addIceCandidate 参数为 null 会导致错误

    我正在尝试学习WebRTC 我已经在同一页面中实现了连接两个RTCPeerConnection 现在我正在尝试将它们分成两个单独的页面并连接它们 然而 在编写代码并交换报价和 答案之后 我注意到 initiator html 上的 addI
  • 使 for 循环中的函数调用同步

    我在请求中得到了一个字符串数组 每个字符串都包含要在本机 shell 上执行的命令 var process require child process function execCommand req res callback var pa
  • 无法调用 Node.js 中 ES6 定义的类中的方法 [重复]

    这个问题在这里已经有答案了 我正在使用 Node js Express js 和 MongoDB 制作一个应用程序 我正在使用 MVC 模式 并且还有单独的路由文件 我正在尝试创建一个控制器类 其中一个方法调用其中声明的另一个方法 但我似乎
  • 使用 JavaScript 将数据插入数据库时​​,在控制台中创建错误“超出最大调用堆栈大小”

    我进行了大量搜索来修复过去几天遇到的 JavaScript 错误 我看到很多问题都得到了解答堆栈溢出 但不幸的是 没有人符合我的错误 我想要的是发送一个简单的记录到database using JavaScript and PHP 但我得到
  • ArrayBuffer 到 String、String 到 ArrayBuffer 方法

    这个问题过去已经得到了答案 但我肯定地说它仍然没有答案 一般而言 几乎都有关于 ArrayBuffers 的文档 更不用说特定应用程序了 我已经研究了好几天了 没有任何结果 本质上 我需要尝试转换从文件读取器获得的 ArrayBuffer
  • 莫里斯图导出为 PDF?

    我正在使用 Morris js 创建图表 我需要将图表导出为 pdf 我可以看到图表是 svg 元素 我应该做什么来实现这个目标 我拿了莫里斯的一个样品 为你做了一把小提琴 http jsfiddle net 1roLdqte 48 htt
  • 单击时更改 CSS 属性

    我试图在单击另一个元素时更改一个元素的 CSS 我进行了很多搜索 但没有任何效果是完美的 目前我正在使用下面的代码 但它不起作用 谁能告诉我我错过了什么 div hello world div img src zoom png functi
  • 检查点是否在 OpenLayers 3 中的多边形内部

    当我在 OpenLayers 地图中绘制多边形时 我想知道标记是否位于多边形内部 我在OpenLayers API中搜索 但没有找到解决方案 你可以在这里看到我的完整代码link http plnkr co edit iI92XbxVDAg
  • Bootstrap 表单助手未选择完整的国家/地区名称

    我添加了引导表单助手来列出国家及其州 最初 它根本没有选择国家名称 但我设法用 jQuery 检索国家 地区名称 但它没有显示完整名称 这是表单的完整代码 div class signup form div class container
  • Open Layers 3 根据矢量图层的范围将地图居中?

    我想根据矢量图层特征 点 来定位地图的中心和缩放级别 我有一个 geojson 文件正在填充我的地图 var vectorSource new ol source Vector url assets js data geojson form

随机推荐