当前位置: 首页 > 知识库问答 >
问题:

javascript - JavaScript命名规范与Android WebView兼容性问题:井号(#)函数名如何处理?

吴驰
2024-09-09

井号命名浏览器支持问题

关于js的命名规范,推荐是字母数字下划线和$组合,并且第一位不为数字,但在我用npm引用了用pdf-dist(2.14)的包时,在浏览器上chrome使用完全没问题,但在安卓webview中提示有语法错误(Unexpected token)
查看后如下
image.png
问了ai说这是表示私有方法,我在bing中并没有见到类似说法的帖子,想求证一下ai的回答是否正确
目前我打算修改node_module下的pdf-dist下的build中的pdf.js文件以井号开头的函数名,使其符合命名规范,这种处理方式是否合理?
image.png

共有3个答案

冀鸿才
2024-09-09

这个是安卓webview太老了,还没有支持到这个语法,用babel处理下就行了

杭镜
2024-09-09

私有属性 - JavaScript | MDN (mozilla.org)

慕皓君
2024-09-09

在JavaScript中,井号(#)通常不被用作函数名或变量名的有效字符。JavaScript的ECMAScript规范中定义了标识符(包括变量名、函数名等)可以包含字母(A-Z, a-z)、数字(0-9)、美元符号($)和下划线(_),但不能以数字开头。因此,井号(#)在标准的JavaScript标识符中是不被允许的。

关于井号命名和浏览器支持问题

  1. 井号在JavaScript中的特殊用法:在某些JavaScript工具或框架(如TypeScript或Babel的某些插件)中,井号(#)可能被用作特定语法或功能的一部分,比如TypeScript中的私有字段提案(尽管这不是ECMAScript标准的一部分,且实现可能有所不同)。然而,在原生JavaScript或大多数浏览器中,井号不能用于命名函数或变量。
  2. Android WebView的兼容性问题:Android WebView通常基于Chrome的某个版本,但它可能不包含Chrome的所有最新特性或修复。如果pdf-dist包中的代码使用了井号作为函数名,这可能是通过某种构建工具(如Babel)或TypeScript转译而来,而Android WebView可能无法正确解析这种转译后的代码。

解决方案

  1. 修改源代码:直接修改node_modules下的文件通常不是一个好的做法,因为这会导致在更新依赖时丢失这些更改。更好的做法是尝试找到导致问题的具体原因,并寻求更通用的解决方案。
  2. 联系库维护者:如果这个问题是由于库本身的问题导致的,你可以考虑在库的GitHub仓库或相关支持论坛上报告这个问题。
  3. 使用替代库:如果这个问题无法解决,或者修复需要很长时间,考虑使用其他类似的库可能是一个更好的选择。
  4. 转译代码:如果可能,尝试在你的构建过程中添加一个步骤来转译这个库,确保它产生的代码与你的目标环境兼容。
  5. 升级Android WebView:如果你的应用目标是较新的Android版本,并且这个版本的WebView支持了更多的JavaScript特性,考虑引导用户升级到这些Android版本。

结论

井号(#)在JavaScript中不是有效的标识符字符,因此,如果你的代码或依赖的库在Android WebView中因为井号命名的函数而出现问题,这通常是因为代码被错误地转译或Android WebView的兼容性问题。建议寻找上述提到的解决方案之一来解决这个问题。

 类似资料:
  • 如题:Array.prototype.at 怎么处理兼容性问题?

  • public class User { private String busName; private String pCount; private Boolean isRunning; //正确的命名方式,驼峰式的 public String getBusName() { return busName; } public void setBusName(String busNa

  • 1、模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模块名 import Decoder 2、类名 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头 class Farm(): pass class Anim

  • 处理注解 在 Servlet 2.5 中, metadata-complete 只影响在部署时的注释扫描。 web-fragments 的概念在 servlet 2.5 并不存在。然而在 servlet 3.0 和之后,metadata-complete 影响扫描所有的在部署时指定部署信息和 web-fragments 注释。注释的版本的描述符必须不影响你扫描在一个web应用程序。除非 metad

  • 本文向大家介绍JavaScript中匿名、命名函数的性能测试,包括了JavaScript中匿名、命名函数的性能测试的使用技巧和注意事项,需要的朋友参考一下 我们经常通过匿名函数(Anonymous function)来写回调。 简单来讲匿名即没有名字的函数,一般都立即执行。但是它与命名函数(有名字的函数)的性能如何呢? 我们可以比较一下,我们随便找一台可以执行Shell命令的计算机来使用大量函数调

  • 命名规范使程序更易读,从而更易于理解。它们也可以提供一些有关标识符功能的信息,以助于理解代码,例如,不论它是一个常量,包,还是类 标识符类型 命名规则 示例 包(Packages) 一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内