JS 学习笔记--10---基本包装类型
练习中使用的浏览器是IE10,如果有什么错误或者不同意见,希望各位朋友能够指正,练习代码附在后面
1、基本包装类型:
首先是基本类型,但又是特殊的引用类型,因为他们可以调用系统的方法,这种类型就称为基本包装类型。主要有:Boolean,Number,String 三种。这些类型与其他引用类型相似,但同时也具有与各自基本引用类型相关的特殊行为。实际上,每当我们创建一个基本类型的时候,系统会在后台默认的创建一个基本包装类型的变量。
用String类型举例说明:用字面形式定义的String类型的变量box,如果给它添加属性和方法,然后打印出来,属性的输出结果是undefined,方法的运行结果是会报错。而用new String(‘c‘)方法定义的String变量[此时已经是object类型了],给它添加属性和方法都能够正常运行。但是这两种创建方式都能够调用系统的内置方法,通过 对象.方法(参数) 的形式调用,比如方法 box.substring(3)[后面解释],而这种形式的调用明显是一个对象的形式调用方法,故称其为基本包装类型。
这三种类型的变量用 new 运算符声明变量的时候,也可以给自己添加属性和方法,但是最好不要这样做,因为很可能搞不清楚到底是什么类型的变量,因为通过new运算符创建的变量通过typeof检测出来的结果是 object 类型的变量
2、Boolean 类型就两个值 true和false,基本上没有什么方法,和属性
3、Number 类型一些静态属性
静态属性:不需要对象就可以使用的属性,通过 类型名.属性名 访问(Number.MAX_VALUE);
Number 类型中包含的静态属性大概有:MAX_VALUE, MIN_VALUE, NEGATIVE_INFINITY, NaN, POSITIVE_INFINITY, 以及用来扩展方法和属性的 prototype等
4、Number 对象的一些方法
|
5、String 类型包含的三个属性
length:返回字符串的长度,也就是字符个数,汉字也只是算一个字符
constructor:返回创建String对象的方法:function String(){[native code]}
prototype:用于添加属性和方法来扩展字符串的定义
6、String对象包含的方法--通用方法
toString(),valueOf(),toLocaleString() 这三种方法前面已经用过,就不在解释了。
7、String 对象包含的方法--取字符的方法
str.charAt(3):获得字符串str中从0开始索引为3的字符
str.charCodeAt(3):获得字符串str中从0开始,索引为3的字符的ASCII编码
str[3]:获得字符串str中从0开始索引为1的字符,但是这种方式可能存在浏览器的兼容性问题
8、字符串操作方法
str.concat(str1,str2):和数组中的concat()方法是类似的,基于当前字符串,在后面添加上字符串str1,str2,组成一个新的字符串,并且返回,源字符串str不会改变,参数任意个
str.slice(n,m):从索引为n的字符开始截取,一直到索引为m但是不包括索引为m的字符为止,返回截取后的子字符串,源字符串str不变
str.substring(n,m):功能上面和slice相同,只是在有些参数方面处理不同
str.substr(n,m):同样是截取字符串,从索引为n的字符开始截取,截取的个数为m个,返回子字符串,原来的字符串不变。
|
JS中对substr()函数进行传递负数的时候可能会存在兼容性的问题,应注意使用
9、获取子字符串位置的方法 如果没有找到则均是返回 -1
str.indexOf(str2,num):从索引为num开始的地方向后查找字符串str1中包含的子字符串str2的位置,如果没有找到则返回 -1,找到了则返回字符str2的首字符的索引,起始位置包含索引为num的字符,如果省略num则默认的是0。注:找到一个立即返回
str.lastIndexOf(str2,num):和上面的功能是一样的,同样是以num为索引的字符开始查找,只不过是从后向前开始找,如果没有找到就返回-1,省略num,默认的是str.length-1开始
10、大小写转换的方法
str.toLowerCase(): 将字符串str中的所有英文字符转换成小写
str.toUpperCase(): 将字符串str中的所有的英文字符转换长大写
str.toLocaleLowerCase(): 转换成本地小写字符,我们国家基本上是一样的
str.toLocaleUpperCase(): 转换成本地大写字符
11、字符串的模式匹配方法 主要是针对正则表达式的
str.match(patt); str.search(patt); str.replace(patt,str2); str.split(patt);
12、其他方法:
String.fromCharCode(‘a‘): 静态方法[能通过String类点出来的方法就是String类型的静态方法],返回字符在ASCII中的编码
str.localeCompare(str2): 比较字符串str1和字符串str2的大小,从第一个字符开始,一个一个字符开始比较,如果某一个字符不相同则返回,相同一直往后比较,直到不同或者字符串结束。返回的规则是,如果正在比较的字符,str中的字符的ASCII码值大于str2中的码制就返回正数,多数为 1,如果小于就返回负数,多数为 -1,如果相等就比较下一个字符,如果两个字符串相等就返回0.
13、练习代码:
1 /* 2 //字面量形式定义变量,添加属性和方法,不支持属性和方法 3 var box=‘abcdefg‘; 4 box.name=‘name‘; 5 box.run=function(){ 6 alert(‘runFunction‘); 7 }; 8 alert(box); //abcdefg 9 alert(box.name); //undefined 10 alert(typeof box); //string 11 alert(box.substring(3));//defg 调用系统内置函数,索引从0开始,从第三个字符开始截取字符串 12 //这种通过 对象.方法(参数) 调用形式明显是引用类型 13 alert(box.run()); //error:对象不支持方法 14 15 //new 方法定义变量,添加属性和方法,支持 16 var box=new String(‘abcdefg‘); 17 box.name=‘name‘; 18 box.run=function(){ 19 return ‘runFunction‘; 20 }; 21 alert(box); //abcdefg 22 alert(box.name); //name 23 alert(typeof box); //object 24 alert(box.substring(3));//defg 25 alert(box.run()); //runFunction 26 27 28 //上面两中方法中可以看出,不过是字面量形式还是new方法创建的变量都可以调用系统内置 29 //的函数 substring(),而且是通过 对象.方法(参数) 这种对象才具有的形式调用的方法 30 //故把这种本身是基本类型(字面量形式定义),但是又是特殊的引用类型, 31 //(因为他们可以调用系统内置函数),叫做基本包装类型 32 33 */ 34 35 36 /* Number 类型 37 // 属性 对象.属性名 38 box.MAX_VALUE 39 40 //静态属性,直接通过 类名.属性名 41 alert(Number.MAX_VALUE); // 获取Numebr类型的最大值 42 alert(Number.MIN_VALUE); // 获取Numebr类型的最小值 43 alert(Number.NaN); // 获取NaN 44 alert(Number.NEGATIVE_INFINITY); //获取负无穷 45 alert(Number.POSITIVE_INFINITY); //获取正无穷 46 47 // Number 对象的方法 48 var box=10000.3456; 49 alert(box.toString()); //10000.3456 50 alert(box.toLocaleString());//10,000.346 用逗号按照每三位隔开显示,并且小数点后面只是按照四舍五入保存三位 51 alert(box.toFixed(3)); //10000.346 转换成字符串,并且按照四舍五入的形式保存3位小数 52 alert(10000.34.toFixed(3)); //10000.340 小数位数不足在后面填0 53 54 // 以科学计算法来保存指定的小数点后面的位数,位数是指转换成科学计算法后小数点后位数 55 alert(box.toExponential()); //1.00003456e+4 转换成字符串,以科学计数法的形式显示 56 alert(box.toExponential(2));//1.00e+4 保存小数点后面指定的位数,以科学计数法显示 57 alert(typeof box.toExponential(2)); //string 58 alert(0.003.toExponential(3)); //3.000e+-3 59 60 //toPrecision(5);方法,是按照科学计算法或者点形式保存数据,按照参数保留有效位数 61 //括号中的参数是指保留的有效数的位数,如果整数部分位数大于参数,则以科学计算法表示 62 //如果整数部分小于有效位数,小数点后面按照有效位数进行四舍五入进行取数 63 //如果是小于一的小数,同样在后面补0凑齐有效位数的个数 64 var box=10000.3456; 65 alert(box.toPrecision()); //10000.3456 66 alert(box.toPrecision(3)); //1.00e+4 67 alert(typeof box.toPrecision(2)); //string 68 alert(box.toPrecision(8)); //10000.346 69 alert(box.toPrecision(9)); //10000.3456 70 alert(0.003.toPrecision(4)); //0.003000 71 72 */ 73 74 75 /* String 类型 76 // 三个属性 length constructor prototype 77 var box=‘abc‘; 78 alert(box.length); //3 返回字符串的长度 79 alert(box.constructor); // 返回创建String对象的函数 function String(){[native code]} 80 81 // 基本方法 toString() valueOf() toLocaleString() 这些方法都返回字符串的基本值 82 var box=‘abcdefg‘; 83 alert(box.toString()); //abcdefg 84 alert(box.toLocaleString());//abcdefg 85 alert(box.valueOf()); //abcdefg 86 87 // 字符方法 charAt() charCodeAt() 88 var str="ab_cd_123"; 89 alert(str.charAt(3)); // c 返回从0开始,索引为 3 的字符 90 alert(str.charCodeAt(3)); // 99 返回从0开始,索引为 3 的字符的ASCII 的编码 91 alert(str[1]); //b 返回字符串中索引为 1 的字符 92 alert(‘我司字符串‘.charAt(-1)); //超出索引范围,返回为空字符串 93 94 // 字符串操作方法 concat() slice() substring() substr() 95 //str.concat(str2,str3...); 和数组中的concat()方法是一样的,基于当前字符串,拼接后返回一个新的字符串 96 var str=‘abc‘; 97 alert(str.concat(‘123‘,‘abc‘)); //abc123abc 98 alert(str); //abc 99 100 // slice()方法和substring()方法在所有参数为正数的情况下是一样的,基于元字符串进行截取返回 101 var str=‘abc123def‘; 102 alert(str.slice(3)); //123def 从索引为3的字符开始截取,一直到字符串结束 103 alert(str.slice(3,5)) //12 从索引为3的字符开始截取,一直到索引为5结束,不包裹索引为5的字符 104 alert(str.slice(3,5,‘qq‘)); //12 多个参数时,同样只是认前两个 105 alert(str.slice(3,‘y‘)); //第二个参数为非数值时返回为0 106 alert(str.slice(3,5.7)); //第二个数为浮点数的时候,对数进行取整 107 alert(str.slice(3,‘7‘)); //123d 将数值字符串转换成了数值 108 alert(str.slice(3,1)); //第二个参数小于第一个参数的时候,返回为空 109 alert(str.slice(3,-1)); //123de 参数为负数时,计算方式为:str.length+(-1)等价于(3,8) 110 alert(str.slice(-5)); //23abc 111 alert(str.slice(-5,7)); //(4,7)23a 112 alert(str); //abc123def 113 114 alert(str.substring(3)) //123def 115 alert(str.substring(3,5)); //12 116 alert(str.substring(3,5,‘qq‘)); //12 117 alert(str.substring(5,2)); //c12 第二个参数小于第一个参数的时候,将两个参数进行交换 118 alert(str.substring(3,‘y‘)); //第二个参数为非数值时,返回为0,然和第一个参数换位 119 alert(str.substring(3,‘7‘)); //123d 将数值字符串转换成了数值 120 alert(str.substring(3,5.9)); //12 第二个数为浮点数的时候,对数进行取整 121 alert(str.substring(3,-1)); //abc 参数为负数时,直接返回为0,然后将较小的数提前 122 alert(str.substring(-5,3)); //abc 123 alert(str.substring(-5)); //abc123abc 参数为负,处理为0,返回全部 124 alert(str.substring(-5,7)); //abc123a 第一个参数为负,当做0处理,截取到索引为七但不包含七的字符 125 126 alert(str); //abc123def 127 128 //str.substr(m,n); 从索引为m出开始,截取n个字符,返回, 129 var str=‘abc123def‘; 130 alert(str.substr(3)); //123def 只有一个参数,一直截取到结尾 131 alert(str.substr(3,2)); //12 从索引为3开始截取两个字符,参数二为截取字符的个数 132 alert(str.substr(3,‘3‘)); //123 数值型字符串,会自动的转换成数值 133 alert(str.substr(3,‘r‘)); // 空 非数值型字符串,转换成数值为0,截取0个字符 134 alert(str.substr(3,4.6)); // 123d 小数时,舍去小数,只取整数位 135 alert(str.substr(3,-4)); // 空 负数的时候,直接返回为0,不交换位置 (3,0) 136 alert(str.substr(3,2,‘gg‘)); //12 以后的参数都不认,弱类型语言,参数个数可以不匹配 137 alert(str.substr(-5)); //23def 从最后一个字符开始向前数第5个字符处开始截取,直到结束 138 alert(str.substr(-5,3)); //23d 从倒数第5个字符开始向后截取3个字符 139 140 alert(str); //abc123def 141 142 143 // 获取字符位置的函数 indexOf() lastIndexOf() 144 //indexOf(‘c‘); 返回字符串中从做到右第一个字符 c 的索引,如果没有找到就返回-1 145 var str=‘abc123defabc‘; 146 alert(str.indexOf(‘a‘)); //0 147 alert(str.indexOf(‘ab‘)); //0 148 alert(str.indexOf(‘ac‘)); //-1 149 alert(str.indexOf(‘a‘,3)); //9 从索引为3的字符开始向后查找子字符串 "a",包括第三个字符 150 151 //lastIndexOf(‘c‘); 返回字符串从右到做第一个字符 c 的索引,如果没有找到就返回-1 152 var str=‘abc123defabc‘; 153 alert(str.lastIndexOf(‘a‘)); //9 154 alert(str.lastIndexOf(‘ab‘)); //9 155 alert(str.lastIndexOf(‘ac‘)); //-1 156 alert(str.lastIndexOf(‘a‘,9)); //9 从索引为9的字符处开始向前查找子字符串“a”,包括第九个字符 157 158 // 练习 找到字符串中包含全部的字符 L 159 var str=‘aL123LdelfaLbc‘; 160 var arr=[]; 161 var box=str.indexOf(‘L‘); //先获取一次,进行判断是否存在字符 L 162 while(box>-1){ //如果值大于-1,说明当前还存在字符 L 163 arr.push(box); //存入数组 等价于 arr[arr.length]=box; 164 box=box+1; //改变下次查找的位置,因为box处字符也算在内,故要加1 165 box=str.indexOf(‘L‘,box); 166 } 167 alert(arr); //1,5,11 默认是区分大小写的 168 169 170 // toLowerCase() toUpperCase() 将字符串中的字符转换成小写或者大写 171 var str=‘abcABC123‘; 172 alert(str.toLowerCase()); //abcabc123 173 alert(str.toUpperCase()); //ABCABC123 174 str=‘abcABc但‘; 175 alert(str.toLowerCase()); //abcabc但 176 alert(str.toUpperCase()); //ABCABc但 177 178 // toLocaleLowerCase() toLocaleUpperCase() 转换成本地大小写字符,基本上看不出效果 179 var str=‘abcABC‘; 180 alert(str.toLocaleLowerCase()); //abcabc 181 alert(str.toLocaleUpperCase()); //ABCABC 182 183 // 模式匹配方法 search(pattern),march(pattern),replace(pattern),split(pattern) 184 // 这些方法主要是针对的正则表达式 185 186 // 静态方法 fromCharCode(‘‘); 输出对应ascii值对应的字符 187 alert(String.fromCharCode(66)); //B 188 189 // 比较两个字符串的大小 str.localeCompare(st); 先比较第一个字符,如果相等在比较后面字符 190 //如果字符串中的字符在ASCII表中比参数字符串中对应索引处的字符编码大,就返回正数,一般为 1 191 //如果小 就返回为负数,一般为 -1 192 //如果相等就继续比较下一个字符,直到比完为止,如果还是相等就返回 0 193 var str="dog"; 194 alert(str.localeCompare(‘abc‘)); //1 str 字符串大于子字符串 abc 195 alert(str.localeCompare(‘fff‘)); //1 196 alert(str.localeCompare(‘dog‘)); //0 197 */
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。