概述
基本数据包装类型在环境中一般都是作为隐式的形式存在的,往往就是一出现就消失,也往往就是调用方法的时候先把基本类型进行一下包装,让基本类型可以调用对象的实例方法,然后就死掉了。
例子
var s1="some text";
var s2=s1.substring(2)//s1转化成String类型的一个实例,调用方法以后就销毁
var s1="some text";
s1.color="red";
alert(s1.color)//第二行代码创建实例对象在第二行就已经销魂了
Boolean类型(我们建议永远都不要使用Boolean对象,真他么鸡肋)
var a=new Boolean(false);
var b=Boolean(undefined);
var c=Boolean(null);
var d=Boolean(true);
var e=Boolean(0);
var f=Boolean(9);
var g=Boolean("");
var h=Boolean("zjah");
var i=Boolean({});
document.write(a+"<br>");//false
document.write(b+"<br>");//false
document.write(c+"<br>");//false
document.write(d+"<br>");//true
document.write(e+"<br>");//false
document.write(f+"<br>");//true
document.write(g+"<br>");//false
document.write(h+"<br>");//true
document.write(i+"<br>");//true
alert(typeof(a));//object
alert(typeof(b));//boolean
alert(a instanceof Boolean);//true
alert(b instanceof Boolean);//false
Number类型
document.write(new Number(10));//10
document.write(Number(9));//9
document.write(Number(0));//0
document.write(Number(undefined));//NaN
document.write(Number(false));//0
document.write(Number(true));//1
document.write(Number(null));//0
document.write(Number("zhahi"));//NaN
document.write(Number("99"));//99
document.write(Number({}));//NaN
document.write(Number({name:"zang"}));//NaN
Number有六个实例方法
1、toString()括号里面可以写进制数
var num=10;
alert(num.toString());//10
alert(num.toString(2));//1010
alert(num.toString(8));//12
2、toLocaleString()
document.write(Number(9).toLocaleString());//“9”
3、valueOf()
document.write(Number(9).valueOf());//"9"
4、toFixed()括号内数字就是代表小数点后面有多少位
document.write(Number(22.33333).toFixed(3));//22.333
5、toExponential()先把数变成指数形式,再根据括号内的基数确定小数点后有几位
document.write(Number(22222.33333).toExponential(3));//2.222e+4
6、toPrecision()括号内数字代表整个数的有效数字位数
document.write(Number(22222.33333).toPrecision(3));//2.22e+4
这个也是希望永远不要用到的,这种创建Number类型的实例对象。。。。。很鸡肋
这里提一下NaN这个特殊的全局属性
1.typeof(NaN)//number;NaN是number的一个type
2.任何涉及NaN的操作返回NaN,NaN与任何值都不相等包括本身
3.isNaN()对接收的数值,先用Number()方法尝试转换成数值,再检测是否为非数值。检测是否为number的一个好方法
注意:isNaN(null),isNaN(number),isNaN(数字字符串类型),这三个判断都是错的,null会先被调用Number()转变为0,再判断。
String类型
1、length
var newString=new String("hello world");
alert(newString.length);//"11"
应该注意的是,即使字符串中包含双字节字符(像汉字等),每个字符仍然算一个字符。
2、字符方法
var stringValue="hello world";
alert(stringValue.charAt(1));//"e"
var stringValue="hello world";
alert(stringValue.charCodeAt(1))//"101",字符编码
var stringValue="hello world";
alert(stringValue[1]);//"e"
3、concat
var stringValue="hello";
var result=stringValue.concat("zhang","huany ao");
alert(stringValue);//"hello"
alert(result);//"hellozhanghuany ao"
4、slice(),substr(),substring()
三个方法都是截取子字符串,同时对原来的母串不会有任何影响。
slice(start,end)和数组中的slice()是一样的,有参数是负数就加上字符长度,
var stringValue="zhang hello";
document.write(stringValue.slice(1,4));//"han"
document.write(stringValue.slice(-1));//"o"
document.write(stringValue.slice(-4,-1));//"ell"
document.write(stringValue.slice(2,-1));//"ang hell"
substr(start,len)
start是必须的,指定开始的位置,如果是负数,和slice一样处理。
len非必须,就是截取的长度,如果没有就是一直到尾部。如果是负数那么就是空字符串了。
substring(start,end)
两个参数,谁大谁就是end,谁小谁就是start。start可以是负数,但是会被默认转变为0。两个参数若都是0,那么返回值就是空字符串
var s="zhangzhangzhang,hhhhhaaaaa";
s1=s.substr(1,2);//"ha"
s2=s.substr(1);//"hangzhangzhang,hhhhhaaaaa"
s3=s.substr(3,4);//"ngzh"
s4=s.substr(-9,3);//"hhh"
alert(s.substring(1,7));//"hangzh"
alert(s.substring(-1,6));//"zhangz"
alert(s.substring(8,3));//"ngzha"
alert(s.substring(-1,-2));//""
5、indexOf()和lastIndexOf()
var stringValue="hello,woeld";
alert(stringValue.indexOf("o"));//4
alert(stringValue.lastIndexOf("o"));//7
6.trim()
var stringValue="
hello
world
";
alert(stringValue.trim())//"hello
world"
7、字符串大小写转换
var str="zhang";
var str1="ZHANG";
alert(str.toUpperCase());//"ZHANG"
alert(str.toLocalUpperCase());//"ZHANG"
alert(str.toLowerCase())//"zhang"
alert(str.toLocalLowerCase())//"zhang"
书上说toUpperCase和toLocaleUpperCase一般情况下是一样的,但是有些地区是不一样的,如土耳其。。。。。
8.search()(看了好几遍,感觉这个函数可以写一写,w3school中写的真好)
定义和用法
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
语法
stringObject.search(regexp)
参数 | 描述 |
---|---|
regexp | 该参数可以是需要在 stringObject 中检索的子串,也可以是需要检索的 RegExp 对象。 注释:要执行忽略大小写的检索,请追加标志 i。 |
返回值
stringObject 中第一个与 regexp 相匹配的子串的起始位置。
注释:如果没有找到任何匹配的子串,则返回 -1。
说明
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置
var str="visit,visit,www3school";
document.write(str.search(/W3/)+"<br>");//-1
document.write(str.search(/W3/i));//14,忽略大小写
document.write(str.search(/w/g));//12,全局在search中没有用的
9.march()
定义和用法
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
语法
stringObject.match(searchvalue) stringObject.match(regexp)
参数 | 描述 |
---|---|
searchvalue | 必需。规定要检索的字符串值。 |
regexp | 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 |
返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
说明
match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
var str = "hello world";
console.log(str.match("hello")); // ["hello", index: 0, input: "hello world"]
console.log(str.match("Hello")); // null
console.log(str.match(/hello/)); // ["hello", index: 0, input: "hello world"]
// 全局匹配
var str2="1 plus 2 equal 3"
console.log(str2.match(/d+/g)); //["1", "2", "3"]
10.replace()
定义和用法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法
stringObject.replace(regexp/substr,replacement)
参数 | 描述 |
---|---|
regexp/substr | 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 |
replacement | 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 |
返回值
一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
说明
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
字符 | 替换文本 |
---|---|
$1、$2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& | 与 regexp 相匹配的子串。 |
$` | 位于匹配子串左侧的文本。 |
$' | 位于匹配子串右侧的文本。 |
$$ | 直接量符号。 |
注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
// replace 第二个参数也可以是一个function 函数
var name2 = "123sdasadsr44565dffghg987gff33234";
name2.replace(/d+/g,function(v){
console.log(v);
/*
* 第一次打印123
* 第二次打印44565
* 第三次打印987
* 第四次打印 33234
*/
});
/*
* 如下函数,回调函数参数一共有四个
* 第一个参数的含义是 匹配的字符串
* 第二个参数的含义是 正则表达式分组内容,没有分组的话,就没有该参数,
* 如果没有该参数的话那么第四个参数就是undefined
* 第三个参数的含义是 匹配项在字符串中的索引index
* 第四个参数的含义是 原字符串
*/
name2.replace(/(d+)/g,function(a,b,c,d){
console.log(a);
console.log(b);
console.log(c);
console.log(d);
/*
* 如上会执行四次,值分别如下(正则使用小括号,代表分组):
* 第一次: 123,123,0,123sdasadsr44565dffghg987gff33234
* 第二次: 44565,44565,11,123sdasadsr44565dffghg987gff33234
* 第三次: 987,987,22,123sdasadsr44565dffghg987gff33234
* 第四次: 33234,33234,28,123sdasadsr44565dffghg987gff33234
*/
});
var str = "hello world";
// 替换字符串
var s1 = str.replace("hello","a");
console.log(s1);// a world
// 使用正则替换字符串
var s2 = str.replace(/hello/,"b");
console.log(s2); // b world
// 使用正则全局替换 字符串
var s3 = str.replace(/l/g,'');
console.log(s3); // heo word
// $1,$2 代表的是第一个和第二个子表达式相匹配的文本
// 子表达式需要使用小括号括起来,代表的含义是分组
var name = "longen,yunxi";
var s4 = name.replace(/(w+)s*,s*(w+)/,"$2 $1");
console.log(s4); // "yunxi,longen"
最后
以上就是冷静皮带为你收集整理的引用类型——基本包装类型的全部内容,希望文章能够帮你解决引用类型——基本包装类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复