JavaScript中的基本类型与引用类型

JavaScript中的类型可以简单地概括:相对于其他的强类型语言来说,它是弱(松散)类型的语言,分别有基本类型和引用类型。区别在于一个有个固定空间保存在栈内存中,一个没有固定空间保存在堆内存并且在栈内存保存了一个指向实现位置的指针。

一、基本类型:Undefined、Null、Boolean、Number、String类型;当基本类型初始化后,就不能更改变量的值了,因为基本类型是按值来访问的。如下代码:

<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.0//EN"  "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
    <head>
    <meta  http-equiv="Content-type"  content="text/html"; charset="utf-8"  />
    <title>基本类型</title>
    <script>
        <!--定义变量的初始值,全局变量-->
        var  a = 1;
        //b定义为Boolean类型
        var  b = true;
        //c为字符串,String类型
        var  c = 'afdgg';
        fuction  f(){
            //d虽然是在函数中,可是此时属于全局变量
            d = 4;
        }
        alert("a=" + a);
        alert("b="+b);
        alert("c="+c);
        f();
        alert("d1="+d);
    </script>
    </head>
    <body></body>
</html>

二、引用类型:Object、Array、Function、Date、Map、Error等等,除开基本类型,其他都可以说是引用类型了;引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。
① Object引用类型:一切事物皆对象,所以此类型成为引用类型的精髓。用代码说话:

<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.0//EN"  "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
    <head>
    <meta  http-equiv="Content-type"  content="text/html"; charset="utf-8"  />
    <title>引用类型之Object</title>
    <script>
    /*没有对象的朋友是不是该去找个对象,所以对于Object也需要给它
     *    new一个对象,然后再调用它的方法
        */
        var  obj = new  Object();
        //实例化对象
        var  obj = { };
        //给对象设置属性
        obj.name='aaa';
        obj.sex = '男';
        obj.age = 20;
        obj.say = function(){
        alert('hellow  word!!!');
    }

    alert("name =" + obj.name);
    //没加delete的age的值
    alert("age =" + obj.age);
    //delete操作符    删除对象或方法的值
    delete  obj.age;   
    //区分加delete属性后age的变化
    alert("age1 =" + obj.age);
    alert("say =" + obj.say);
    </script>
    </head>
    <body></body>
</html>

当想要遍历js的对象,那又该怎么去遍历呢,用for循环?那就错了,js是用for….in语句遍历的,代码如下:

<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.0//EN"  "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
    <head>
    <meta  http-equiv="Content-type"  content="text/html"; charset="utf-8"  />
    <title>引用类型之Object</title>
    <script>
        var  obj = new  Object();
        var  obj = { };
        obj.name='aaa';
        obj.sex = '男';
        obj.age = 20;
        obj.say = function(){
        alert('hellow  word!!!');
    }

    //for....in语句遍历
    for(var  attribute  in  obj){
        alert(attribute+" = "+obj[attribute]);
    }
    </script>
    </head>
    <body></body>
</html>

Object每个实例都会具有下列属性和方法:
Constructor: 保存着用于创建当前对象的函数。(构造函数)
hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中(而不是原型中)是否存在。返回Boolean值
isPrototypeOf(Object): 用于检查传入的对象是否是另外一个对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。返回Boolean值
toLocaleString():返回对象的字符串表示。该字符串与执行环境的地区对应.
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔表示。
②Map引用类型:

<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.0//EN"  "HTTP://WWW.W3.ORG/TR/html4/strict.dtd">
<html>
    <head>
    <meta  http-equiv="Content-type"  content="text/html"; charset="utf-8"  />
    <title>引用类型之Map</title>
    <script>
    function  Map(){
        var  obj = { };
        //put方法
        this.put = function(key,value){
            obj[key] = value;
        }
        //size方法
        this.size = function(){
            var  count = 0;
            for(var  f  in  obj){
                count++;
            }
            return  count;
        }

        //get方法
        this.get = function(key){
            if(obj[key] || obj[key] === 0 || obj[key] ===false){
                return  obj[key];
            }else{
                return  null;
            }
        }
    }   
    var  m = new  Map();
    m.put('1',5);
    m.put('2',new  Date());
    m.put('3',true);
    m.put('4',0);
    alert(m.size());
    alert(m.get('4'));

    </script>
    </head>
    <body></body>
