JavaScript变量与作用域
来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:45 点击:次
1.JavaScript的变量类型
JavaScript的变量分为基本类型和引用类型.基本数据类型是直接存在栈空间的简单数据段,这种类型直接将值保存在内存的某个位置.引用数据类型存储的是指向实际存储于堆内存中的对象的地址.
JavaScript中的基本数据类型共有五种:Number,Null,Undefined,Boolean和String.需要注意的是,js中的String是基本数据类型.
对于基本类型变量的访问,是按值访问的,而对于引用变量的访问是按引用访问的.
2.动态属性
对于引用数据类型的变量,可以对其添加属性和方法,也可以删除属性和方法,例如:
[javascript]
var p = new Object();
p.name = "张三";
alert(p.name);//张三
但是对于基本数据类型来说,这样是不允许的,如下:
[javascript]
var str = "张三";
str.age = 20;
alert(str.age);//undefined
3.复制变量值
对于基本类型的变量,从一个变量向另一个变量复制,实际上是将第一个变量存储的值复制给另一个变量。因此,复制完成之后,对第一个变量进行修改,修改操作不会影响另一个变量的值。例如;
[javascript]
var num1 = 1;
var num2 = num1;
alert(num2);//1
num1 = 2;
alert(num2);//1
但是对于引用数据类型,将一个变量复制给另一个变量,实际上是存储第一个变量所存储的地址拷贝给另一个变量,换句话说,这两个变量之后就指向同一块内存空间。因此,接下来对第一个变量的操作也会影响第二个变量。例如:
[javascript]
var p1 = newObject();
p1.name = "张三";
p1.age = 20;
var p2 = p1;
alert(p2.age);//20
p1.age = 30;
alert(p2.age);//30
4.参数传递
JavaScript的参数传递全部是按值传递。也就是说,将函数外部的值复制给函数的参数。对于基本类型来说,和变量的复制是一样的,对于引用数据类型,则如同引用数据类型的复制一样。下面分别举例说明:
[javascript]
function inc(num) {
num += 1;
}
var i = 10;
alert(i);//10
inc(i);
alert(i);//10
对于基本类型变量i,将其传递给函数inc,实际上是将其值10传递给函数inc的参数,在函数内部,对其内部的变量进程加1操作,因此不会影响i。
再看下面的代码: www.2cto.com
[javascript]
function setName(obj) {
obj.name = "张三";
}
var person = newObject();
setName(person);
alert(person.name);//张三
将person传递给函数setName,于是将person所指向的堆内存地址传递给函数的参数,因此,参数指向的内存和person指向的内存是同一个地址。因此在函数内部修改该地址指向对象的内容也会反映到person上来。
5.检测变量的类型
检测基本类型,使用typeof运算符即可,例如:
[javascript]
var s = "张三";
var b = true;
var i = 20;
var u;
var n = null;
var o = new Object();
alert(typeof s);//string
alert(typeof b);//boolean
alert(typeof i); //number
alert(typeof u); //undefined
alert(typeof n); //object
JavaScript的变量分为基本类型和引用类型.基本数据类型是直接存在栈空间的简单数据段,这种类型直接将值保存在内存的某个位置.引用数据类型存储的是指向实际存储于堆内存中的对象的地址.
JavaScript中的基本数据类型共有五种:Number,Null,Undefined,Boolean和String.需要注意的是,js中的String是基本数据类型.
对于基本类型变量的访问,是按值访问的,而对于引用变量的访问是按引用访问的.
2.动态属性
对于引用数据类型的变量,可以对其添加属性和方法,也可以删除属性和方法,例如:
[javascript]
var p = new Object();
p.name = "张三";
alert(p.name);//张三
但是对于基本数据类型来说,这样是不允许的,如下:
[javascript]
var str = "张三";
str.age = 20;
alert(str.age);//undefined
3.复制变量值
对于基本类型的变量,从一个变量向另一个变量复制,实际上是将第一个变量存储的值复制给另一个变量。因此,复制完成之后,对第一个变量进行修改,修改操作不会影响另一个变量的值。例如;
[javascript]
var num1 = 1;
var num2 = num1;
alert(num2);//1
num1 = 2;
alert(num2);//1
但是对于引用数据类型,将一个变量复制给另一个变量,实际上是存储第一个变量所存储的地址拷贝给另一个变量,换句话说,这两个变量之后就指向同一块内存空间。因此,接下来对第一个变量的操作也会影响第二个变量。例如:
[javascript]
var p1 = newObject();
p1.name = "张三";
p1.age = 20;
var p2 = p1;
alert(p2.age);//20
p1.age = 30;
alert(p2.age);//30
4.参数传递
JavaScript的参数传递全部是按值传递。也就是说,将函数外部的值复制给函数的参数。对于基本类型来说,和变量的复制是一样的,对于引用数据类型,则如同引用数据类型的复制一样。下面分别举例说明:
[javascript]
function inc(num) {
num += 1;
}
var i = 10;
alert(i);//10
inc(i);
alert(i);//10
对于基本类型变量i,将其传递给函数inc,实际上是将其值10传递给函数inc的参数,在函数内部,对其内部的变量进程加1操作,因此不会影响i。
再看下面的代码: www.2cto.com
[javascript]
function setName(obj) {
obj.name = "张三";
}
var person = newObject();
setName(person);
alert(person.name);//张三
将person传递给函数setName,于是将person所指向的堆内存地址传递给函数的参数,因此,参数指向的内存和person指向的内存是同一个地址。因此在函数内部修改该地址指向对象的内容也会反映到person上来。
5.检测变量的类型
检测基本类型,使用typeof运算符即可,例如:
[javascript]
var s = "张三";
var b = true;
var i = 20;
var u;
var n = null;
var o = new Object();
alert(typeof s);//string
alert(typeof b);//boolean
alert(typeof i); //number
alert(typeof u); //undefined
alert(typeof n); //object
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- JavaScript详解
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>