就像你刚才看到的如上代码,将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次。
如果你想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。下面的这个例子则是通过循环来完成对数组的复制。
复制代码 代码如下:
var a = ['a', 'b', 'c']; //待复制的数组
var b = []; //复制到目标的空数组
for (var i = 0; i < a.length; i++) { //遍历a[]中的每个元素
b[i] = a[i]; //将元素复制到b中。
}
同样的,如果我们想比较两个单独或者数组,则必须比较他们的属性或元素。下面这段代码定义了一个比较练个数组的函数。
复制代码 代码如下:
function equalArrays(a, b) {
if (a.length != b.length) return false; //两个长度不相同的数组不相等
for (var i = 0; i < a.length; i++) //循环遍历所有元素
if (a[i] !== b[i]) return false; //如果有任意元素不等,则数组不相等
return true; // 否则他们相等
}
8.类型转化
javascript中的取值型非常灵活,我们已经从布尔值看到了这一点:当javascript期望使用一个布尔值时候,你可以提供任意类型值。javascript将根据需要自行转换类型。一些值(真值)为true,其它值(假值)转化为false.这在其它类型中同样适用。如果javascript期望使用一个字符串,它把给定的值转换为字符串。如果javascript期望使用一个数组,它把给定的值转换为数字(如果转化结果无意义的话将返回NaN),一些例子如下:
复制代码 代码如下:
10 + "object" //=> "10object";
"7" * "4" // =>28 两个字符串均转化为数字
var n = 1 - "x" // =>NaN字符串x无法转换为数字
n + " objects" // =>"NaN objects":NaN转换为字符串"NaN"
下表说明了在javascript中如何进行类型转化。粗体突出了那些让你倍感意外的类型转化。空单元格表示不必要也没有执行的转换。
值
转换为字符串
数字
布尔值
对象
undefined
null
"undefined"
"null"
NaN
0
false
false
throws TypeError
throws TypeError
true
false
"ture"
"false"
1
0
new Boolean(true)
new Boolean(false)
""(空字符串)
"1.2"(非空,数字)
"one"(非空,非数字)
0
1.2
NaN
false
true
true
new String("")
new String("1.2")
new String("one")
0
-0
NaN
Infinty
-Infinty
1(无穷大,非零)
"0"
"0"
"NaN"
"Infinity"
"-Infinity" "1"
false
false
false
true
true
true
new Number(0);
new Number(-0);
new Number(NaN)
new Number(Infinty)
new Number(-Infinty)
new Number(1)
{}(任意对象)
[](任意数组)
[9](1个数字元素)
['a'](其它数组)
function(){}(任意函数)
参考本小节第三节内容
""
"9"
使用join()方法
参考本小节第三节内容
参考本小节第三节内容
0
9
NaN
NaN
true
true
true
true
true