Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的变量有两种不同的数据类型的值:
基本类型:基本类型的值是简单的数据段。包括:Undefined、Null、Number、Boolean、String五种
引用类型:引用类型的值是保存在内存中的对象,引用类型对象保存的是指针。
当复制变量时,对于基本类型,会在变量对象上创建新值,然后把该值复制到新变量分配的位置上。
对于引用类型,同样也会把储存在变量中的值复制一遍,只不过这个变量储存的是指针。指针指向储存在堆中的对象:
传递参数:
ECMAScript中所有函数的参数都是按照值传递的,即把函数的外部的值复制给一个局部变量arguments对象中的一个元素。传递引用时会把引用的内存地址复制给这个局部变量,所以局部变量的变化会反映在函数外部。
function setName(obj){
obj.name = "yangxunwu";
} var person = new Object();
setName(person);
alert(person.name) //"yangxunwu" 这个示例中的引用类型传递给函数参数时,其对象的地址被复制给函数参数,所以setNme()内部对对象添加属性时,也会反映到外部person对象中。function setName(obj){
obj.name = "yangxunwu";
obj = new Object();
obj.name = "new name";
} var person = new Object();
setName(person);
alert(person.name); //"yangxunwu" 对象传递给函数时只是把地址复制给内部变量arguments,所以第一个obj.name=
"yangxunwu",修改了外部的对象的属性,当obj = new Object()时,局部变量
被重新赋值,这个值是局部对象的值,所以即使添加了属性,这个局部对象也会在
函数执行完自动销毁。如果是引用传递,那么这里的外部person对象的name属性
会被修改为”new name“,但javascript的函数参数是值传递,所以这里依旧输
出”yangxunwu“.
检测类型
对于基本数据类型用typeof操作符,typeof对于引用类型一律返回object
基本数据类型:
typeof 4 //Number
typeof "4" //String
typeof null //Object对于引用用类型,使用instanceof操作符类判断是什么类型的对象,所以引用类型都是Object实例,所以始终反悔true,基本数据类型不是对象,所以始终为false。
person instanceof Object; //true
5 instanceof Object //false
执行环境和作用域
1、执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有与之相关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中。
2、全局执行环境是最外围的一个执行环境,Web浏览器中全局执行环境是window对象,执行环境中的代码全部执行完后,环境被销毁,所以函数和变量也被销毁。
3、代码执行时会创建一个作用域链,用途是保证对执行环境有权访问的所有变量和函数的有序访问,作用域前端是当前执行代码的环境的变量对象,下一个变量对象来自包含的外部环境,直到全局环境。
4、标示符查询是沿着作用域链一级一级的搜索,搜索到之后就停止搜索,所以标示符相同的局部中的变量会屏蔽外部变量。
延长作用域链with和try-catch:
对于with语句来说,会将指定的对象添加到作用域链中,对于catch,会创建新的变量对象,包含错误对象的声明。
function buildUrl(){
var loc = "http://"; with(location){
var url = href + loc;
} return url;
}
with将location对象所有属性和方法添加到了变量对象,然后变量对象被添加到作用域的前端,
with的内部定义了url变量,url也就成为了函数执行环境的一部分,所以可以作为函数被返回。 js没有块级作用域for(var i = 0; i < 10; i++){
....
} alert(i) //
Javascript高级程序设计——基本类型和引用类型的值的更多相关文章
- JavaScript 深入了解基本类型和引用类型的值
转载:https://segmentfault.com/a/1190000006752076 一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(refere ...
- 基本类型和引用类型的值 [重温JavaScript基础(一)]
前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...
- 《JavaScript高级程序设计》读书笔记 ---基本类型和引用类型的值
变量.作用域和内存问题 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.在 ...
- javascript变量中基本类型和引用类型的详解解读
前言: Javascript语言中的变量和其他语言的变量有很大区别,javascript松散类型的本质,决定了它只是在特定时间时间保存特定值得名字而已.由于不存在定义某个变量必须保存何种数据类型值的规 ...
- JS基本类型和引用类型的值
JS中可以把变量分成两部分,基本类型和引用类型. 基本类型比较简单,包括:Undefined.Null.Boolean.Number和String,基本类型值就是简单的数据段:引用类型值可能由多个值构 ...
- 【Java】基本类型和引用类型(值传递)
[关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...
- 4.1 基本类型和引用类型的值【JavaScript高级程序设计第三版】
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...
- 《JS高程》基本类型和引用类型的值学习笔记
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
- 【JavaScript】基本类型和引用类型的值、引用类型
一.前言 接着上一篇继续记笔记 二.内容 动态的属性 var person = new Object(); person.name = "Nicholas&qu ...
随机推荐
- 配置ASP.NET Web应用程序, 使之运行在medium trust
这文章会向你展示, 怎么配置ASP.NET Web应用程序, 使之运行在medium trust. 如果你的服务器有多个应用程序, 你可以使用code access security和medium ...
- ejb 远程调用
1,客户端代码: package com.example.test; import java.util.Hashtable; import java.util.Properties; import j ...
- POJ2528Mayor's posters(离散化 + 线段树)
题目链接: 题意:给定一些高度都相同的海报去贴,问最后能看见几张海报 The picture below illustrates the case of the sample input. { 8,9 ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- Docker入门教程(四)Docker Registry
Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...
- python regrex
Python正则表达式指南 The source from the website http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.htm ...
- python模块app登陆认证(M2Crypto数字证书加密)
需求: 1.通过数字证书,非对称加密方式传送对称秘钥给服务端 2.用户名.密码使用对称秘钥加密,发送服务端验证 3.传送数据使用字节流方式 实现思路: 1.了解python的struct模块,用于字节 ...
- uC/OS-II实现TEST.MAK块
################################################################################ ...
- 异步-学习笔记3 Task
1. 通过Task启动多线程 2. 解决多线程的几大应用场景 private void btnTask_Click(object sender, EventArgs e) { Console.Writ ...
- git push to nas
1 建nas目录 在nas的/volume1/git_repos目录下新建相关的目录,并在该目录下运行git init --bare cd /volume1/git_repos mkdir wifi_ ...