xiaochuachua 2015-05-26
copy from 小叉的http://ciaoca.com/#!diary?id=221
-----------------------------------------------------------------------------
前几天看到一道题目,如下:
alert([]!=[]) // true
代码很短,得到的结果却是 true。
[] 和 [] 两个值看似一样,但是为什么判断它们不相等时却得到 ture 呢?这两天看权指中找到了答案,涉及到 JavaScript 中的传值与传址。
JavaScript 类型分为 基础类型 和 引用类型,JavaScript 的基本规则是:基本数据类型通过传值来操作,而引用类型通过传址来操作。
数字和布尔类型属于基本类型,对象属于引用类型,而数组和函数都是对象的特殊类型。因此数组使用的是传址操作,所以在比较时是去判断是否引用为同一个地址。
通过两个示例来看传值和传址的区别:
// 传值示例 var a=1; var b=a; b=2; console.log(a); // 1 console.log(b); // 2 console.log(a==b); // false // 传址示例 var c=[]; var d=c; d[0]="new"; console.log(c); // ["new"] console.log(d); // ["new"] console.log(c==d); // true
附上一张 JavaScript 类型总览(图) 供大家参考: