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)           //10

时间: 2024-11-10 15:54:02

Javascript高级程序设计——基本类型和引用类型的值的相关文章

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

原文链接:https://segmentfault.com/a/1190000006752076 一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(reference values). ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:Undefined.Null.布尔值(Boolean).字符串(String).数值(Number).对象(Object). 基本类型 Jav

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

变量.作用域和内存问题 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值.第3 章讨论了5 种基本数据类型:Undefined.Null.Boolean.Number 和String.这5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值.引用类型的值是保存在内存中的对象.与其他语言不同,J

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

前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变.尽管从某种角度看,这可能是一个既有趣又强大,同时又容易出问题的特性,但 JavaScript 变量实际的复杂程度还远不止如此 基本类型和引用类型的值 复制变量值 传递参数 检测类型 基本类型和引用类型的值 ECMAScript 变量可能包含

JavaScript基本类型和引用类型的值

JS变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型指的是简单的数据段,而引用类型值那些由多个值构成的对象: 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值.JS有5种基本数据类型:Undefined, Null,Boolean,Number和String.这5种基本数据类型是按值访问的.因为可以操作保存在变量中的实际的值. 引用类型的值保存在内存中的对象.与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间.

JavaScript高级程序设计学习笔记--引用类型

Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name,age和5.但这里的数值属性名会自动转换为字符串. 对象属性的访问:点表示法和方括号语法 alert(person["name"]); // "Nicholas" alert(person.name); // "Nicholas" 从功能上看,这两

变量——基本类型和引用类型的值

基本类型和引用类型的值 一.综述 ECMAScript变量可能包含两种不同的数据类型的值:基本类型值和引用类型值. 基本类型值是指简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在给一个变量赋值时,解析器必须确定这个值是基本类型值还是引用类型值. 5种基本数据类型(Undefined.Null.Boolean.Number.String)是按值访问的,因此可以操作保存在变量中实际的值. 引用类型的值是保存在内存中的对象.与其他语言不同,JavaScript不允许直接访问内存中的位置也就

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

对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法.如下: var person = new Object(); person.name = "Jack"; alert(person.name); //"Jack" 以上代码创建了一个对象并将其保存在了变量 person 中.然后,为该对象添加了一个名为 name 的属性,并将字符串值 "Jack" 赋给了这个属性.紧接着,又通过 alert() 函数访问了这个新属性.如果对象

基本类型和引用类型的值

一:什么是基本类型和引用类型值 1. 基本类型值指的是简单的数据段 2. 引用类型指那些可能有多个值组成的对象 3. 在赋值变量时,解析器必须确定这个是基本类型值还是引用类型值 4. 有5种基本数据类型:Underfined,Null,Boolean,Unmber和String.这5种可以直接操作保存在变量种的实际值. 5. 引用类型的值保存在内存的对象中,javascript不允许直接访问内存中的位置.操作对象时,实际操作的是对象的引用而不是实际对象.因此,引用类型的值是引用访问的. 二:动态

Javascript中的基本类型和引用类型

一.基本类型和引用类型概述 js中数据类型的值包括:基本类型值和引用类型值 基本数据类型:undefined;null;boolean;number;string 引用类型值:保存在内存中,js不允许直接访问内存位置,因此时操作引用而不是实际对象 二.如何检测数据类型 1.基本数据类型的检测:使用typeof var s = "AAA"; alert(typeof s); //返回string `     2.引用类型(对象类型)检测:使用instanceof alert(person