Javascript核心读书有感之类型、值和变量(9)

就像你刚才看到的如上代码,将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次。
如果你想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。下面的这个例子则是通过循环来完成对数组的复制。

复制代码 代码如下:


    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
     
 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgfxyy.html