Js 基本数据类、引用数据类型

数据类型

1.   ECMAScript变量包含两栽不同门类的价值:基本类型值、引用类型值;

2.   基本类型值:指的凡保存在栈内存中的简单数据段;

3.  
引用类型值:指的是那些保存在堆内存中的目标,意思是,变量中保留之莫过于只是是一个指南针,这个指针指为内存堆中实际的价;

个别栽访问方式

4.   基本类型值:按值访问,操作的凡她们实际保存之值;

5.  
引用类型值:按引用访问,当查问时,我们用先打栈中读取内存地址,然后再度顺藤摸瓜地找到保存在堆内存中的价;

ECMAScript 1

星星种类型复制

 基本型变量的复制:

 从一个变量向一个变量复制时,会于栈中创建一个新价值,然后将价值复制到也新变量分配的职位上,改变来自数据未会见潜移默化至新的变量(互不干涉);

援类型变量的复制:

复制的是储存于库房中之指针,将指针复制到仓库中无新变量分配的半空中受到,而者指针副本和本指针执行存储于积着的和一个对象,复制操作完晚,两只变量实际上以引用和一个靶;因此反中的一个,将震慑其它一个;

函数参数的传递

1.   ECMA中所有函数的参数还是按照值传递的;

在朝着参数传递基本类型的价值时,被传送的值会被复制给一个片变量,在向参数传递引用类型的价时,会将此价值在内存的地方复制给一个部分变量

核心数据类传递参数

  funciton addTen(num){

    num+=10;

    return num;

  }

  var count=20;

  var result=addTen(count);

  alert(count);//20

  alert(resullt);//30

  执行结果是:20与30。在及时段代码中,将变量count当做参数传递给了函数addTen,也即是一定给用变量count的值复制给了函数addTen的参数。这时addTen的参数num可以看成是函数内部的一个变量。在上段代码中,就一定给个别只为主数据类变量之间的值复制。而基本数据列且发好独自的内存地址,所以num和count是从未另外涉及的,他们只有是价值当而已,函数执行了后,count的价值并不曾改动。而函数外面的result是吃一直赋值的,所以result的值就是是函数的结果30。

援类型传递参数

  function setName(obj){

    obj.name=”LSN”;

  }

  var person=new Object();

  setName(person);

  alert(person.name);//LSN

  执行结果是:LSN。在及时段代码中,函数setName的打算是吃obj对象上加了一个性name并为该属性赋值为”LSN”,因为obj是引用类型,所以这边属是用引用类型person赋值给了obj,也就是说person和obj引用了一个内存地址,所以当给obj新加了性能name时,在函数外面的person也随即变动,最后person.naem的结果也LSN。

援类型传递参数到底传的凡价值还是引用

  function setName(obj){

    obj.name=”ABC”;

    obj=new Object();

    obj.name=”BCD”;

  }

  var person=new Object();

  setName(person);

  alert(person.name);// ABC

  执行结果是:ABC。实例3跟实例2底界别是于函数中以加以了2行代码,在给obj对象新加一个性质name并赋值后
又用obj定义成了一个新的目标(new
Object()),定义新目标后以name赋上新的价值“BCD”。这个时节要是据引用传递来说,那么最终person对象就是见面自动修改也乘于那个name属性为”BCD”的新目标,但最后显示的倒是是“ABC”,这证明就是以函数内部修改了参数的值,但原有的援还维持无移。实际上,当当函数内部obj=new
Object()时
这个新的obj就曾经变成函数内部的有对象了,这个目标见面当函数执行完毕后自动销毁。

少种变量类型检测

1.   Typeof操作符是检测中心类型的特等工具;

2.   而变量值是nul或者目标,typeof 将返回“object”;

3.   Instanceof用于检测引用类型,可以检测及具体的,它是什么类型的实例;

4.   如果变量是加引用类型的实例,instanceof操作符会返回true;

 ECMAScript 2