از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
کار با توابع رشته ای داخلی جاوا اسکریپت هنگام کار با هر زبان برنامه نویسی، احتمالاً به برخی از عملکردها نیاز خواهید داشت که به طور بومی با آن زبان ادغام نشده باشند. بنابراین، یا خودتان آنها را پیاده سازی می کنید، یا به استفاده از ماژول ها یا کتابخانه های مختلف روی می آورید. این به طور مستقیم بر کارایی برنامه شما تأثیر می گذارد (استفاده از حافظه بیشتر، درخواست های HTTP بیشتر و غیره). برای جلوگیری…
سرفصلهای مطلب
معرفی
هنگام کار با هر زبان برنامه نویسی، احتمالاً به برخی عملکردها نیاز خواهید داشت که به طور بومی با آن زبان ادغام نشده باشد. بنابراین، یا خودتان آنها را پیاده سازی می کنید، یا به استفاده از ماژول ها یا کتابخانه های مختلف روی می آورید.
این به طور مستقیم بر کارایی برنامه شما تأثیر می گذارد (استفاده از حافظه بیشتر، درخواست های HTTP بیشتر و غیره). برای جلوگیری از این، توسعه دهندگان کار می کنند روی زبان های برنامه نویسی پیشرفته دارای توابع یکپارچه در داخل زبان ها هستند تا از نیاز به استفاده از کتابخانه های خارجی برای کارهای رایج جلوگیری کنند.
آشنایی با این توابع داخلی در نظر گرفته شده است دانش بنیادی از یک زبان، و شما هنوز هم می توانید فقط با توابع داخلی بسیار فاصله داشته باشید. البته، به احتمال زیاد در نهایت از برخی ماژول ها/کتابخانه ها برای کارهای خاصی استفاده خواهید کرد.
در این راهنمای مبتدی گرا، نگاهی به توابع داخلی جاوا اسکریپت مربوط به رشته ها خواهیم داشت.
انواع داده ها، ساختارها و اشیاء جاوا اسکریپت با توابع داخلی
در جاوا اسکریپت وجود دارد هشت نوع داده:
- رشته
- عدد
- بولی
- خالی
- تعریف نشده
- سمبل
- BigInt
- هدف – شی
با این حال، هر نوع داده ای یک تابع داخلی ندارد. آنها فقط تعریف شده اند روی: رشته، عدد و بولی.
وقتی صحبت از آن می شود ساختارهای داده در جاوا اسکریپت، هفت سازه پرکاربرد هستند:
- آرایه
- پشته
- صف
- لیست پیوند شده
- درخت
- نمودار
- قابل هشتم شدن
مشابه انواع داده ها، در ساختارهای داده، توابع داخلی فقط تعریف می شوند روی یک آرایه. سرانجام، اشیاء در جاوا اسکریپت نیز توابع داخلی مانند تاریخ، RegExp و ریاضی.
در این راهنما، ما تمرکز خواهیم کرد روی رشته ها به طور خاص
توابع رشته ای داخلی در جاوا اسکریپت
آ رشته همانطور که قبلا ذکر شد یکی از هشت نوع داده در جاوا اسکریپت است. در اصل به عنوان یک آرایه (رشته) کاراکترها.
علاوه بر این، شایان ذکر است که رشته ها هستند تغییرناپذیر – هنگامی که یک شی رشته ایجاد می شود، نمی توان آن را تغییر داد. هر توابعی که رشته را تغییر می دهد، a ایجاد می کند شی رشته جدید و به جای تغییر نسخه اصلی، آن را برگردانید.
با توجه به این واقعیت که رشته ها فقط آرایه هستند – می توانید آنها را به عنوان آرایه در نظر بگیرید و عناصر را از طریق array(index)
نشانه گذاری.
همانطور که گفته شد، اجازه دهید با توابع داخلی مربوط به رشته ها شروع کنیم.
toString()
toString()
یکی از متداول ترین توابع مورد استفاده در رشته ها است. متعلق به همه Object
s و یک نمایش رشته ای از شی را برمی گرداند و به طور موثر یک شی از هر نوع را به نمایش رشته خود تبدیل می کند:
let x = 100;
console.log(x.toString()); // Output: 100
toString()
بسته به هر شی متفاوت رفتار خواهد کرد روی اجرای تابع – معنی نمایش آن شی به عنوان یک رشته است. علاوه بر این، توجه داشته باشید که اگر هر عنصری را در یک عملیات حسابی به یک رشته تغییر دهید – جاوا اسکریپت این را به عنوان تلاشی برای الحاق:
let x = 100;
let y = 200;
let z1 = x+y;
let z2 = x.toString() + y;
console.log(z1); // Output: 300
console.log(z2); // Output: 100200
اینجا، z1
از نوع است عدد از آنجایی که ما به متغیرهای نوع اضافه می کنیم عدد با هم و z2
از نوع است رشته چون اولین متغیر از نوع است رشته و y
در حال تبدیل داخلی به رشته و ضمیمه شده است x
. اگر می خواهید یک نتیجه حسابی را به رشته تبدیل کنید – مطمئن شوید که تبدیل را انجام دهید در پایان.
concat()
concat()
دو رشته را به هم اضافه می کند و یک رشته جدید برمی گرداند:
let x = "some ";
let y = "string";
console.log(x.concat(y)); // Output: some string
اساساً همان عملیات زیر را انجام می دهد:
let x = "some";
let y = "string";
console.log(x+y); // Output: some string
در واقع توصیه شده است برای ترجیح دادن concat()
تابع به جای عملوندها، به دلیل مزایای عملکرد. با این حال، از به هم پیوستن یک رشته سود زیادی نخواهید داشت – به دست خواهید آورد روی عملکرد برای تعداد زیادی رشته بیایید به سرعت آن را محک بزنیم:
console.time('Concatenating with Operator');
concatWithOperator();
console.timeEnd('Concatenating with Operator');
console.time('Concatenating with Function');
concatWithFunction();
console.timeEnd('Concatenating with Function');
function concatWithOperator() {
let result = "";
for (let i = 0; i < 10000; i++) {
result = result += i;
}
}
function concatWithFunction() {
let result = "";
for (let i = 0; i < 10000; i++) {
result = result.concat(i);
}
}
این نتیجه در:
Concatenating with Operator: 3.232ms
Concatenating with Function: 1.509ms
عملکرد تقریبا دو برابر سریعتر است روی این کد همچنین شایان ذکر است که بیانیه رسمی از MDN، در مورد مزایای عملکرد:
اکیداً توصیه می شود که از عملگرهای انتساب (+، +=) به جای متد ()concat استفاده شود.
با توجه به این واقعیت که ممکن است عجیب به نظر برسد concat()
در تست ها از عملگرها بهتر عمل می کند. چه چیزی می دهد؟ خوب، محک زدن کدهایی مانند این به آسانی اجرای آن و مشاهده نتایج نیست.
مرورگر شما، نسخه آن، و همچنین بهینهسازیای که استفاده میکند ممکن است از ماشینی به ماشین دیگر متفاوت باشد، و ویژگیهایی مانند آنها واقعا بر عملکرد تاثیر میگذارند. به عنوان مثال، ما استفاده کرده ایم رشته های مختلف در الحاق، آنهایی که از تکرار ایجاد می شوند. اگر بخواهیم از همان رشته استفاده کنیم، یک بهینه ساز مانند V8 گوگل، استفاده از رشته را بیشتر بهینه می کند.
به عنوان یک قاعده کلی – کد خود را تست و تایید کنید بهجای اینکه توصیهها را به صورت واقعی دریافت کنید.
toLocaleUpperCase() و toUpperCase()
toLocaleUpperCase()
رشته داده شده را به حروف بزرگ تبدیل می کند و از زبان مورد استفاده تبعیت می کند روی ماشینی که کد را کامپایل می کند علاوه بر این، میتوانید محل را از طریق یک آرگومان رشتهای مشخص کنید:
let word = "Straße";
console.log(word.toUpperCase()) // STRASSE
console.log(word.toLocaleUpperCase('de-DE')) // STRASSE
در بیشتر موارد،
toUpperCase()
وtoLocaleUpperCase()
همان نتیجه را نشان می دهد، حتی اگر تعیین کننده محلی را ارائه نکنید. فقط با نگاشت یونیکد غیر استاندارد، مانند ترکی، است کهtoLocaleUpperCase()
نتایج متفاوتی ایجاد خواهد کرد.
toLocaleLowerCase() و toLowerCase()
toLocaleLowerCase()
عملکرد تقریبا مشابهی دارد toLocaleUpperCase()
، اما رشته را به حروف کوچک تبدیل می کند. به همین ترتیب، toLowerCase()
موضعی-آگنوستیک است. با این حال، آگاه باشید که اطلاعات خاص گم شده است هنگام تبدیل بین حروف بزرگ و کوچک.
به عنوان مثال، اگر تبدیل کنیم 'Straße'
به حروف بزرگ و سپس به حروف کوچک برگردید، اطلاعات خاصی را از دست خواهید داد:
let word = "Straße";
upperCase = word.toLocaleUpperCase('de-DE')
console.log(upperCase) // STRASSE
console.log(upperCase.toLocaleLowerCase('de-DE')) // Strasse
باز هم، این به این دلیل است که در این مثال، آلمانی از نگاشت استاندارد یونیکد پیروی می کند، بنابراین toLocaleLowerCase()
همان نتیجه را ایجاد می کند toLowerCase()
– که فقط هر کاراکتر را به همتای کوچک خود تغییر می دهد.
زیر رشته ()
substring(start, end)
رشته ای را برمی گرداند که شامل کاراکترهایی است که از the شروع می شوند start
فهرست رشته اصلی تا end-1
فهرست رشته اصلی
let x = "this is some string";
console.log(x.substring(3, 7)); // Output: s is
همانطور که می بینید، end
ایندکس شامل نیست، بنابراین رشته خروجی از است start
به end-1
.
علاوه بر این، این البته یک رشته جدید را برمی گرداند، بنابراین می توانید آن را با اختصاص دادن آن به یک متغیر مرجع جدید ضبط کنید، یا فقط از آن به عنوان ورودی یک تابع جدید استفاده کنید. رشته اصلی بدون تغییر می ماند:
let x = "this is some string";
let y = x.substring(3, 7);
console.log(x); // Output: this is some string
console.log(y); // Output: s is
اگر سعی کنید substring()
با یک end
فراتر length
از رشته – شما به سادگی تمام کاراکترهای موجود را تا انتها زیر رشته می کنید:
let x = "this is some string";
console.log(x.substring(10, 25)); // Output: me string
این تابع به ویژه برای کوتاه کردن خروجی یا ورودی یا حتی بررسی اینکه آیا یک رشته با یک زیررشته مشخص شروع می شود یا حاوی آن است مفید است.
substr (شروع، طول)
شبیه به substring()
، substr()
تابع با گرفتن کاراکترهای خاص از یک رشته اصلی تولید می شود. در اینجا ما را مشخص می کنیم start
ایندکس و اندازه زیر رشته مورد نظر که می باشد length
، به جای نقطه پایانی مشخص:
let x = "this is some string";
console.log(x.substr(3, 4)); // Output: s is
اگر طول آن فراتر از محدوده یک رشته است، شما به سادگی تا انتها زیر رشته کنید:
let x = "hello";
console.log(x.substr(3, 10)); // Output: lo
شکاف()
این split(separator, limit)
تابع با استفاده از عبارت، یک رشته را به آرایه ای از رشته ها تقسیم می کند separator
ارائه شده و به الف limit
تعداد قطعات
let x = "this is some string";
console.log(x.split(" ", 4)); // Output: ('this', 'is', 'some', 'string')
اگر از هیچ کتابخانه خارجی استفاده نمی کنید، این می تواند برای تجزیه خطوط CSV مفید باشد، زیرا آنها مقادیر جدا شده با کاما هستند که به راحتی از طریق split()
تابع. با این حال، هنگامی که با فایلهای CSV سروکار دارید، اگر به درستی قالببندی نشده باشند، میخواهید اعتبارسنجی را انجام دهید.
به طور معمول، شما از کتابخانه ها برای این کار استفاده خواهید کرد، زیرا آنها کار را بسیار آسان تر می کنند.
اگر میخواهید درباره خواندن فایلهای CSV در جاوا اسکریپت اطلاعات بیشتری کسب کنید، راهنمای ما را بخوانید روی خواندن و نوشتن CSV با node-csv و خواندن و نوشتن CSV با Node.js.
charAt() و رشته (شاخص)
این charAt(index)
تابع کاراکتر را در مقدار مشخص شده برمی گرداند index
.
let x = "abc123";
console.log(x.charAt(2)); // Output: c
می توانید از این برای تکرار از طریق یک رشته و بازیابی محتوای آن استفاده کنید، به عنوان مثال:
let x = "some string";
for (let i = 0; i < x.length; i++) {
console.log(x.charAt(i));
}
که منجر به:
s
o
m
e
s
t
r
i
n
g
چه فرقی با هم دارند
x.charAt(y)
وx(y)
?
چند دلیل وجود دارد که چرا شما ممکن است ترجیح دهید charAt()
روی نماد آرایه:
let x = "some string";
// There is no element 5.7
console.log(x(5.7));
// 5.7 gets rounded down to 5
console.log(x.charAt(5.7));
// The array notation makes it appear as if we can just assign
// new values to elements, even though strings are immutable
x(5) = 'g';
console.log(x);
// With charAt(), it's much more obvious that
// this line doesn't make sense and will throw an exception
x.charAt(5) = 'g';
با این حال، یک شمشیر دو لبه در اجرای آن پنهان است charAt()
تابع – این شاخص را ارزیابی کرده و آن را پردازش می کند.
از همین رو 5.7
به پایین گرد شد 5
. همچنین این مرحله پردازش را برای ورودیهایی انجام میدهد که ممکن است در واقع معتبر نباشند، اما این توهم کدی را ایجاد میکند که به خوبی اجرا میشود:
let x = "some string";
console.log(x.charAt(true));
console.log(x.charAt(NaN));
console.log(x.charAt(undefined));
console.log(x.charAt(()))
console.log(x.charAt(""))
true
تبدیل می شود به 1
، در حالی که false
تبدیل خواهد شد به 0
. NaN
، undefined
، یک آرایه خالی و یک رشته خالی نیز به تبدیل می شوند 0
، بنابراین این به خوبی اجرا می شود، حتی اگر به طور شهودی نباید این کار را انجام دهد:
o
s
s
s
s
از سوی دیگر، با استفاده از نماد آرایه مدرن تر:
console.log(x(true));
console.log(x(NaN));
console.log(x(undefined));
console.log(x(()));
console.log(x(""));
اینها نتیجه شهودی تری ایجاد می کنند که نشان دهنده شکست ورودی است:
undefined
undefined
undefined
undefined
undefined
indexOf()
indexOf(character)
مقدار شاخص را برمی گرداند اولین اتفاق از مشخص شده character
:
let x = "aaabbb";
console.log(x.indexOf("b")); // Output: 3
اگر شخصیت وجود نداشته باشد، -1
برگردانده می شود:
let x = "some string";
console.log(x.indexOf('h')); // Output: -1
همچنین می توانید به صورت اختیاری از اولین مورد رد شوید n
کاراکترها با مشخص کردن یک fromIndex
به عنوان استدلال دوم:
let x = "aaabbb";
console.log(x.indexOf("b", 4)); // Output: 4
در اینجا، از 3 کاراکتر اول (نمایه سازی مبتنی بر 0) صرف نظر می کنیم و شروع به شمارش می کنیم روی 4. اتفاقا شخصیت 4 است آ 'b'
ما به دنبال آن هستیم، بنابراین ایندکس برگردانده می شود.
lastIndexOf()
lastIndexOf(character)
مقدار شاخص را برمی گرداند آخرین اتفاق از مشخص شده character
:
let x = "aaabbb";
conosle.log(x.lastIndexOf("b")); // Output: 5
تقریباً همان قوانینی که برای indexOf()
تابع:
let x = "aaabbb";
console.log(x.lastIndexOf("b")); // Output: 5
console.log(x.lastIndexOf("b", 3)); // Output: 3
console.log(x.lastIndexOf("g")); // Output: -1
این روش از انتهای رشته به عقب شمارش می کند، اما اگر a را عرضه کنیم fromIndex
آرگومان در اینجا، شاخص از سمت چپ شمارش می شود. در مورد ما:
// 012345
let x = "aaabbb";
// ↑ lastIndexOf() start
و lastIndexOf()
شمارش از 3
به 0
، همانطور که ما تنظیم کرده ایم fromIndex
بودن 3
.
جستجو کردن()
این search(string)
تابع a را جستجو می کند string
و اگر یافت شد، شاخص ابتدای رشته پیدا شده را برمی گرداند:
let x = "JavaScript, often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.";
console.log(x.search("programming")); // Output: 42
در صورت وجود رشته های متعدد متناسب با کلمه کلیدی جستجو، مانند 'JavaScript'
، فقط شاخص شروع اولین مورد تطبیق برگردانده می شود:
let x = "JavaScript, often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.";
console.log(x.search("JavaScript")); // Output: 0
نتیجه
جاوا اسکریپت یک زبان گسترده و رایج است روی وب، و آشنایی با توابع اساسی داخلی به شما کمک می کند تا از استفاده از کتابخانه های خارجی غیر ضروری اجتناب کنید، زمانی که می توانید در وانیل JS به نتیجه برسید.
در این راهنما، نگاهی به توابع داخلی رشته ها انداخته ایم – یکی از رایج ترین انواع داده های موجود در جاوا اسکریپت.
منتشر شده در 1403-01-15 06:29:03