JavaScript的基本类型和引用类型

来源:互联网 发布:小影怎么添加网络音乐 编辑:程序博客网 时间:2024/05/21 07:55
instanceof()

ECMAScript变量可能包含两种不同类型的值:基本类型值和引用类型值

基本类型值指的是简单的数据段
引用类型值指的是那些可能由多个值构成的对象

5种基本的数据类型Undefined、Null、Boolean、Number和String是按值访问的,也就是可以操作保存在变量中的实际的值

引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置。当复制保存着对象的变量是,操作的是对象的引用。但在为对象添加属性时,操所的是实际的对象。


1.动态的属性

创建一个基本类型值和引用类型值的方式是类似的:创建一个变量并为该变量赋值。

对于引用类型可以为其添加属性和方法,也可以改变和删除属性和方法

var person=new Object();person.name="Curry";alert(person.name);//Curry

对于基本类型不能添加属性,尽管这样不会导致任何错误

var name="Curry";name.age=29;alert(name.age);//undefined

2.复制变量值

  • 基本类型
    从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的地址上。
var num1=5;var num2=num1;console.log(num1);console.log(num2);num1=num1+10;console.log("+10:"+num1);//15console.log("+10:"+num2);//5//num1和num2的值都是5,相互独立。它们可以参与任何操作互不影响
  • 引用类型
    当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值实际上是一个指针,这两变量实际将引用同一个对象
var obj1=new Object();var obj2=obj1;obj1.name="Curry";alert(obj2.name);//"Curry";

3.传递参数

在向参数传递基本类型的值时,被传递的会被复制一个局部变量(即形参)。
在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数外部。

function add(num){    num+=10;    return num;}var count=10;var result=add(count);alert(count);//10不变alert(result);//30
function set(obj){    obj.name="Curry";}var person=new Object();set(person);alert(person.name);//"Curry"

4.检测类型

在检测一个变量是不是基本类型时,typeof操作符是最佳工具,但如果变量的是对象或null,typeof都返回”object”

var a=null;var o=new Object();alert (typeof a);//objectalert (typeof o);//object

也就是说没什么卵用
通常我们不是想知道一个值是否是对象,而是知道它是什么类型的对象!!!,这时候就需要instanceof()了

语法格式: result = variable instanceof constructor
如果变量就是给定引用类型的实例,就返回true

alert (person instanceof Object);//变量person是Object吗alert (colors instanceof Array);//变量colors是Array吗

根据规定,所有引用类型的值都是Object的实例。因此,在检测一个引用类型值和Object构造函数时,instanceof操作符返回true。如果使用instanceof操作符检测基本类型的值,则该操作符始终会返回false,因为基本类型不是对象。

原创粉丝点击