var a=['a ,, ,b ,,'c’]; // Копируемый массив
var b = []; // Массив, куда выполняется копирование
for(var і = 0; і < a.length; i++) { // Для каждого элемента в массиве а[]
b[і] = а[і]; // Скопировать элемент а[] в b[]
}
Точно так же, если потребуется сравнить два отдельных объекта или массива, необходимо будет сравнить значения их свойств или элементов. Ниже приводится определение функции, сравнивающей два массива:
function equalArrays(a, b) {
if (a.length != b.length) return false; // Массивы разной длины не равны
for(var і = 0; і < a.length; і++) // Цикл по всем элементам
if (а[і] !== b[i]) return false; // Если хоть один элемент
// отличается, массивы не равны
return true; // Иначе они равны
}
3.8. Преобразование типов
JavaScript может гибко преобразовывать один тип в другой. Мы уже могли убедиться в этом на примере логических значений: везде, где интерпретатор JavaScript ожидает получить логическое значение, можно указать значение любого типа и JavaScript автоматически выполнит необходимое преобразование. Одни значения («истинные» значения) преобразуются в значение true
, а другие («ложные») - в false
. То же относится и к другим типам: если интерпретатор ожидает получить строку, он автоматически преобразует любое другое значение в строку. Если интерпретатор ожидает получить число, он попробует преобразовать имеющееся значение в число (в случае невозможности такого преобразования будет получено значение NaN
). Например:
10 + " objects" // => "10 objects". Число 10 преобразуется в строку
"7" * "4" // => 28: обе строки преобразуются в числа
var n = 1 - "x"; // => NaN: строка "x" не может быть преобразована в число
n + " objects" // => "NaN objects": NaN преобразуется в строку "NaN"
В табл. 3.2 описывается, как в JavaScript выполняется преобразование значений из одного типа в другой. Жирным шрифтом в таблице выделены значения, соответствующие преобразованиям, которые могут преподносить сюрпризы. Пустые ячейки соответствуют ситуациям, когда преобразование не требуется и не выполняется.
Преобразования одного простого типа в другой, показанные в табл. 3.2, выполняются относительно просто. Преобразование в логический тип уже обсуждалось в разделе 3.3. Преобразование всех простых типов в строку четко определено. Преобразование в число выполняется немного сложнее. Строки, которые могут быть преобразованы в числа, преобразуются в числа. В строке допускается наличие пробельных символов в начале и в конце, но присутствие других непробельных символов, которые не могут быть частью числа, при преобразовании строки в число приводят к возврату значения NaN
. Некоторые особенности преобразования значений в числа могут показаться странными: значение true
преобразуется в число 1, а значение false
и пустая строка "" преобразуются в 0.
Преобразование простых типов в объекты также выполняется достаточно просто: значения простых типов преобразуются в соответствующие объекты-обертки (раздел 3.6), как если бы вызывался конструктор String(), Number()
или Boolean()
.
Преобразование объектов в простые типы выполняется значительно сложнее и является темой обсуждения раздела 3.8.3.

3.8.1. Преобразования и равенство
Благодаря гибкости преобразований типов в JavaScript оператор равенства == также гибко определяет равенство значений. Например, все следующие сравнения возвращают true:
null == undefined // Эти два значения считаются равными.
"0" == 0 // Перед сравнением строка преобразуется в число.
0 == false // Перед сравнением логич. значение преобразуется в число.
"0" == false // Перед сравнением оба операнда преобразуются в числа.
В разделе 4.9.1 четко описывается, какие преобразования выполняет оператор ==
, чтобы определить, являются ли два значения равными, и в этом же разделе описывается оператор идентичности ===
, который не выполняет никаких преобразований перед сравнением.
Имейте в виду, что возможность преобразования одного значения в другое не означает равенства этих двух значений. Если, например, в логическом контексте используется значение undefined
, оно будет преобразовано в значение false
. Но это не означает, что undefined == false
. Операторы и инструкции JavaScript ожидают получить значения определенных типов и выполняют преобразования в эти типы. Инструкция if
преобразует значение undefined
в false
, но оператор ==
никогда не пытается преобразовать свои операнды в логические значения.
Читать дальше
Конец ознакомительного отрывка
Купить книгу