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 类型总览(图) 供大家参考:
相关推荐
JavaScript中的引用和复制是理解其工作原理的关键概念。在JavaScript中,数据类型分为两大类:基本类型(包括数字、字符串、布尔值、null和undefined)和引用类型(对象、数组和函数)。这两种类型的变量在赋值和...
在学习JavaScript基础时,变量作用域、传值与传址是核心概念,它们在编程过程中有着举足轻重的作用。本文将对这些概念进行简单介绍,并通过实例加深理解。 首先,关于变量作用域。在JavaScript中,变量的作用域决定...
JavaScript是一种动态类型的脚本语言,其变量、传值、传址和参数之间的关系是理解和使用JavaScript中的一个基础但关键点。接下来,我会详细解释这些概念。 首先,JavaScript中的变量可以存储两种类型的数据:基本...
本主题聚焦于JavaScript中的函数调用机制,特别是关于传值和传址的概念。理解这两个概念对于编写高效和可维护的代码至关重要。 首先,我们要明白在JavaScript中,变量有两种类型:基本类型(如字符串、数字、布尔值...
JavaScript中的变量处理方式是根据数据类型的不同而不同的。在JavaScript中,有两类基本的数据类型:不可变类型(immutable)和可变类型(mutable)。不可变类型包括字符串(String)、数字(Number)、布尔值...
JavaScript 基础知识点总结 ...本文总结了 JavaScript 中的一些基础知识点,包括数据类型、类型转换、作用域、变量提升、传值 VS 传址等。了解这些知识点对于编写高质量的 JavaScript 代码非常重要。
实际上,JavaScript总是以传值(byVal)的方式传递参数,但这并不意味着对于所有类型的值都表现为传统的传值行为。理解这一点的关键在于理解JavaScript中的值类型(如number、string)和引用类型(如Object、Array)...
虽然在比较时字符串被视为传值,但在赋值和传递过程中,它们实际上是通过传址处理的。这意味着字符串对象的引用被复制,而不是创建新的字符串。 4. **垃圾收集机制**: JavaScript有自动的垃圾收集机制,用于释放...
JavaScript 中变量的作用域相对与 JAVA、C 这类语言显得更自由,一个很大的特征就是 JavaScript 变量没有块级作用域,函数中的变量在整个函数都中有效。 例如: ```javascript function outPut(s) { document....
在JavaScript中,传递参数主要分为“传值”和“传址”两种方式。当函数通过值传递参数时,实际上传递的是变量值的一个副本。这意味着在函数内部对参数进行修改不会影响到原始变量。相反,当函数通过引用传递参数时,...