高级JS教程1——变量

来源:互联网 发布:图片水印制作软件 编辑:程序博客网 时间:2024/05/17 01:58

JS的数据类型分为简单数据类型和复杂数据类型,或者称作基础数据类型和引用数据类型。简单数据类型有Undefined Null Boolean Number String ,复杂类型为Object,其本质是一组无序的名值对组成的。如果想要判断一个变量是什么类型的数据,可以使用typeof关键字,对一个值使用typeof操作符可能会出现下列某个字符串:

  • "undefined"————如果这个值未定义
  • "boolean"————如果这个值是布尔值
  • "string"————如果这个值是字符串
  • "number"————如果这个值是数值
  • "object"————如果这个值是对象或者null
  • "function"————如果这个值是函数

例子如下:

var message;alert(typeof message);//undefinedmessage = true;alert(typeof message);//booleanmessage = "message";alert(typeof message);//stringmessage = 90;alert(typeof message);//numbermessage = {name : "message"};alert(typeof message);//objectmessage = function() {return "message";};alert(typeof message);//function

js属于弱数据类型语言,变量的数据类型是在运行时定义的,随着赋值的数据类型的改变而改变。当一个变量是引用数据类型时,可以为其添加属性和方法,同时我们也可以改变和删除其属性和方法。但是不能给基础数据类型添加属性和方法。

例子如下:

var person = new Object();person.name = "Nicholas";alert(person.name);//"Nicholas"var name = "Nicholas";name.age = 27;alert(name.age); // undefined
当我们想要将一个变量的值复制给另外一个变量时,基础类型数据和引用数据类型会呈现不同的特性。基础数据类型是值传递,引用数据类型是引用传递。

在复制基础数据类型时,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

var num1 = 5;var num2 = num1;
上面这段代码在内存中的示意图如下:

  num25          num15

当我们想将一个引用类型的数据复制给另外一个变量时,传递给另外一个对象的是这个对象的指针,这个指针式指向存储在堆里面的一个对象

var obj1 = new Object();var obj2 = obj1;obj1.name = "LiuXiang";alert(obj2.name);    //LiuXiang

上面这段代码在内存中的示意图如下所示:


与变量复制一样,在函数调用时参数的传递是按照值复制的方式进行的。从函数外部把值复制给函数内部参数,就和从一个变量复制到另外一个变量一样。

在向参数传递基本类型时,被传递的值会被复制给一个局部变量(即命名参数,或者说是arguments对象中的一个元素)。

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


之前我们使用了typeof来确定一个变量是字符串、undefined、Object等,但是当我们知道一个变量时Object之后想知道它到底是属于哪一种类型的对象。

这时候需要使用instanceof关键字,用法如下:

result = variable instanceof constructor

具体实例如下:

alert(person instantceof Object);alert(colors insatanceof Array);

当variable是后面constructor的一个实例是,instanceof操作符会返回true,否则会返回false。

原创粉丝点击