2016-05-15 88 views
0

爲什麼下面的數組Javascript數組存儲過程

var mensajes = [('juan', 'pedro', 'hola como andas?'), ('jorge', 'matias', 'hola! todo bien?'), ('pedro', 'matias', 'buen dia matias!!')]; 

當我打印mensajes

["hola como andas?", "hola! todo bien?", "buen dia matias!!"] 

它不應該是隻有1值保持整個文本的陣列?或者()實際上是在做什麼,以及如何只存儲()中的最後一個值?我不明白這一點。在此先感謝

回答

1

()正在使數組只存儲你想要存儲的最後部分。

對於你的問題,沒有。你的代碼不是1個包含所有文本的數組。如果你想打印所有的文本,你必須刪除你在數組中的所有()。

像這樣:var mensajes = ['juan', 'pedro', 'hola como andas?', 'jorge', 'matias', 'hola! todo bien?', 'pedro', 'matias', 'buen dia matias!!'];

,如果你想打印一個特定的陣列,但不是所有的你可以把它改成這樣:

var mensajes = [['juan', 'pedro', 'hola como andas?'], ['jorge', 'matias', 'hola! todo bien?'], ['pedro', 'matias', 'buen dia matias!!']];

這個擁有數組的數組,以便您在如果你喜歡console.log(mensajes [0]),可以打印一個完整的數組,只打印出[juan,pedro,hola coma andas]。在這種情況下,您無法使用console.log(mensajes)一次打印所有文本。

如果你想要這個,你首先編寫數組名稱,然後寫出你想要的數組索引值的括號。

希望這會有所幫助!

+0

這是一個非常快速的答案,我試圖解決一個編程問題,並且爲了知道誰將消息發送給我需要從每條消息獲取第一個值的人,所以現在我知道它爲什麼只存儲最後一個字符串。即時通訊假設我不能更改var mensajes,所以ima想別的東西。感謝你的回答! –

+0

沒問題。祝你好運!如果您發現其中一個答案有用,請投票並選擇最佳答案,以便下次有人知道哪一個更好。 – Edwin

3

由於您已經在您的數組文字中使用括號,JS解釋器將包裝的代碼視爲表達式,並且,成爲逗號運算符。逗號運算符從左到右評估它的操作數並返回最後一個操作數。這就是爲什麼括號中操作數的最後一個值被設置爲數組值的原因。

+0

這真的很奇怪,JS語法會允許這種無用的生產 –

+0

@self實際上操作員有它自己的用例。這是一個不知不覺地誤用操作員的具體案例。選中此項:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comma_o​​perator – undefined

+0

使用parens生成表達式上下文在處理短路邏輯操作和三元時非常有用。就像'!! condition &&(a.push(b),a)'意味着條件是否滿足,將'b'推到數組'a'並返回數組'a'。這是很重要的,否則'a.push(b)'會返回新的'a'長度。 – Redu