JS_高程4.变量,作用域和内存问题(1)
1.基本类型和应用类型的值
ECMAScript变量可能包含两种不同数据类型的值:
基本类型值——简单的数据段。(5种基本的数据类型,按值访问,因为可以操作保存在变量中的实际的值。)
引用类型值——多个值构成的对象。(引用类型的值是保存在内存中的对象。)
注意:
javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。在操作对象时,实际上是操作对象的引用,引用类型的值是按引用访问的。
说明:
其实上面这种说法不严谨,但复制保存着对象时,操作的是对象的引用。但是为对象添加属性时,操作的是对象。
另:在很多语言中,字符串以对象来表示,因此被认为是引用类型的。ECMAScript放弃了这一传统。
(1)可以为引用类型的值动态地添加属性
eg:
var person=new Object(); //注意,Object的第一个字母为大写,如果小写会出现错误。
person.name="Linshuling";
alert(person.name);
</script>

(2)复制变量值
复制基本类型的值:
eg:var num1=5;
var num2=num1;
如上的例子,num1和num2是完全独立的,虽然它们的值都为5。
复制引用类型的值:
eg:
var obj1=new Object();
var obj2=obj1;
obj1.name="Linshuling";
alert(obj2.name);

如上,当一个变量向另一个变量复制引用类型的值是,同样也会将变量对象中的值复制一份放到位新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一对象。因此,改变其中一个变量,就会影响另一个变量。
(3)传递参数
ECMAScript中所用函数的参数都是按值传递的。(访问变量有按值和按引用两种,而参数只能按值传递。)
以下两个例子体会使用对象类型值的按值传递:
eg:
function setName(obj){
obj.name="Linshuling";
}
var person=new Object();
setName(person);
alert(person.name);

function setName(obj){
obj.name="Linshuling";
obj=new Object();
obj.name="lin";
}
var person=new Object();
setName(person);
alert(person.name);

(4)检测类型
用typeof操作符可以检测一个变量是什么基本数据类型,当变量的值是null和对象时,typeo操作符会返回“Object”。当我们想知道对象时什么类型的对象时,可以用instanceof操作符。
语法如下:
result = variable instanceof constructor
如果变量是给定引用类型的实例,instanceof会返回true。
eg:
alert(person instanceof Object); //变量person是Object吗?
注意:
ECMA-262规定任何在内部实现[[Call]]方法的对象都应该在应用typeof操作符时返回“function”,由于Safari 5及之前版本和Chrome 7及之前版本的正则表达式实现了这个方法,因此对正则表达式应用typeof会返回“function”,在ie和Firefox中,对正则表达式应用typeof会返回“Object”。
JS_高程4.变量,作用域和内存问题(1)的更多相关文章
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
- JS_高程4.变量,作用域和内存问题(3)垃圾收集
JavaScript的自动垃圾收集机制 执行环境会负责管理代码执行过程中使用的内存,编写JavaScript程序时,所需内存的分配以及无用内存的回收完全实现自动管理. 原理: 找出那些不再继续使用的变 ...
- JS_高程4.变量,作用域和内存问题(2)执行环境及作用域
1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...
- JavaScript变量作用域和内存问题(二)
执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...
- 浅谈javascript中变量作用域和内存(1)
先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...
- 浅谈javascript中变量作用域和内存(2)
1.无块级作用域 javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦.在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域 举个例子 if(true) { var na ...
- js基础之--变量 作用域和内存问题
基本类型:Undefind Null Boolean Number String 引用类型: 对象 在操作对象时,实际上实在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的. 从一个变 ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
随机推荐
- C#学习-析构函数
析构函数用于在类销毁之前释放类实例所使用的托管和非托管资源. 对于C#应用程序所创建的大多数对象,可以依靠.NET Framework的垃圾回收器(GC)来隐式地执行内存管理任务. 但是,若创建封装了 ...
- IIS7 禁止目录运行脚本
早晨看博客说有人被黑了:http://www.cnblogs.com/sanshi/p/3150639.html 看回复建议禁用上传目录的脚本运行权限 在IIS6上还是比较容易的,直接右键--属性,把 ...
- [LeetCode] Best Time to Buy and Sell Stock 6道合集【DP】
1. Best Time to Buy and Sell Stock 2. Best Time to Buy and Sell Stock II 3. Best Time to Buy and Sel ...
- 【Android】LMK 工作机制
Android分析之LowMemoryKiller Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存. 那么,如何来判断,那些进程是需要杀死的呢?答案就是我们的标题:Low ...
- appstore跳转
二维码跳转 https://itunes.apple.com/cn/app/id123123123 应用内跳转 this.alertCtrl.create({ title: '更新', message ...
- python 进阶读书笔记2 -- python魔法函数
#!/usr/bin/env python# -*- coding: utf-8 -*- class student: def __init__(self, name_list): self.stud ...
- bootstrap AdminLTE模版的使用
参考: https://adminlte.io/themes/AdminLTE/documentation/index.html https://blog.csdn.net/gebitan505/ ...
- UOJ#191. 【集训队互测2016】Unknown 点分治 分治 整体二分 凸包 计算几何
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ191.html 题目传送门 - UOJ191 题意 自行移步集训队论文2016中罗哲正的论文. 题解 自行 ...
- PAT (Basic Level) Practise - 害死人不偿命的(3n+1)猜想
题目链接:https://www.patest.cn/contests/pat-b-practise/1001 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果 ...
- 比较对象--"=="与"equal"的区别
String stra=new String("你好"); String strb=new String("你好"); String strc=stra; bo ...