Javascript高级程序设计_5_基本包装类型

Posted on 2018-01-19 00:18  Jonathan_C  阅读(110)  评论(0)    收藏  举报
  •   基本包装类型的生存周期:
  1. 首先要明白基本包装类型有String, Boolean和Number这三大类。下面举一个String的例子:
 1         var s1="text";//创建一个基本包装类型的对象S1
 2         var s2=s1.substring(2);
 3         console.log(s2);//xt
 4         console.log(s1);//text
 5         s1.color='red';//这里s1仍存在,但是创建s1.color这个对象之后,再进入下一行,这个对象就会被销毁
 6         console.log    (s1.color);//undefined
 7         console.log(s1);//text
 8 
 9         var s3=new String("another text");//用new来创建一个引用类型实例。
10         var s4=s3.substring    (2);
11         s3.color='blue';//引用类型实例具有整个作用域的生存期。
12         console.log(s3.color);//blue
13         console.log(s4);//other text

    直接创建var a="xxx"这种方式,则是生成一个基本包装类型的对象,在给它添加属性时,创建的对象如a.color只在这一行存在,下一行就会被销毁。

    用new方式创建的引用类型则存在于所在的作用域内。  

    • JS 高级语言程序设计建议不要用Boolean对象,一方面用处不大,另一方面容易引起歧义,因为布尔表达式中的所有对象都会转换成true。
1         var bool_1=new Boolean(false);
2         var test_1=bool_1&&true;
3         console.log(test_1);//true;
4 
5         var bool_2=false;
6         var test_2=bool_2&&true;
7         console.log(test_2);//false
    • Number包装类型对象也重写了toString和valueOf方法。toString方法可以返回数值的n进制,valueOf返回该对象基本类型的数值。另外还多了一个toFixed方法,返回小数四舍五入的位数,一般支持20位以内的小数。另外也可以用toExponential()方法和toPrecision()方法。
1         var num_1=new Number(10);
2         console.log(num_1.toString(2));//convert it into binary scale: 1010
3         console.log(num_1.toFixed(3));//decimal point 10.000
    • String包装类型的方法比较多,根据书上介绍的方法,总结如下:
 1 var str=new String("helloworld");
 2         console.log(str.length);//10
 3         //字符方法:
 4         console.log(str.charAt(1));//显示下标为1的字符:e
 5         console.log(str.charCodeAt(2))//显示下标为2的字符编码:108
 6         console.log(str[3]);//直接访问下标为3的字符:l;
 7         //字符串操作方法(不修改源对象):
 8         console.log(str.concat("!"))//helloworld! 
 9         console.log(str.substring(1,2));//e, start from index 1 to index 2
10         console.log(str.substr(1,2));//el, start from index 1 to next two elements
11         console.log(str.slice(1,2));//e, e, start from index 1 to index 2
12 
13         console.log(str.substring(-2,2));//he, start from index 0 to index 2
14         console.log(str.substr(-2,2));//ld, start from index 10-2 to next two elements. 
15         console.log(str.substr(-2,-2));//empty, start from index 10-2 to next 0 elemets;
16         console.log(str.slice(-2,9));//l,start from index 10-2 to 9
17 
18         //字符串位置方法:
19         console.log(str.indexOf("l"))//2
20         console.log(str.lastIndexOf("l"))//8
21         //trim方法:
22         var str_2=new String("  Hello World  ");
23         console.log(str_2.trim());//Hello World
24         //大小写转换
25         console.log(str.toUpperCase());//HELLOWORLD
26         console.log(str.toLowerCase());//helloworld
27         //字符串模式匹配,会在正则里面专门讲到。

2. Global对象是一个比较特殊的对象,凡是在全局中定义的属性和对象,都属于global对象的属性。如parseInt()和parseFloat()都属于global对象。另外还包括其它方法:

    eval()方法是一个十分强大的方法,体现在它可以像一个js解析器一样,将字符串解析成指令。      

1         var elem="eval"
2         eval("console.log(elem)")//eval
    • 虽然没有方法直接访问global对象,但是window对象可以当作global的背锅侠      

3. Math对象有几种有用的方法:min(), max(), ceil(), floor(), round():

1         var arr=[1,2,3,4,5];
2         console.log(Math.max.apply(Math,arr));//5
3         console.log(Math.min.apply(Math,arr));//1
4         console.log(Math.floor(3.14));//3
5         console.log(Math.ceil(3.14));//4
6         console.log(Math.round(3.14));//3
7         console.log(Math.random())//a random decimal number between 0 and 1