首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不推荐String.prototype.substr()?

为什么不推荐String.prototype.substr()?
EN

Stack Overflow用户
提问于 2018-10-04 06:21:52
回答 3查看 61.8K关注 0票数 100

ECMAScript标准这里中提到:

..。这些特性不被认为是核心ECMAScript语言的一部分。程序员在编写新的ECMAScript代码时不应该使用或假定这些特性和行为的存在。不鼓励ECMAScript实现实现这些特性,除非实现是web浏览器的一部分,或者需要运行web浏览器遇到的相同的遗留ECMAScript代码。

在MDN:String.prototype.substr() MDN上也有一个红色警告。

有谁知道为什么(ECMAScript标准说)程序员不应该使用或假定String.prototype.substr的存在?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-04 06:27:53

因为它从来都不是标准化语言的一部分。它根本没有出现在ECMAScript 1或2规范中,只出现在B.2节(“附加属性”)中的ECMAScript 3中(以及到本文撰写时为止在今天 ES2022草稿的类似附件中的后续版本)。

ECMAScript的一些实现包含了一些标准本机对象的附加属性。这个非规范附件为这些属性提供了统一的语义,而没有将属性或它们的语义作为本标准的一部分。

此外,substrsubstringslice在很大程度上是多余的,但是第二个论点的含义不同。

从实用的角度来看,如果您发现一个完整的主流JavaScript引擎没有提供它,我会感到惊讶;但是,如果针对嵌入式/受限环境的JavaScript引擎没有提供它,我也不会感到惊讶。

这一措辞最近已改为:

当ECMAScript主机是web浏览器时,需要本附件中定义的ECMAScript语言语法和语义。本附件的内容是规范性的,但如果ECMAScript主机不是web浏览器,则可以选择。

注意,本附件描述了web浏览器ECMAScript主机的各种遗留特性和其他特性。本附件中规定的所有语言特性和行为都具有一个或多个不受欢迎的特性,如果没有遗留的使用,将从本规范中删除。然而,大量现有网页使用这些功能意味着浏览器必须继续支持它们。本附件中的规范定义了这些遗留特性的可互操作实现的要求。

这些特性不被认为是核心ECMAScript语言的一部分。程序员在编写新的ECMAScript代码时不应该使用或假定这些特性和行为的存在。不鼓励ECMAScript实现实现这些特性,除非实现是web浏览器的一部分,或者需要运行web浏览器遇到的相同的遗留ECMAScript代码。

票数 85
EN

Stack Overflow用户

发布于 2022-03-23 09:15:06

substr的主要优点是您可以指定一个负的开始位置!对substring也这么做是很糟糕的。

票数 11
EN

Stack Overflow用户

发布于 2022-02-13 19:46:19

我将此声明作为环境声明添加到顶级ambient.d.ts文件中:

代码语言:javascript
运行
复制
interface String {
  /**
   * Gets a substring beginning at the specified location and having the specified length.
   * (deprecation removed)
   * @param from The starting position of the desired substring. The index of the first character in the string is zero.
   * @param length The number of characters to include in the returned substring.
   */
  substr(from: number, length?: number): string;
}

我发现substr非常有用。指定字符串的长度(而不是字符串的结束索引)通常要简洁得多。如果substr真的被从浏览器或Node.js JavaScript支持中删除,我怀疑我们中的许多人都会简单地重新安装substr

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52640271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档