Как движок JavaScript меняет тип объекта Array на String - PullRequest
0 голосов
/ 26 октября 2018
 let arr = [1,2,3];
 let empArr =[];

 for(var i =0; i< arr.length;i++){

  console.log('First',typeof empArr);

  empArr+=arr[i];

  console.log('Second',typeof empArr)
 }

Приведенный выше код дает этот вывод

    First object
    Second string
    First string
    Second string
    First string
    Second string

Может ли кто-нибудь объяснить, как в первом типе итерации был объект Array, а затем после этого он стал строкой. Как работает Javascript Engine?

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Согласно JavaScript, typeof [] - это "object", то есть каждый массив на самом деле является объектом.

если вы добавите что-либо к строке, она станет строкой "1"+1 будет равно "11"

0 голосов
/ 26 октября 2018

Если мы запустим typeof empArr, мы увидим empArr объект.Независимо от того, объявляем ли мы его как массив, он является объектом.Далее, typeof arr[i] показывает arr[i] число.Следовательно, empArr+=arr[i] означает, что мы пытаемся добавить объект и число.Поскольку мы пытаемся добавить два разных типа, это может произойти с помощью принуждения, неявно.Принуждение означает преобразование значения одного типа в другой.JavaScript выполняет неявное приведение в соответствии со следующими правилами:

операнд + операнд = результат

  1. Если хотя бы один операнд является объектом, он преобразуется в примитивное значение (строка, числоили логическое значение);
  2. После преобразования, если хотя бы один операнд является строковым типом, второй операнд преобразуется в и выполняется конкатенация;
  3. В другом случае выполняются оба операнда, преобразованные в числа, и выполняется арифметическое сложение.

Обратите внимание, что примитивное значение массива или объекта является строкой.

InВ нашем случае empArr имеет тип объекта и по правилу 1 он приводится в виде строки.Теперь по правилу 2 arr[i], который является числом, также приводится к строке и присваивается empArr.

. Для более подробной информации:

Добавление JavaScriptподробности об операторе

Приведение типа JavaScript

0 голосов
/ 26 октября 2018

Это из-за автоматического преобразования типов.

+ = не является оператором массива, а вторым операндом является строка - первый преобразуется в строку.

Используйте empArr.толчок (обр [я])

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