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高级程序设计——基本类型和引用类型的值的更多相关文章

  1. JavaScript 深入了解基本类型和引用类型的值

    转载:https://segmentfault.com/a/1190000006752076 一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(refere ...

  2. 基本类型和引用类型的值 [重温JavaScript基础(一)]

    前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...

  3. 《JavaScript高级程序设计》读书笔记 ---基本类型和引用类型的值

    变量.作用域和内存问题 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.在 ...

  4. javascript变量中基本类型和引用类型的详解解读

    前言: Javascript语言中的变量和其他语言的变量有很大区别,javascript松散类型的本质,决定了它只是在特定时间时间保存特定值得名字而已.由于不存在定义某个变量必须保存何种数据类型值的规 ...

  5. JS基本类型和引用类型的值

    JS中可以把变量分成两部分,基本类型和引用类型. 基本类型比较简单,包括:Undefined.Null.Boolean.Number和String,基本类型值就是简单的数据段:引用类型值可能由多个值构 ...

  6. 【Java】基本类型和引用类型(值传递)

    [关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...

  7. 4.1 基本类型和引用类型的值【JavaScript高级程序设计第三版】

    ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...

  8. 《JS高程》基本类型和引用类型的值学习笔记

    ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...

  9. 【JavaScript】基本类型和引用类型的值、引用类型

    一.前言        接着上一篇继续记笔记 二.内容         动态的属性 var person = new Object(); person.name = "Nicholas&qu ...

随机推荐

  1. Alpha版本十天冲刺——Day 9

    站立式会议 会议总结 队员 今日完成 问题 明日要做 感想 对学长说的话的感受 鲍亮 无 获取图片未解决 获取图片,发帖接口,争取完成此版本预期功能 不知不觉只剩两天时间了,这两天接连遇到发图片,获取 ...

  2. 【Beta版本】冲刺-Day1

    队伍:606notconnected 会议时间:12月9日 目录 一.行与思 二.站立式会议图片 三.燃尽图 四.代码Check-in 一.行与思 张斯巍(433) 今日进展:git学习,xml语言学 ...

  3. Default团队项目立题

    PhyLab物理实验网站 接手PhyLab网站,进一步优化网站体验,增加新的功能.

  4. 【转载】C++中的基类与派生类

    转自:http://www.cnblogs.com/sujz/articles/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的 ...

  5. markdown安装和使用

    下载 运行markdownpad2-setup.exe文件,下一步一直到结束. 使用 标题 列表 引用.网页链接.图片链接 代码框 星号

  6. 会话控制:session与cookie

    我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...

  7. PHP设计模式-策略模式 转

    策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个 ...

  8. 自然语言21_Wordnet

    QQ:231469242 欢迎喜欢nltk朋友交流   http://baike.baidu.com/link?url=YFVbJFMkZO9A5CAvtCoKbI609HxXXSFd8flFG_Lg ...

  9. JavaScript数据操作--原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...

  10. .net 应用迁移到Mono 工具 (Moma)

    Mono Migration Analyzer (Moma) 是一个用于开发者使用的MS .net下开发的应用程序迁移到Mono平台的不兼容性检测工具.工具通过分析.dll或者.exe程序集的代码是否 ...