Почему это показывает как массив и объект как поведение - PullRequest
0 голосов
/ 14 декабря 2018

Пожалуйста, рассмотрите приведенный ниже код javaScript.

var obj = /e/.exec("The best things in life are free!");
var k = "";
var x;
for (x in obj) {
  k = k + " " + obj[x] + " " + x + "<br>";
}
document.getElementById("demo").innerHTML = (obj instanceof Array) + " " + obj[0] + " " + obj[1] + " " + obj.index + "<br>" + k;
<h2>JavaScript Regular Expressions</h2>
<p id="demo"></p>

Дает вывод

JavaScript Regular Expressions
true e undefined 2
e 0
2 index
The best things in life are free! input
undefined groups  

Теперь в приведенном выше коде я использовал obj[0] obj [1] (which are array only notations), and also obj.index`(который не должен был работать для массива).

Теперь я действительно запутался в том, что именно является obj ....

1 Ответ

0 голосов
/ 14 декабря 2018

Теперь в приведенном выше коде я использовал obj [0], obj 1 (которые являются обозначениями только для массивов)

Нет, это не так.Например:

const obj = {answer: 42, 42: "is the answer"};
const str = "answer";
console.log(obj[str]); // 42
console.log(obj[42]);  // is the answer

.... а также obj.index (который не должен был работать для массива)

Да, онидолжен.: -)

Стандартные массивы в javaScript вообще не являются массивами.Это просто объекты, которые:

  • Наследуют от Array.prototype.
  • . Имеют специальное поведение для свойства с именем length.
  • . Имеют специальное поведение для свойств.с именами, которые соответствуют определению индекса массива (строка, которая при преобразовании в число n находится в диапазоне 0 <= n <2 <sup>32 - 1).Это свойства, которые соответствуют элементам массива.Обычно мы пишем их без кавычек (myArray[0]), но официально они являются строками.
  • Имеют собственную буквальную форму ([]).

Поскольку они являются объектами,они также могут иметь свойства:

const a = [1, 2, 3];
a.answer = 42;
console.log(a.answer); // 42

Сам JavaScript использует этот факт в нескольких местах (но не во многих), включая, как вы обнаружили, функцию RegExp.prototype.exec.Другое место в первом аргументе передается функции тега , которая имеет записи для сегментов строки из шаблона и свойство raw с необработанной версией этих сегментов.

Подробнее о моем анемичном маленьком блоге: Миф о массивах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...