2017-01-11 2 views
3

Это связано с массивами в Javascript, которые я пытаюсь использовать в сложной логике.JS массивы - расширенное назначение

Рассмотрим следующий код:

a['a1'] = 'AJA' 

Мы знаем, что это так же, как (были даны соответствующие определения, предусмотренные) a.a1 = 'AJA'.

Таким образом, если мы идем вперед и интерпретировать это:

console.log(a.a1[0]) 
console.log(a.a1[1]) 
console.log(a.a1[2]) 
console.log(a.a1) 

Он регистрирует:

A 
J 
A 
AJA 

Теперь все, что мне нужно, чтобы назначить новый символ в 4-й позиции.

Когда я пытаюсь a[a1][3] = 'Y' или a.a1[3] = 'Y', а затем попробовать console.log(a.a1), он по-прежнему отображается AJA вместо AJAY.

Я знаю, что мы можем это сделать, используя конкатенацию строк, то есть a['a1'] = a['a1'] + 'Y' и получить это.

Но почему не первый способ работал? Какими другими способами это можно сделать?

+2

, пожалуйста, не используйте массивы с настраиваемыми свойствами, кстати, это не проблема с массивом, а проблема с строкой. –

+1

Если вы хотите добиться этого, вам нужно объявить строку как массив символов. 'var str =" AJA "; -> var strArr = ["A", "J", "A"]; ', когда вы закончите редактирование char-массива, вам нужно преобразовать его обратно в строку. – DomeTune

+0

'var str =" AJA "; var strArr = str.split (''); strArr [3] = "Y"; str = strArr.join (''); ' –

ответ

3

Строки неизменяемы. Это означает, что если вы создаете строку, вы больше не сможете ее модифицировать. Так что ваш a1 ничего не знает о 4-м символе.

Вы можете увидеть этот пример. Я пытаюсь изменить второй символ уже созданной строки, но он больше не будет изменен.

let a = {}; 
 
a['a1'] = 'AJA'; 
 

 
a.a1[1] = 'A'; 
 

 
console.log(a.a1);

Для больше вы можете увидеть MDN Documentation

+0

Да, они неизменны. Но означает ли это, что конкатенация строк - единственный способ добиться этого? –

+0

@ A.J. есть много способов сделать это. Но конкатенация строк простая: –

+0

«Какими другими способами это можно сделать?" –

-2

Как я знаю [a1] [3] или a.a1 [3] является строка переменной, вы можете обращаться это:

var s = 'ss';

Когда вы оцениваете s [0], вы получите строковое значение. Поэтому, когда вы назначаете любое строковое значение s, вы не получите «ss» + anyvalue, а anyvalue. :)

+0

Нет назначений string, только для свойства (не 's = ...' but 's [2] = ...'). Как это относится к вопросу? – Xufox

+0

Просто пример, когда вы пытаетесь оценить [a1] [3] или a.a1 [3] вы получите тот же тип, что и описанный выше пример. try typeof (a [a1] [3]) – yupengzhang

Смежные вопросы