</html>

③数组:js中的数组类似java中的Map容器,长度任意改变,元素类型任意,一般方法有如下几种:
push方法向数组中追加元素(返回值为数组新的长度),
pop:从数组的尾部移除一个元素(返回值为移除的元素);
shift:从头部移除一个元素,返回移除后的元素
unshift:从头部插入多个元素,返回新数组的元素个数
splice,slice方法(截取方法),splice方法操作数组的本身,第一个参数:起始位置,第二个参数:表示截取的个数,
第三个参数以后:表示追加的锌元素个数,而slice方法不操作数组的本身;
concat:合并粘连的操作(不操作数组的本身);
joinsort:在每个元素之间加入内容(不操作数组本身);
reverse:按照集合的位置进行倒叙;

<!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD  HTML  4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta  http-equiv="Content-Type"  content="text/html;  charset=utf-8"  />
        <title>damo3</title>
        <script  type=text/javascript  charset=utf-8>
            //创建数组
            //var  arry = new  Array();

            //方法②
            //var  arr1 = [new  Array(),1,2,3,true,'sfdgdg',new  Date()];
            //alert(arr1.length);
            //arr1.length = 7;
            //alert(arr1);  //相当于调用toString方法。

            /**
            *常用的方法有
            *push方法向数组中追加元素(返回值为数组新的长度),
            pop:从数组的尾部移除一个元素(返回值为移除的元素)
            *shift,unshift
            *splice,slice
            *concat,join,sort,reverse等
            */
            //var  a = [new  Date(),3,5,6,5,8,9];
            //var  a1 = a.push(1,2,3,4);

            //alert(a);
            //alert(a1);            
            //var  a2 = a.pop();  //从数组的尾部移除一个元素(返回值为移除的元素)
            //alert(a2);

            //shift,unshift
            //var  a = [1,2,3,4,5,6];
            //a.shift();  //从头部移除一个元素,返回移除后的元素
            //alert(a);

            //a.unshift(9); //从头部插入多个元素,返回新数组的元素个数
            //alert(a);

            //splice,slice方法(截取方法)
            //splice方法操作数组的本身
            //slice方法不操作数组的本身
            //splice:第一个参数:起始位置,第二个参数:表示截取的个数,第三个参数以后:表示追加的新元素个数

            var  a = [1,2,3,4,5,6];
            //a.splice(1,2,3,4,5);
            //alert(a);
            var  a1 = a.slice(3,5);  //截取范围(左闭右开区间)
            //alert(a1);  //返回截取的内容

            //concat,join
            var  b = [1,2,3,4,5,6];
            var  b1 = [true,1,2];

            var  b2 = b.concat(b1);   //合并粘连的操作(不操作数组的本身)
            //alert(b2);

            var  b3 = b.join('-');    //在每个元素之间加入内容(不操作数组本身)
            //alert(b3);

            //sort:正序
            //reverse:倒叙
            var  c = [9,2,0,4,5];
            var  c2 = [7,8,9,ture];
            c.sort();
            alert(c);
            c2.reverse();  //按照集合的位置进行倒叙
            alert(c2);
        </script>
    </head>
    <body>
    </body>
</html>

④函数。是通过function来定义的,具体请看以上的例子。

所以,引用类型都具有以下几个特性:
1、引用类型的值是可变的;
2、引用类型的值是同时保存在栈内存和堆内存中的对象;
3、引用类型的比较是引用的比较;
4、简单赋值;
5、对象引用。

完毕!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值