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)的更多相关文章

  1. js基础之--变量 作用域和内存问题

    基本类型:Undefind Null Boolean Number String 引用类型: 对象 在操作对象时,实际上实在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的. 从一个变 ...

  2. 第一百零六节,JavaScript变量作用域及内存

    JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...

  3. js 变量 作用域及内存

    由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...

  4. JavaScript变量作用域和内存问题(二)

    执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...

  5. JS高程4.变量,作用域和内存问题(3)垃圾收集

    JavaScript的自动垃圾收集机制 执行环境会负责管理代码执行过程中使用的内存,编写JavaScript程序时,所需内存的分配以及无用内存的回收完全实现自动管理. 原理: 找出那些不再继续使用的变 ...

  6. JS高程4.变量,作用域和内存问题(2)执行环境及作用域

    1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...

  7. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

      5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...

  8. 浅谈javascript中变量作用域和内存(1)

    先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...

  9. 浅谈javascript中变量作用域和内存(2)

    1.无块级作用域 javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦.在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域 举个例子 if(true) { var na ...

随机推荐

  1. Android Fragment 剖析

    1.Fragment如何产生?2.什么是Fragment Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后 ...

  2. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  3. Flexbox 自由的布局

    css3提出了一种新的布局方式.她并没有以摧枯拉朽之势博得我的喜爱.我和她的故事总是伴随着苦涩的味道.世道变了,总要做出些选择才能跟紧步伐.她很强大,能满足你天马行空的需求而不必抓掉一大把头发.她却很 ...

  4. 监督学习 VS 无监督学习

    监督学习 就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为 ...

  5. 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝

    在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...

  6. JavaScript之web通信

    web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...

  7. [Mahout] 完整部署过程

    概述        Mahout底层依赖Hadoop,部署Mahout过程中最困难的就是Hadoop的部署      本文假设用户本身没有进行Hadoop的部署,记述部署Mahout的过程       ...

  8. ceph架构剖析

    unitedstack有云 :https://www.ustack.com/blog/ceph_infra/

  9. SQLSERVER聚集索引与非聚集索引的再次研究(下)

    SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 ...

  10. ASP.NET 5 WebApi 返回 HttpResponseMessage

    首先,ASP.NET 5 没有了 MVC 和 WebApi 的区分,都属于 ASP.NET 5,从 Controller 的继承就可以看出,原来 ASP.NET WebApi 2 ValuesCont ...