Оператори порівняння. Методи javascript для роботи з рядками Порівняння рядків javascript

Відразу попереджу, так, стаття трохи некоректна, ласкаво просимо в коментарі, там непогані уточнення).

Доброго вам дня.

У JavaScript є два схожі оператори: == і ===. Якщо не знати їхньої відмінності, це може обернутися купою помилок. Тож вирішив розкрити цю тему. Чим саме відрізняються == і ===, як вони працюють, чому так відбувається і як уникнути помилок.

Оператор == порівнює на рівність, тоді як === - на ідентичність. Плюс оператора === полягає в тому, що він не наводить два значення одного типу. Саме тому він зазвичай і використовується.

Abc == undefined; // true, якщо abc = undefined | null abc === undefined; // true - якщо abc = undefined!
abc == false; // true, якщо abc = false | 0 | "" | abc === false; // true, якщо abc = false!
Адже плутати false і 0 (або "", або) - навряд чи дуже добре.

Зрозуміло:
5 === 5; // true true === true; // true "abc" === "abc"; // true

А зараз цікавий приклад.
5 == 5; // true 5 === 5; // true new Number(5) == 5; // true new Number(5) === 5; // false!

Чому так відбувається? Так, будь-яке число – це об'єкт класу Number. Але можна уявити число як цифру – деякою константою. Вона одного разу оголошена і завжди ідентична сама собі. Але в той же час оголошуючи новий об'єкт класу Number - він дорівнює їй за значенням, але не ідентичний (оскільки це два абсолютно різні об'єкти класу Number).

Arrays/Objects

А ось для масивів та об'єктів обидва оператори працюють однаково, порівнюючи на ідентичність:
var a = (); a == (); // false a === (); // false a == a; // true a === a; // true

Для порівняння масивів та об'єктів можна написати спеціальну функцію:
function isEq(a, b)( if(a == b) return true; for(var i in a)( if(!isEq(a[i], b[i])) return false; ) for(var i in b)( if(!isEq(a[i], b[i])) return false; ) return true; )
Трохи неакуратно, два цикли, та й про hasOwnPropertyзабули; ну та зійде.

This<-

Є ще один підводний камінь. Це передача у це.
(function()( this == 5; // true this === 5; // false )).call(5);

Ось такий момент. Варто про нього не забувати.

Разом...

Ну а тепер уявимо, що ми пишемо свій суперфреймворк, активно юзаєм там оператор === замість == просто тому що він красивіший, і хтось знаходить у нас кілька багів.
func(new Number(5)); (function()( func(this); )).call(5);

Здається, такі приклади нежиттєздатні? Будь ласка!

JQuery:
$.each(, function()( func(this); ));

Ну чи захотілося розширити цифру.
var Five = New Number(5); Five.a = 2; // захотілося розширити, а 5 не розширюється // тут якось використовуємо... func(Five);

На цьому все, сподіваюся, комусь буде корисно. Спасибі за увагу.

Коли пишеш JavaScript, дуже часто доводиться лазити інтернетом у пошуках інформації про синтаксис і параметри для методів, що працюють з рядками.

Я прочитав багато статей з роботи з рядками. У цьому пості будуть показані приклади та короткі описи найпоширеніших методів роботи з рядками. Я спробував поставити найчастіші методи у верхній частині швидкого ознайомлення.

Звичайно, більшість досвідчених розробників вже досить знайомі з багатьма методами, але я думаю, що це хороший список для початківців, щоб розуміти спектр методів, які можуть допомогти виконати складні операції простими засобами.

Конвертування в String

Ви можете конвертувати число, вираз або об'єкт у рядок:

Var myNumber = 24; // 24 var myString = myNumber.toString(); // "24"

Ви можете зробити це так само за допомогою String():

Var myNumber = 24; // 24 var myString = String(myNumber); // "24"

Якщо ви не впевнені, що значення не є nullабо undefined, Ви можете використовувати String(), яка завжди повертає рядок незалежно від типу значення.

Поділ рядка на підрядки

Щоб розділити рядки в масив підрядків, ви можете використати метод split():

Var myString = "coming,apart,at,the,commas"; var substringArray = myString.split(","); // ["coming", "apart", "at", "the", "commas"] var arrayLimited = myString.split(",", 3); // ["coming", "apart", "at"]

Як видно в останньому рядку, другий параметр функції - це ліміт кількості елементів, що буде у підсумковому масиві.

Отримання довжини рядка

Щоб знайти скільки символів у рядки, ми використовуємо властивість length:

Var myString = "You"re quite a character."; var stringLength = myString.length; // 25

Пошук підрядки у рядку

Є два методи для пошуку підрядку:

Використання indexOf():

Var stringOne = "Johnny Waldo Harrison Waldo"; var wheresWaldo = stringOne.indexOf("Waldo"); // 7

indexOf()метод починає пошук підрядки з початку рядка, і повертає позицію початку першого входження підрядка. В даному випадку – 7 позиція.

Використання lastIndexOf():

Var stringOne = "Johnny Waldo Harrison Waldo"; var wheresWaldo = stringOne.lastIndexOf("Waldo"); // 22

Метод повертає початкову позицію останнього входження підрядка в рядок.

В обох методах, якщо підрядок не знайдено, повертається значення -1, і обидва приймають необов'язковий другий аргумент, що вказує положення у рядку, де хочете розпочати пошук. Таким чином, якщо другий аргумент "5", indexOf()починає пошук з 5 символу, ігноруючи символи 0-4, тоді як lastIndexOf()починає пошук із символу 5 і йде у зворотному напрямку, ігноруючи символи 6 і далі.

Заміна підрядка

Щоб замінити входження підрядки в рядок на інший підрядок, ви можете використовувати replace():

Var slugger = "Josh Hamilton"; var betterSlugger = slugger.replace("h Hamilton", "e Bautista"); console.log(betterSlugger); // "Jose Bautista"

Перший аргумент - те, що ви хочете замінити і другий аргумент - новий рядок. Функція замінює лише перше входження підрядка в рядок.

Щоб замінити всі входження, потрібно використовувати регулярний вираз із глобальним прапором:

Var myString = "She sells automotive shells on the automotive shore"; var newString = myString.replace(/automotive/g, "sea"); console.log(newString); // "She sells sea shells on the sea shore"

Другий аргумент може містити спеціальний шаблон або функцію. Докладніше можна почитати.

Отримати символ за заданою позицією у рядку

Отримати символ ми можемо за допомогою функції charAt():

Var myString = "Birds of a Feather"; var whatsAtSeven = myString.charAt(7); // "f"

Як часто буває JavaScript, перша позиція в рядку починається з 0, а не з 1.

Як альтернативну функцію можна використовувати charCodeAt()функцію, яка кодує символ.

Var myString = "Birds of a Feather"; var whatsAtSeven = myString.charCodeAt(7); // "102" var whatsAtEleven = myString.charCodeAt(11); // "70"

Зауважте, що код для символу «F» (11 позиція) є іншим, ніж у символу «f» (позиція 7).

З'єднання рядків

Найчастіше, щоб з'єднати рядки, можна використовувати оператор «+». Але так само можна використати метод concat():

Var stringOne="Knibb High football"; var stringTwo = stringOne.concat("rules."); // "Knibb High football rules"

Таким чином ми можемо з'єднати безліч рядків в одному порядку, в якому вони записані:

Var stringOne = "Knibb"; var stringTwo = "High"; var stringThree = "football"; var stringFour = "rules."; var finalString = stringOne.concat(stringTwo, stringThree, stringFour); console.log(finalString); // "Knibb high football rules."

Вилучення підрядки

Є 3 способи одержання рядка з частини іншого рядка:

Використовуючи slice():

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.slice(5, 10); // "fghij"

Використовуючи substring():

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.substring(5, 10); // "fghij"

В обох функція перший параметр — символ, з якого починається рядок (починаючи з 0 позиції) і другий аргумент (необов'язковий) — позиція символу, до якого повертається підрядок. У прикладі (5, 10) повертається рядок між позицією 5 та 9.

Використовуючи substr():

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.substr(5, 10); // "fghijklmno"

Перший аргумент – позиція символу, з якого починається новий рядок і другий аргумент – кількість символів від початкової позиції нового рядка. Тобто. (5, 10) повертає 10 символів, починаючи з 5-ї позиції.

Переведення рядка у верхній або нижній регістр.

Є 4 методи перекладу. Перші 2 переводять рядок у верхній регістр:

Var stringOne = "Speak up, I can"t hear you."; var stringTwo = stringOne.toLocaleUpperCase(); // "SPEAK UP, I CAN"T HEAR YOU" // "SPEAK UP, I CAN"T HEAR YOU"

Інші 2 переводять рядок у нижній регістр:

Var stringOne = "YOU DON"T HAVE TO YELL"; var stringTwo = stringOne.toLocaleLowerCase(); // "you don"t have to yell"

Краще використовувати "locale" методи, т.к. у різних місцях, наприклад, у Туреччині відображення регістрів працює не зовсім так, як ми звикли, і тому результат може бути той, який ми хотіли. Якщо використовувати «locale» методи, таких проблем не буде.

Pattern Matching

Відповідність шаблону в рядку може бути використана за допомогою 2-х методів, які працюють по-різному.

Метод match()застосовується до рядка і він приймає як параметр регулярний вираз:

Var myString = "How much wood could a wood chuck chuck"; var myPattern = /.ood/; var myResult = myString.match(myPattern); // ["wood"] var patternLocation = myResult.index; // 9 var originalString = myResult.input // "How much wood could a wood chuck chuck"

Метод exec()застосовується до об'єкта регулярного виразу і приймає як параметр рядок:

Var myString = "How much wood could a wood chuck chuck"; var myPattern = /.huck/; var myResult = myPattern.exec(myString); // ["chuck"] var patternLocation = myResult.index; // 27 var originalString = myResult.input // "How much wood could a wood chuck chuck"

В обох методах повертається лише перший збіг. Якщо збігів не було – повертається null.

Також можна використовувати метод search(), який приймає регулярне вираження та повертає позицію першого збігу за шаблоном:

Var myString = "Assume"; var patternLocation = myString.search(/ume/); // 3

Якщо збігів не було - повертається -1 «.

Порівняння двох рядків для сортування

Ви можете порівняти 2 рядки, щоб визначити, яка з них йде перша за абеткою. Для цього скористаємося методом localeCompare(), який повертає 3 можливі значення:

Var myString = "chicken"; var myStringTwo = "egg"; var whichCameFirst = myString.localeCompare(myStringTwo); // -1 (Chrome returns -2) whichCameFirst = myString.localeCompare("chicken"); // 0 whichCameFirst = myString.localeCompare("apple"); // 1 (Chrome returns 2)

Як було показано вище, негативне число повертається, якщо рядковий аргумент іде після вихідного рядка. Позитивне число, якщо рядковий аргумент йде раніше за вихідний рядок. Якщо повернувся 0 - Значить рядки рівні.

Для перевірки значення, що повертається, краще використовувати if (result< 0), чем if (result === -1). Последнее не будет работать в Chrome.

Спасибі за увагу, сподіваюся, що ви дізналися багато нового та цікавого!

Автор статті: Alex. Категорія:
Дата публікації: 19.03.2013

Коли я пишу на JavaScript, то доводиться часто звертатися до пошукових систем з метою уточнити синтаксис методів (і порядок, визначення аргументів), що працюють з рядками.

У цій статті я спробую навести приклади та опис найбільш поширених методів JavaScript, пов'язаних з рядками. Найбільш популярні методи зручності розташовані у верхній частині статті.

Перетворюємо на рядок

Ви можете перетворити число, значення значення або об'єкт в рядок.

Var myNumber = 24; // 24 var myString = myNumber.toString(); // "24"

Ви також можете зробити подібну маніпуляцію за допомогою функції string().

Var myNumber = 24; // 24 var myString = String(myNumber); // "24"

Ніколас Закас каже: "Якщо ви не впевнені у значенні (null або undefined), то використовуйте функцію String() , оскільки вона повертає рядок незалежно від типу змінної".

undefinedозначає, що змінної не надано жодного значення, a null, - що їй присвоєно порожнє значення (можна сказати, що null визначається як порожній об'єкт).

Розбиваємо рядок на підрядки

Щоб розбити рядок на масив з підрядків, ви можете використовувати метод split() :

Var myString = "coming,apart,at,the,commas"; var substringArray = myString.split(","); // ["coming", "apart", "at", "the", "commas"] var arrayLimited = myString.split(",", 3); // ["coming", "apart", "at"]

Як випливає з останнього рядка, значення другого необов'язкового аргументу визначає кількість елементів у масиву, що повертається.

Отримати довжину рядка

За допомогою властивості length ви можете знайти число юнікодних символів у рядку:

Var myString = "You"re quite a character."; var stringLength = myString.length; // 25

Визначаємо підрядок у рядку

Є два способи здійснити задумане:

Використовувати indexOf():

Var stringOne = "Johnny Waldo Harrison Waldo"; var wheresWaldo = stringOne.indexOf("Waldo"); // 7

Метод indexOf() шукає підрядок (перший переданий аргумент) у рядку (від початку рядка) і повертає позицію першого символу, з якого почалося входження підрядка в рядок.

Використати lastIndexOf() :

Var stringOne = "Johnny Waldo Harrison Waldo"; var wheresWaldo = stringOne.lastIndexOf("Waldo"); // 22

Метод lastIndexOf() робить все те ж саме, за винятком того, що він шукає останній підрядок за входженням у рядок.

У випадку, якщо підрядок не знайдено, обидва методи повертають -1. Другий необов'язковий аргумент вказує на позицію у рядку, з якого ви хочете розпочати пошук. Так, якщо для методу indexOf() другий аргумент дорівнює 5, пошук почнеться з 5-го символу, а 0-4 символи будуть проігноровані. Для lastIndexOf() , також якщо другий аргумент дорівнює 5, пошук почнеться у зворотному напрямку, причому символи від 6 і вище будуть проігноровані.

Як замінити частину рядка

Щоб замінити частину (або навіть всю) рядки, використовуйте метод replace() .

Var slugger = "Josh Hamilton"; var betterSlugger = slugger.replace("h Hamilton", "e Bautista"); console.log(betterSlugger); // "Jose Bautista"

У першому аргументі міститься та частина підрядка, яка підлягає заміні; другий аргумент - це той рядок, який встане на місце заміни, що замінюється. Буде замінено лише перший екземпляр підрядка.

Щоб замінити всі входження підрядки, використовуйте регулярний вираз c прапором "g".

Var myString = "She sells automotive shells on the automotive shore"; var newString = myString.replace(/automotive/g, "sea"); console.log(newString); // "She sells sea shells on the sea shore"

Другий аргумент може включати замінний підрядок або функцію.

Знайти символ за заданою позицією

Щоб з'ясувати, який символ стоїть у заданій позиції, ви можете використовувати метод charAt() :

Var myString = "Birds of a Feather"; var whatsAtSeven = myString.charAt(7); // "f"

Як це часто буває в JavaScript, перша позиція веде свій відлік з 0, а не з 1.

Як альтернативу ви можете використовувати метод charCodeAt() , проте замість символу ви отримаєте його код.

Var myString = "Birds of a Feather"; var whatsAtSeven = myString.charCodeAt(7); // "102" var whatsAtEleven = myString.charCodeAt(11); // "70"

Позначте, що код для великої літери (позиція 11) відрізняється від коду тієї ж літери, але в малому регістрі (позиція 7).

Конкатенація рядків у javascript

Здебільшого для конкатенації рядків ви використовуватимете оператор (+). Але ви також можете об'єднати рядки за допомогою методу concat() .

Var stringOne="Knibb High football"; var stringTwo = stringOne.concat("rules."); // "Knibb High football rules"

У concat() можна передати безліч рядків, причому в результуючому рядку вони будуть розташовані в порядку їхнього додавання в метод concat() .

Var stringOne = "Knibb"; var stringTwo = "High"; var stringThree = "football"; var stringFour = "rules."; var finalString = stringOne.concat(stringTwo, stringThree, stringFour); console.log(finalString); // "Knibb high football rules."

Частина рядка (отримати підрядок у javascript)

Є три різні способи створити новий рядок, "висмикнувши" частину підрядки з вже наявного рядка.

Використовуючи slice() :

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.slice(5, 10); // "fghij"

Використовуючи substring() :

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.substring(5, 10); // "fghij"

Для обох (slice() і substring()) методів перший аргумент - це позиція символу, з якого починається підрядок (відлік ведеться з 0) , другий аргумент - це позиція символу, на якому підрядок закінчується, причому символ, позначений у другому аргументі, не включається у повертається підрядок.

Використовуючи substr() :

Var stringOne = "abcdefghijklmnopqrstuvwxyz"; var stringTwo = stringOne.substr(5, 10); // "fghijklmno"

Для методу substr перший аргумент також визначає позицію символу, з якого починається підрядок. Другий аргумент є необов'язковим. Але в той же час другий аргумент визначає кількість символів, які повинні бути включені до підстроку, починаючи з позиції, яку ми вже визначили в першому аргументі. Ця методика добре проілюстрована на прикладі вище.

Перетворення рядка на нижній або верхній регістр на javascript

Є чотири способи зробити необхідні перетворення. Два для перетворення символів рядка у верхній регістр.

Var stringOne = "Speak up, I can"t hear you."; var stringTwo = stringOne.toLocaleUpperCase(); // "SPEAK UP, I CAN"T HEAR YOU"

І два для перетворення рядка в нижній регістр:

Var stringOne = "YOU DON"T HAVE TO YELL"; var stringTwo = stringOne.toLocaleLowerCase(); // "you don"t have to yell"

Як правило, немає різниці між locale-методом і не-locale-методом, однак "для деяких мов, наприклад для турецької, у яких регістр символів не слідує встановленому регістру в системі Unicode, наслідки використання не-locale-методу можуть бути різними". Тому слідуйте наступному правилу: "якщо ви не знаєте мови, в якій працюватиме код, безпечніше використовувати locale-методи".

Відповідність шаблону в javascript

Перевірити наявність шаблону в рядку можна за допомогою 2-х способів.

Метод match() викликається у об'єкта string , як аргумент методу match() передається регулярне вираження.

Var myString = "How much wood could a wood chuck chuck"; var myPattern = /.ood/; var myResult = myString.match(myPattern); // ["wood"] var patternLocation = myResult.index; // 9 var originalString = myResult.input // "How much wood could a wood chuck chuck"

І exec() метод викликається у RegExp об'єкта, як аргумент передається рядок:

Var myString = "How much wood could a wood chuck chuck"; var myPattern = /.huck/; var myResult = myPattern.exec(myString); // ["chuck"] var patternLocation = myResult.index; // 27 var originalString = myResult.input // "How much wood could a wood chuck chuck"

Обидва методи повертають перше збіг входження. Якщо збіги не знайдено буде повернуто NULL. Якщо у регулярного виразу присутній прапор "g", то як результат буде повернено масив, що містить усі збіги.

Ви також можете використовувати метод search(), який як аргумент приймає регулярний вираз і повертає початкову позицію першого шаблону, що збігся.

Var myString = "Assume"; var patternLocation = myString.search(/ume/); // 3

Якщо збігів не виявлено, спосіб поверне -1.

Порівняння двох рядків для подальшого сортування

Щоб порівняти два рядки в залежності від порядку сортування в мовному стандарті, ви можете використовувати метод localeCompare . Метод localeCompare повертає три можливі значення.

MyString = "chicken"; var myStringTwo = "egg"; var whichCameFirst = myString.localeCompare(myStringTwo); // -1 (except Chrome, which returns -2) whichCameFirst = myString.localeCompare("chicken"); // 0 whichCameFirst = myString.localeCompare("apple"); // 1 (Chrome returns 2)

Як показано вище, буде повернено негативне значення, якщо оригінальний рядок при сортуванні опиняється перед рядковим аргументом, якщо рядковий аргумент при сортуванні опиняється після оригінального рядка, повертається значення +1. Якщо повертається нульове значення, два рядки еквівалентні.

Операндами операторів порівняння можуть бути чисельні та рядкові значення. Рядки порівнюються, виходячи із стандартного лексикографічного порядку при використанні Unicode.

Яваскрипт допускає як суворе порівняння, і порівняння з приведенням типів. Для суворого порівняння обидва операнди повинні мати однаковий тип і:

  • Два рядки строго рівні, якщо складаються з однакової послідовності символів
  • Два числа строго рівні, якщо рівні у звичному значенні слова. +0 суворо дорівнює -0.
  • NaN строго не одно нічому, включаючи NaN
  • Два булевих операндів строго рівні, якщо вони обидва true або false
  • Два операнди-об'єкти строго рівні, якщо є посиланнями на той самий загальний об'єкт
  • Null і Undefined рівні == , але не строго рівні ===

Наступна таблиця описує оператори порівняння:

Оператор Опис Приклади, що повертають true при var1=3, var2=4
Рівно (==) Якщо два операнди не одного типу, JavaScript перетворює типи і порівнює суворо. Якщо будь-який операнд - число чи булево значення, то операнди перетворюються на числа; якщо будь-який операнд рядок - другий перетворюються на рядок

3 == var1
"3" == var1
3 == "3"

Не одно (!=) Повертає true якщо операнди не рівні. Якщо операнди мають різний тип, JavaScript перетворює.

var1 != 4
var1 != "5"

Строго одно (===) Повертає true якщо операнди строго рівні (див. вище), без перетворення типів.
Строго не одно (!==) Повертає true якщо операнди не є строго рівними (див. вище) або мають різні типи.

var2 !== 3
3 !== "3"

Більше (>) Повертає true якщо лівий операнд більше правого.
Більше або одно (>=) Повертає true , якщо лівий операнд більший за правий або дорівнює йому.

var2 >= var1
var1 >= 3

Менше (<) Повертає true якщо лівий операнд менше правого.
Менше або дорівнює (<=) Повертає true якщо лівий операнд менше правого або дорівнює йому.

var1<= var2
var2<= 5

Використання операторів порівняння

Стандартні оператори рівності (== і!=) порівнюють два операнди щодо їх типу. Сувора рівність (=== і!==) здійснює порівняння операндів однакового типу. Використовуйте строгу рівність, якщо операнди повинні мати однаковий тип і значення. В іншому випадку, використовуйте звичайні оператори рівності, які дозволяють перевірити рівність операндів, навіть якщо вони різного типу.

При конвертації типів яваскрипт перетворює String, Number, Boolean і Object наступним чином:

  • При порівнянні числа та рядка, рядок перетворюється на числове значення. Яваскрипт у своїй отримує значення числа з рядкового літералу: "123" == 123 .
  • Якщо один з операндів - булевий, то він перетворюється на 1, якщо він true і до +0, якщо він false
  • Якщо об'єкт порівнюється з числом або рядком, яваскрипт намагається отримати відповідне значення об'єкта. Він перетворює об'єкт до елементарного значення, рядка або числа, використовуючи методи valueOf і toString. Якщо конвертувати об'єкт не вдається - генерується помилка виконання.
Не працює