字符串中的空字符

2023-12-19

考虑这个字符串:

var s = "A\0Z";

它的长度为 3,由下式给出s.length. Using console.log你可以看到绳子没有被切断s[1] is "" and s.charCodeAt(1) is 0.

当你在 Firefox 中提醒它时,你会看到AZ。当您在 Chrome/Linux 中使用以下命令提醒它时alert(s), the \0终止字符串,你会看到A.

我的问题是:什么should浏览器和Javascript引擎做什么? Chrome 有 bug 吗?是否有文件定义应该发生什么?

由于这是一个关于标准的问题,所以需要一个参考。


什么浏览器should要做的是分别跟踪字符串及其长度,因为标准中不存在空终止符。 (字符串只是一个有长度的对象)。

什么铬seems要做的(我相信你的话)是使用以 \0 结尾的标准 C 字符串函数。回答你的一个问题:是的,这对我来说构成了 Chrome 处理中的一个错误alert()功能。

规范的正式规定是:

字符串文字是用单引号或双引号括起来的零个或多个字符。每个字符可以由转义序列表示。除了结束引号字符、反斜杠、回车符、行分隔符、段落分隔符和换行符之外,所有字符都可以按字面意思出现在字符串文字中。任何字符都可以以转义序列的形式出现。

Also:

字符串文字代表 String 类型的值。文字的字符串值 (SV) 是根据字符串文字各个部分贡献的字符值 (CV) 来描述的。

关于 NUL 字节:

EscapeSequence :: 0 [lookahead ∉ DecimalDigit] 的 CV [字符值] 是 字符(Unicode 值 0000)。

因此,NUL 字节应该只是“又一个字符值”并且没有特殊含义,这与它可能以 SV(字符串值)结尾的其他语言相反。

有关(有效)“字符串单字符转义序列”的参考,请参阅ECMAScript 语言规范第 7.8.4 节 http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4。该段落末尾有一个表格,列出了上述转义序列。

打算编写 Javascript 引擎的人可能可以从中学到什么:不要使用 C/C++ 字符串函数。 :)

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

字符串中的空字符 的相关文章

