发表于: 2017-07-30 23:33:07

1 984


javascript基本包装类型介绍


1.背景介绍

我们目前对Javascript多少都有一些了解和使用。其中最基础的,就是js的数据类型,分为两大块,一个是基本数据类型,包括:undefined、null、boolean、number、string等;一个是引用数据类型,包括object、array、Date、RegExp等。在引用类型中,还有三个特殊的引用类型,和基本数据类型相似,我们接下来来认识一下:boolean、number、string。

2.知识剖析

2.1 特殊的引用类型之string

           

            var a = "Hello World!";

            var b = a.substring(3);

            console.log(b);

           

           

如同上边代码所示,字符串是一个基本数据值。但是,我们知道基本数据类型不是对象,在逻辑上来讲,它不应该有方法,但是上边的substring()是如何实现的呢?详细剖析的话,我们可以把它分成一下这种步骤:

           

            var a = new String("Hello World!");//创建String类型的一个实例;

            var b = a.substring(3); //在实例上调用指定的方法;

            a = null; //销毁这个实例;

            console.log(b);

           

           

通过上一页的代码细节的展示,我们可以看出,基本类型的字符串就变成了和对象一样。这就引入了基本包装类型的概念:每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

作为特殊的引用类型,其与引用类型的的主要区别在于对象的生存期上。使用new或者其他简写的方法创建引用类型的实例,在执行六离开当前作用域之前都一直保存在内存中。自动创建的基本包装类型的对象,则只存在于一行代码执行的瞬间,然后立即被销毁了。这就意味着,不能在运行时为基本类型值添加属性和方法。

           

            var a = "something";

            a.color = "red";

            console.logo(a.color); //undefined

           

           

           

               //字符方法

            var svalue = "Hello World!";

            console.log(svalue.length);

            console.log(svalue.charAt(5));

            console.log(svalue.charCodeAt(5)); //字符编码

            console.log(svalue[3]); //支持IE8+ 及所有其他浏览器

           

           

String类型在ECMAScript中提供了一些方法,用于对字符串进行解析和操作。

字符串的方法:

concat()用于对一个或者多个字符串进行拼接显示,生成新的字符串,不会影响原有字符串。

               

           //字符串方法

        var svalue = "Hello";

        var result = svalue.concat("Da Wa");

        console.log(result);

        console.log(svalue);

        var b = svalue + 'Er Wa';

       

                

还有三种创建新字符串的方法:slice()、substr()、substring()。

           

            var a = "tianqingle";

            console.log(a.slice(3));

            console.log(a.substring(3));

            console.log(a.substr(3));

            console.log(a.slice(3, 7));

            console.log(a.substring(3, 7));

            console.log(a.substr(3, 7));

           

           

2.4 特殊的引用类型之Boolean

           

            var aobj = new Boolean(false);

var result = aobj && true;

console.log(result);

       

        var bvalue = false;

        result = bvalue && true;

console.log(result);

           

           

在布尔值运算中,fals&&true返回false,一假全假;布尔表达式中所有对象会返回true。

           

            console.log(typeof aobj);

            console.log(typeof bvalue);

            console.log(aobj instanceof Boolean);

            console.log(bvalue instanceof Boolean);

           

           

由于以上的原因,建议轻易不要使用Boolean对象。

2.3 特殊的引用类型之Number

Number类型是与数字值对应的引用类型。

           

            var num = new Number(100);

            console.log(num.toString());

            console.log(num.toLocaleString());

            console.log(num.valueOf());

            console.log(num.toFixed(3));

            console.log(num.toExponential(3));

            console.log(num.toPrecision(2));//支持1到21位小数

           

           

与Boolean类型一样,同样不建议显式实例化Number类型,原因同Boolean类型一样,在使用valueOf()和instanceof()方法时会出现容易让人误解的结果,从而造成混乱。

3.常见问题

问题: 如何分割一个很长的字符串?

4.解决方案

通过字符串模式匹配的方法。

                

                    var s = "天上的云,地上的水,水清了,就可以低头看见天上的云!";

                    var b = s.split(',');

                    var c = s.split(',',2);

                    console.log(b);

                    console.log(c);

                

            

5.编码实战

参看上边简单的demo演示,暂无更多demo!

6.扩展思考

问题: 如何替换子字符串的内容?

这里使用了replace()的方法:

           

            var h = "cat, bat, sat, fat";

            console.log(h.replace("at", "ond"));

            console.log(h.replace(/at/g, "end"));

           

            

7.参考文献

参考一:JavaScript高级程序设计

8.更多讨论

讨论点:大家对于基本包装类型还有哪些认识,分享一下?



返回列表 返回列表
评论

    分享到