javascript - Hvorfor er String.prototype.substr() foreldet?


Det nevnes i ECMAScript-standarden her at:

... Disse funksjonene anses ikke som en del av kjernen i ECMAScript-språket. Programmerere bør ikke bruke eller anta eksistensen av disse funksjonene og oppførslene når de skriver ny ECMAScript-kode. ECMAScript-implementeringer frarådes å implementere disse funksjonene med mindre implementeringen er en del av en nettleser eller er nødvendig for å kjøre den samme eldre ECMAScript-koden som nettlesere støter på.

Det er også en rød advarsel på MDN: String.prototype.substr() MDN-dokumentasjon

Vet noen hvorfor (ECMAScript-standarden sier at) programmerere ikke bør bruke eller anta eksistensen av String.prototype.substr ?

Svar #1

Fordi det aldri har vært en del av det standardiserte språket. Det var ikke i ECMAScript 1 eller 2-spesifikasjonene i det hele tatt, og dukker kun opp i ECMAScript 3 i Seksjon B.2 ("Ytterligere egenskaper") (og påfølgende utgaver i lignende vedlegg frem til i dag [ES2022-utkast på tidspunktet for denne skrivingen]), som sa:¹

Noen implementeringer av ECMAScript har inkludert ekstra egenskaper for noen av de standard innebygde objektene. Denne ikke-normative vedlegget foreslår ensartet semantikk for slike egenskaper uten å gjøre egenskapene eller deres semantikk til en del av denne standarden.

Dessuten er substr stort sett overflødig sammenlignet med substring og slice, men det andre argumentet har en annen betydning.

I pragmatiske termer ville jeg blitt overrasket om du fant en full mainstream JavaScript-motor som ikke tilbyr det; men jeg ville ikke blitt overrasket om JavaScript-motorer rettet mot innebygde/begrensede miljøer ikke tilbyr det.


¹ Den ordlyden har nylig endret seg til:

ECMAScript-språkets syntaks og semantikk som er definert i dette vedlegget, er påkrevd når ECMAScript-verten er en nettleser. Innholdet i dette vedlegget er normativt, men valgfritt hvis ECMAScript-verten ikke er en nettleser.


MERK Dette tillegget beskriver ulike eldre funksjoner og andre kjennetegn ved webleserens ECMAScript-verter. Alle språkfunksjonene og atferdene som er spesifisert i dette tillegget har en eller flere uønskede egenskaper, og i fravær av eldre bruk ville de blitt fjernet fra denne spesifikasjonen. Bruken av disse funksjonene av et stort antall eksisterende nettsider betyr imidlertid at nettlesere må fortsette å støtte dem. Spesifikasjonene i dette tillegget definerer kravene for interoperable implementeringer av disse eldre funksjonene.

Disse funksjonene regnes ikke som en del av kjerne ECMAScript-språket. Programmerere bør ikke bruke eller anta eksistensen av disse funksjonene og oppførslene når de skriver ny ECMAScript-kode. ECMAScript-implementeringer frarådes å implementere disse funksjonene med mindre implementeringen er en del av en nettleser eller er nødvendig for å kjøre den samme eldre ECMAScript-koden som nettlesere støter på.


Svar #2

Hovedfordelen med substr er at du kan spesifisere en negativ startposisjon! Å gjøre det samme med substring er forferdelig.

Relaterte artikler