Почему (string === array)
ложно?
Вы используете strict comparison (===
), который также проверяет тип данных значений. Очевидно, что примитивная строка - это не тот же тип данных, что и объект , а объекты действительно равны сами по себе. Доказательство:
var foo = [1,2,3];
var bar = [1,2,3];
console.log(foo === bar); // false
console.log(foo === foo); // true
Теперь, если бы вы использовали loose comparison (==
) следующее сравнение действительно возвращается true
:
console.log([1,2,3] == '1,2,3'); // true
Почему? Поскольку массив сначала преобразуется в строку, и это приводит к тому же строковому значению. Но это не означает, что значения одинаковы (один по-прежнему является массивом, а другой - строкой). Вот почему вы всегда должны использовать строгое сравнение.
Какая разница между строкой и массивом символов в JavaScript?
Строка не являются массивов, потому что они наследуют от differentprototypes (*) и, следовательно, имеет различные методы экземпляра. Например, массивы имеют method join
, а строки - method match
.
С одной точки зрения, массивы и строки похожи хотя, потому что они оба массив типа объекты.
Что делает array-like означает? Это означает, что объект имеет свойства и числовые свойства length
.Строка имеет свойство length
, которое дает вам количество символов в строке, и вы можете получить доступ к одиночным символам строки с помощью str[i]
. Пример:
var arr = ['a','b','c'];
var str = "abc";
console.log(arr.length); // 3
console.log(str.length); // 3
console.log(arr[0]); // a
console.log(str[0]); // a
console.log(arr === str); // false
console.log(typeof str); // string
console.log(typeof arr); // object
*: На самом деле, там даже есть разница между примитивными строками и объектами строк, но я не хочу слишком глубоко здесь. Технически примитивные строки не имеют никаких методов, потому что они не являются объектами, но в большинстве случаев вы можете рассматривать примитивные строки, как они были объектами.