JavaScript中的变量默认是全局变量, 严格地说, 甚至不需要在使用前进行声明。 如果对一

个事先未予声明的 JavaScript 变量进行初始化, 该变量就成了一个全局变量。


变量作用域

变量的作用域是指一个变量在程序中的哪些地方可以访问


定义数组

var arr = ["1","2","3"];
console.log(arr["1"]);

JavaScript 中的数组是一种特殊的对象, 用来表示偏移量的索引是该对象的属性, 索引可

能是整数。这些数字索引在内部被转换为字符串类型, 这是因为 JavaScript 对象中的属性名必须是字符串。

方式一:

var numbers = [];
print(numbers.length); // 显示 0

方式二:

var numbers = [1,2,3,4,5];
print(numbers.length); // 显示 5

方式三:

var numbers = new Array();
print(numbers.length); // 显示 0

方式四:

var numbers = new Array(1,2,3,4,5);
print(numbers.length); // 显示 5

方式五:

var numbers = new Array(10);
print(numbers.length); // 显示 10

方式六:

var objects = [1, "Joe", true, null];
var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
} v
ar samenums = nums;
nums[0] = 400;
print(samenums[0]); // 显示 400

当把一个数组赋给另外一个数组时, 只是为被赋值的数组增加了一个新的引用。 当你通过原引用修改了数组的值, 另外一个引用也会感知到这个变化。这种行为被称为浅复制。



一个更好的方案是使用深复制, 将原数组中的每一个元素都复制一份到新数组中

function copy(arr1, arr2) {
for (var i = 0; i < arr1.length; ++i) {
arr2[i] = arr1[i];
}
}

这样, 下述代码片段的输出就和我们希望的一样了:

var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
} v
ar samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // 显示 1