随机推荐

  • 适用于 Android 的“频移键控”解码器

    我正在尝试通过 Android 设备的音频端口传输一些数据 我使用 FSK 频移键控 我使用两个不同的频率来表示 1 和 0 是否有任何 Android 库或示例代码来 FSK 解码捕获的音频数据 你可能想看看这个 https code g
  • 在 Laravel 中允许多个密码重置令牌

    Laravel 5 7 密码重置系统的默认行为是在password resets删除该用户的任何其他表后 这种行为是由 Illuminate Auth Passwords DatabaseTokenRepository而且它似乎不可配置 p
  • 是否有 String.format(...) 的类型安全替代方案

    对于撰写错误 日志记录或任 何其他String消息String format 可以使用方法 不幸的是 这个方法不是类型安全的 因此以下源代码将抛出一个IllegalFormatException String s String format
  • 如何在 PowerShell 中抑制溢出检查?

    PowerShell 似乎在算术运算和转换后执行边界检查 例如 以下操作失败 byte a 255 a a byte 256 有没有办法强制溢出或类型转换 而无需通过模数或 C 和 Add Type 进行手动计算 您在 PowerShell
  • Capistrano 目标路径已存在,不是空目录

    在 Ubuntu 14 04 上使用 Capistrano 部署 Rails 应用程序时 出现以下错误 fatal destination path var www APP NAME repo already exists and is n
  • Qt - 有选择地允许单击进入较低的应用程序窗口

    即使在 Qt 应用程序中 是否也可以接收鼠标单击 对其进行评估 并在必要时让它落入 Qt 应用程序窗口下方可能发生的任何内容 注意Qt WA TransparentForMouseEvents在传递点击之前不利于对其进行评估 而且由于点击评
  • Python - 如何将饼图中的 autopct 文本颜色更改为白色?

    pie fbfrac labels fblabel autopct 1 1f pctdistance 0 8 startangle 90 colors fbcolor 我按照我想要的方式显示图表 但如果文本是白色而不是黑色 则文本在图中会更
  • 使用 async 和await 关键字的好处

    我是 C 中异步方法使用的新手 我读过这些关键词async and await通过异步某些方法来帮助使程序更具响应性 我有这个片段 第一种方式 public static void Main Console WriteLine Hello
  • 使用 SVG 作为背景图像

    我似乎无法让它按预期工作 我的页面根据加载的内容更改高度 如果需要滚动 则 svg 似乎不会拉伸 html height 100 background image url http www horizonchampion eu themes
  • 如何通过 iPhone 应用程序向 Facebook 中的某人发送好友请求?

    有没有办法通过iPhone应用程序发送好友请求 如果是 请帮助我 我在网上搜索过但没有得到解决方案 我得到以下代码来发送应用程序请求而不是发送好友请求 NSMutableDictionary variables NSMutableDicti
  • 用java将BitSet写入文件

    我有一个 BitSet 并想将其写入文件 我遇到了一个使用 writeObject 方法使用 ObjectOutputStream 的解决方案 我查看了java API中的ObjectOutputStream 发现你可以写其他东西 byte
  • 横向模式下的标签栏控制器

    我正在开发一个项目 需要在横向模式下使用应用程序 我通过将界面方向设置为横向来对 plist 文件进行更改 我也将 xib 文件中的方向更改为横向 但当应用程序在模拟器中启动时 选项卡栏控制器仍仅以纵向模式显示 任何人都可以帮忙解决这个问题
  • Angular2限制所有路由

    Helloo 我创建了一个守卫 import Injectable from angular core import Router CanActivate from angular router Injectable export clas
  • 尝试在 JavaScript 中使用 Gruber 的“改进的”URL 匹配正则表达式模式时,如何修复“无效组”错误?

    我正在尝试整合约翰 格鲁伯的一种改进的自由 准确的正则表达式模式 用于匹配 URL http daringfireball net 2010 07 improved regex for matching urls进入我的 JavaScrip
  • JS - 动态更改文本字段

    我正在尝试在不提交任何内容的情况下更改一个文本字段中另一个文本字段的值 例子 文本字段 1 输入 你好 文本字段 2 此处也插入了 你好 下面是我的表格
  • 当应用程序位于前台时,如何计算应用程序的使用时间?

    我正在开发一个 Android 应用程序来跟踪每日应用程序的使用情况 这个想法是 用户可以为任何应用程序设置每日时间限制 超过限制后最多 2 分钟内会出现通知 延迟的原因 我使用创建了一个警报系统报警管理器每分钟都会运行一个类求职意向服务这
  • 将库版本设置为稳定时遇到问题

    我创建了一个在另一个应用程序脚本中使用的库 并查看 Google 上的清单文档 它说如果您希望它自动使用最新版本 您可以将 库 部分中的 版本 设置为 稳定 可用版本 dependency libraries version 字符串 脚本使
  • 表单初始加载后会触发什么事件?

    我对可以在加载表单后触发的事件特别感兴趣 这样我就可以在控制器代码中初始化字段等 没有事件 但您可以添加一个initialize方法 该方法由FXMLLoader创建内容并将字段注入到控制器实例后 public MyController F
  • 使用自动布局的 iOS 消息单元格宽度/高度

    The Goal 我正在尝试创造一个动态message使用自动布局的单元格 我尝试过的 在大多数情况下 单元格的定位正确 并且具有以下约束的自动布局 问题 我的第一个问题是消息标签 可复制标签 宽度受到限制 这似乎可以通过使用来解决setP
  • 字符串中的空字符

    考虑这个字符串 var s A 0Z 它的长度为 3 由下式给出s length Using console log你可以看到绳子没有被切断s 1 is and s charCodeAt 1 is 0 当你在 Firefox 中提醒它时 你