JS高程4.变量,作用域和内存问题(1)

1.中坚型以及下类型的价

  ECMAScript变量可能包含两种不同数据类型的价值:

  基本类型值——简单的数据段。(5栽为主的数据类型,按值访问,因为好操作保存在变量中之实在的值。)

  引用类型值——多独价值构成的目标。(引用类型的价值是保存在内存中之靶子。)

注意:

  javascript不允许直接看内存中的岗位,也就是免可知一直操作对象的内存空间。在操作对象时,实际上是操作对象的援,引用类型的值是比照引用访问的。

说明:

  其实上面这种说法不严谨,但复制保存着对象时,操作的凡目标的援。但是呢对象上加属性时,操作的是目标。

 

旁:在博语言中,字符串以目标来代表,因此于认为是援引类型的。ECMAScript放弃了就无异风。

 

(1)可以呢援类型的价值动态地添加属性

eg:

1 var person=new Object(); //注意,Object的第一个字母为大写,如果小写会出现错误。
2     person.name="Linshuling";
3     alert(person.name);
4     </script>

 

(2)复制变量值

  

  复制基本项目的值:

  eg:var num1=5;

    var num2=num1;

  如齐的事例,num1和num2是一点一滴独立的,虽然它的值都为5。

  

  复制引用类型的价值:

  eg:

1  var obj1=new Object();
2     var obj2=obj1;
3     obj1.name="Linshuling";
4     alert(obj2.name);

  如达到,当一个变量向其它一个变量复制引用类型的价是,同样也会以变量对象被之值复制一卖放到位新变量分配的空中中。不同的凡,这个价的副本实际上是一个指针,而以此指针指为存储于积着的一个对象。复制操作完晚,两只变量实际上以引用同一对象。因此,改变中一个变量,就会影响其他一个变量。

 

(3)传递参数

  ECMAScript中所用函数的参数都是遵循值传递的。(访问变量有按值和本引用两种植,而参数只能按值传递。)

  以下简单单例证体会下对象类型值的按值传递:

  eg:

  

1  function setName(obj){
2         obj.name="Linshuling";
3     }
4     var person=new Object();
5     setName(person);
6     alert(person.name);

1  function setName(obj){
2         obj.name="Linshuling";
3         obj=new Object();
4         obj.name="lin";
5     }
6     var person=new Object();
7     setName(person);
8     alert(person.name);

 

(4ECMAScript)检测类别

  用typeof操作符可以检测一个变量是呀基本数据列,当变量的值是null和目标时,typeo操作符会返回“Object”。当我们纪念知道对象时什么种的靶子时,可以据此instanceof操作符。

语法如下:

  result = variable instanceof
constructor

万一变量是加引用类型的实例,instanceof会返回true。

eg:

  

1 alert(person instanceof Object);   //变量person是Object吗?

 

注意:

  ECMA-262确定任何在中贯彻[[Call]]方法的靶子都应以利用typeof操作符时返回“function”,由于Safari
5及前版本与Chrome
7及前面版本的正则表达式实现了这法,因此对正则表达式应用typeof会返回“function”,在ie和Firefox中,对正则表达式应用typeof会返回“Object”。