почему javascript анализирует массив как строку при передаче в качестве аргумента или индекса - PullRequest
0 голосов
/ 06 мая 2020

рассмотрите этот код

пример 1:

function plus(a) {return a+10}
([1]) // "110"

пример 2:

var arr = [1,2,3,4,5,6,7]
arr[[1]] // 2
arr.splice([1],1);
arr // (6) [1, 3, 4, 5, 6, 7]

может кто-нибудь объяснить, почему передача массива в качестве аргумента преобразуется к строке? (вот как здесь похоже произошло)

Ответы [ 4 ]

0 голосов
/ 06 мая 2020

Javascript автоматически выводит определенный тип данных при добавлении двух разных типов данных.

Вот два примера:

2 + 3 // 5
2 + "hello" // "2hello"

При сложении двух чисел выводится целое число . Однако 2 и hello не могут быть добавлены численно, поэтому все сначала автоматически преобразуется в строку, а затем добавляется.

То же самое происходит и в вашем случае - a остается массивом , но к числу нельзя добавить массив. Итак, оба преобразуются в строки, а затем добавляются, и конечным результатом является строка.

Вы, вероятно, думали добавить значение в конец массива. Это делается с помощью:

a.push(10);

Или, если вы хотите добавить первый элемент в массив и 10, чтобы получить результат 11, используйте:

return a[0] + 10

Но вы не можете добавить одно число ко всему массиву, только к одному из элементов или в конце массива.

0 голосов
/ 06 мая 2020

Ответ # 1 - вы получаете строку из массива . ToString , поэтому вам нужно вернуть к числу - здесь я использую +

function plus(a) {return +a+10}
console.log(plus([1])) 

Второй

var arr = [1,2,3,4,5,6,7]
console.log(arr[1]) // 2
console.log(arr[[1]]) // 2

arr.splice([1],1); // removes the second item 
console.log(arr) 

var arr = [1,2,3,4,5,6,7]
arr.splice(1,1);          //  just as if you had done this
console.log(arr) //  [1, 3, 4, 5, 6, 7]
0 голосов
/ 06 мая 2020

Оператор + не работает для массивов. Это работает только для чисел или строк.

Поскольку javascript не может использовать ваш массив с оператором +, он преобразует его в строку раньше. Вот почему plus([1]) равно "110"

Вы можете использовать метод pu sh, если хотите добавить в массив:

  array.push(newElement);

Во втором примере, внутри сращивания, ваш массив используется с оператором, который его не поддерживает, поэтому он преобразуется в число. Если вы посмотрите на определение splice MDN, вы увидите, что оно ожидает число, а не массив.

Когда вы хотите использовать splice, вы не передаете массив в качестве первого аргумент, вы передаете индекс первого удаляемого элемента. Если вы хотите удалить 2 из своего массива, выполните arr.splice (1,1);

0 голосов
/ 06 мая 2020

может кто-нибудь объяснить, почему передача массива в качестве аргумента

Это не так.

Он обрабатывается как массив вплоть до момента, когда вы попробуйте использовать на нем оператор сложения .

Попадает на шаг Пусть будет rprim? ToPrimitive (rval) и преобразует его в соответствии с этими правилами .

И так до тех пор, пока он не вызовет метод toString массива .


Подобные правила применяются и в других примерах.

Короче: когда нет никакого смысла использовать массив в данном контексте, применяется преобразование типов, чтобы превратить его в тип данных, который подходит.

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