2010-03-16 4 views
3

Во время чтения книги о JavaScript я наткнулся на пример:Массивы в JavaScript

var names = new Array("Paul","Catherine","Steve"); 
var ages = new Array(31,29,34); 
var concatArray; 
concatArray = names.concat(ages); 

Мой вопрос, почему не переменная concatArray нужно быть определить как new Array() для того, чтобы хранить данные сцепленный для обоих массивов имя и возрастов, но когда я пытаюсь обработать concatArray как массив, добавив еще одну строку кода «document.write(concatArray[0])», он работает точно так же, как массив, и показывает мне данные, хранящиеся в первом элементе. Мне просто интересно, почему я не объявляю concatArray новым массивом, но он все еще работает как один.

ответ

0

Поскольку Javascript динамически типизирован.Переменная не имеет определенного типа, а массив - объект, который можно присвоить любой переменной.

Когда вы объявляете переменную без присвоения ей значения, он просто существует с неопределенным значением:

var answer; 
// now the variable exists, but it doesn't have a value 
answer = 42; 
// now the variable has the numerical value 42 
answer = "hello"; 
// now the numerical value has been replaced with the string value "hello" 
answer = []; 
// now the variable contains an empty array 
answer[0] = 1337; 
// now the variable contains an array that contains an item with the value 1337 
answer = -1 
// now the array is gone and the variable contains the value -1 
+0

, но когда я пытаюсь выполнить его таким образом

 var myArray(); myArray[0] = 2; // or string or whatever alert(myArray[0]); 
Я сделал это, не обращая внимания строка var myArray = new Array();, и код doesnt works.Why? Я думал, что javascript - это свободно набранный язык – caramel1995

+0

@caramel: Объявление переменной типа 'var myArray();' недопустимо. Таким образом, Javascript не обрабатывает массивы, вместо этого вы создаете объект массива и назначаете переменную: var myArray = new Array(); 'или' var myArray = []; '. – Guffa

+0

THANks для вас, ребята, руководство, я прочитаю это еще раз позже и выберем, какой из них лучший ответ, СПАСИБО снова !!! – caramel1995

6

Вы объявляете concatArray как новый массив, но декларация неявно. Функция concat возвращает новый массив, содержащий конкатенированные копии исходных двух массивов. Тип concatArray выведен из возвращаемого типа функции concat.

1

Javascript не волнует, что такое содержимое var, когда оно объявлено; поэтому вы можете объявить var concatArray, не указывая его в виде массива. После присвоения ему значения и типа (в результате функции concat()) javascript рассматривает var как массив.

1

Проще говоря, w3schools говорит, что это довольно лаконично: метод

CONCAT() используется для соединения двух или более массивов.

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

w3schools

Похоже, Эндрю и Мэтью все равно опередил меня.

3

Переменные не имеют конкретного типа данных в Javascript, как на других языках. Вы можете присвоить переменную любое значение, которое вы хотите.

Это означает, что var concatArray; объявляет переменную, но значение undefined:

var concatArray; 
alert(typeof concatArray === "undefined"); 

только при присвоении возвращаемого значения names.concat(ages) (массив) в concatArray это получить о том, что тип:

var names = new Array("Paul","Catherine","Steve"); 
var ages = new Array(31,29,34); 
var concatArray; 
alert(typeof concatArray === "undefined"); 
concatArray = names.concat(ages); 
alert(concatArray.constructor === Array); 
0

I сделал бы ответ, немного отличающийся от Эндрю.
Переменные JavaScript не сильно типизированы. Вы можете поместить строку, затем число, а затем объект в одну и ту же переменную. Когда вы используете переменную, интерпретатор проверяет, что его текущий тип подходит для использования, которое вы пытаетесь сделать. Если вы пишете:

var a = 45; 
alert(a[0]); 
a = [ 5 ]; 
alert(a[0]); 

вы получите последовательно неопределенными затем .

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