javascript之基本包装类型(Boolean,Number,String)基础篇
前几天整理了javascript中Array方面的知识,但是String中的一些方法多多少少和Array里的方法有些类似容易混淆,就顺便连同String所在的包装类一起整理一下,希望可以帮助到初学者,同时也算是知识的一个回顾总结。
引子:实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。
var s1='some text';
var s2=s1.substring(2);//'me text'
基本类型不是对象,因而从逻辑上讲他们不该有方法,其实为了让我们实现这种操作,后台已经完成了一系列的处理。第二行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台会完成如下处理:
- 创建 String/Boolean/Number 类的一个实例。var s1=new String('some text');
- 在实例上调用指定的方法。var s2=s1.substring(2);//'me text'
- 销毁这个实例。s1=null
引用类型与基本包装类型的主要区别就是对象的生存期:
- 使用new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。
- 自动创建的基本包装类型的对象,只存在于代码执行的一瞬间,然后被立即销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。
创建基本包装类型实例方法:
- 通过各自对应的包装类型构造实例,可以传入初始化参数

- 通过 Object 构造函数根据传入值的类型返回相应基本包装类的实例。原型链继承关系 Object.prototype <- String.prototype <- str

这里应该注意,使用 new 调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的:
var value='11';
var num=Number(value);
typeof num;//'number' typeof new Number(value);//'object'

Boolean 类型

Boolean 类型的实例重写了 valueOf() 方法,返回基本类型值 true/false ,重写了 toString() 方法,返回字符串 “true”/“false”
在布尔表达式中使用 Boolean 对象:在有一个操作数不是布尔类型值的情况下,遵循如果第一个操作数是对象,返回第二个操作数。如果第二个操作数是对象,则只有在第一个操作数求值结果为true情况下才会返回该对象。(这是因为第一个操作数在布尔表达式被转为 true 的原因吗??)
var falseobj=new Boolean(false);
falseobj&&true;//true
true&&falseobj;//Boolean {[[PrimitiveValue]]: false}
Number 类型

Number 类型重写了 valueOf() ,返回对象表示基本类型的数值,重写了 toLocaleString(),toString() 方法,返回字符串形式数值。
数值格式化为字符串的方法:
toFixed():按照指定的小数位返回数值的字符串表示,如果数值本身包含的小数位比指定的要多,那么接近指定的最大小位数的值就会舍入
var num=10;
num.toFixed(2);//"10.00" num=10.003;
num.toFixed(2);//"10.00"
toExponential():该方法返回以指数表示法(e表示法)表示的数值的字符串形式,参数指定小数位数。
var num=100;
num.toExponential(1);//"1.0e+2"
toPrecision():对于一个数值来说,该方法可能返回固定大小格式(fixed),也可能返回指数格式(exponential),具体规则看哪种格式最合适( toPrecision() 会根据要处理的数值决定到底是调用 toFixed() 还是 toExponential() ,这三个方法都可以通过向上或向下舍入做到以准确的形式来表示带有正确小数的位)。参数表示数值的所有数字的位数(不包括指数部分)。
var num=99;
num.toPrecision(1);//"1e+2",一位数无法准确的表示99,因此向上舍入为100
num.toPrecision(2);//"99"
num.toPrecision(3);//"99.0"
String 类型

String 对象的方法也可以在所有基本的字符串值中访问,继承的 valueOf() , toLocaleString() , toString() 方法都返回对象所表示的基本字符串值。
- 字符方法
- 字符串操作方法
- 字符串位置方法
- trim方法
- 字符串大小写转换方法
- 字符串的模式匹配方法
- fromCharCode方法
- HTML方法
字符方法: charAt() , charCodeAt() ,参数为基于0的字符位置。 charAt() 以单字符字符串的形式返回给定位置的那个字符。 charCodeAt() 返回给定位置字符的字符编码。在支持的浏览器也可以使用"[index]"方式访问字符串中特定字符。
var str="some text";
str.charAt(1);//"o"
str.charCodeAt(1);//
str[1];//"o"
字符串操作方法:
- concat():将一个或多个字符串拼接起来,返回拼接得到的新字符串,该方法可以接受任意多个参数。
var str="some";
var result=str.concat(' text');
result;//"some text"
str.concat(' is',' interesting');//"some is interesting"
concat() , '+' ,都可以拼接字符串,性能方面谁比较好呢?在chrome下测试了一下性能!显然是 '+' 拼接快。

- 基于子字符串创建新字符串的方法: slice() , substr() , substring() 这三个方法都会返回被操作字符串的一个子字符串,并不影响原字符串。接收1~2个参数( slice 和 substring (子字符串串开始位置,结束位置的后一个位置); substr (开始位置,子字符串字符个数))。省略参数二,则以字符串长度作为结束标志。
- 参数传递为正值
var str="some text";
str.slice(3);//"e text"
str.substring(3);//"e text"
str.substr(3);//"e text"
str.slice(3,7);//"e te"
str.substring(3,7);//"e te"
str.substr(3,7);//"e text" 参数二大于字符串后面的长度个数,则和以字符串长度作为结束标志效果一样 - 参数为负数的情况: slice() 将负值与字符串长度相加; substring() 把所有负值参数都转换为0; substr() 将第一个负值参数与字符串长度相加,第二个负值参数转换为0。
var str="some text";
str.slice(-3);//"ext"
str.slice(-10);//"some text" 若计算下来还是负数则返回原字符串的一个副本
str.substring(-3);//"some text"
str.substr(-3);//"ext"str.slice(3,-4);//"e "
str.substring(3,-4);//"som" 若结束大于开始,该方法会自动将较小数作为开始位置,较大数作为结束位置,因此最终相当与str.substring(0,3)
str.substr(3,-4);//"" <IE9传入负值参数,会返回原始字符串
字符串位置方法: inexOf() 从字符串开头向后搜索, lastIndexOf() 从字符串末尾向前搜索,从一个字符串中搜索给定子字符串,返回给定子字符串的位置,没找到返回-1。参数1~2个:子串,从哪个位置开始搜索(若指定该位置为负数,则忽略该参数,只用第一个参数)。
var str="some text";
str.indexOf('ome');//
str.indexOf('oe');//-1
str.lastIndexOf('ome');// //循环调用来找所有匹配子字符串
var str="sdsv fvda sdf sc df"
var k=0,result;
result=str.indexOf('df',k);
while(result!=-1){
alert(result);
k=result+2;
result=str.indexOf('df',k);
}- trim()方法:该方法创建一个子字符串的副本,删除前置和后缀所有空格,然后返回结果。部分浏览器还支持非标准的 trimLeft() , trimRight() 方法
var str=" sd ds sd ";
str.trim();//"sd ds sd" //利用正则表达式实现trim()方法,注意使用this.toString而不是this,因为this是当前字符串的包装类。(new String('xx')+'good'为'xxgood'拼接的原因是包装类自动转为字符串??)
String.prototype.removeBlank=function(){
return this.toString().replace(/(^\s*)|(\s*$)/g,'');
} //利用查找子字符串实现trim()方法
String.prototype.removeBlank=function(){
var str=this.toString().split(''),i=0;
while(str[i]==' '){
str.splice(i,1);
};
while(str[str.length-1]==' '){
str.splice(str.length-1,1);
}
return str.join('');
} 字符串大小写转换方法:通用方法 toLowerCase() 和 toUpperCase() 借鉴自java.lang.String中的同名方法; toLocaleLowerCase() 和 toLocaleUpperCase() 是针对特定地区的实现。
var str="soME TExt";
str.toUpperCase();//"SOME TEXT"
str.toLowerCase();//"some text"- 字符串的模式匹配方法:均在字符串上调用这些方法
- match() :参数为一个正则表达式/RegExp对象,该函数本质上与调用RegExp的exec()方法相同。参数为一个正则表达式或一个RegExp对象。但 match 和 exec 还是有些区别的比如说捕获组等
var text="cat, bat, sat, fat";
var pattern=/.at/;
var matches=text.match(pattern);
matches.index=0;//在字符串中匹配到的索引
matches[0];//"cat"
pattern.lastIndex;//0 模式中下一个匹配的索引值,只有在含g全局搜索时才会起作用 - search() :参数为一个正则表达式或一个RegExp对象,从字符串开头向后查找模式,返回字符串中第一个匹配项的索引,没找到匹配项返回-1。
var text="cat, bat, sat, fat";
text.search(/at/);// - replace() :替换子字符串,参数一为一个字符串(该字符串不会被转为正则表达式)或一个RegExp对象,参数二为字符串或函数。如果第一个参数为字符串则只会替换第一个子字符串,想要替换所有子字符串就提供一个正则表达式而且需要指定全局g标志。当参数二为函数时:在只有一个匹配项情况下会向这个函数传递3~多个参数:模式的匹配项,(第一个捕获组匹配项,第二个捕获组匹配项,...),模式匹配项在字符串中位置,原始字符串。
var text='cat, bat, sat, fat';
text.replace('at','ond');//"cond, bat, sat, fat" text.replace(/at/g,'ond');//"cond, bond, sond, fond" //使用正则查找特定字符,定义针对每个匹配字符返回特定替换的函数
var htmlEscape=function(text){
return text.replace(/[<>"&]/g,function(match,pos,originalText){
switch(match){
case "<":return "<";
case ">":return ">";
case "&":return "&";
case "\"":return """;
}
});
}
htmlEscape('<p class=\"svf\"></p>');//"<p class="svf"></p>" - split() :基于指定分隔符将一个字符串分割成多个子字符串,并将结果放在数组中。参数一:分隔符可以是字符串(不会被看成正则表达式)或RegExp对象。参数二(可选):指定数组大小。
var colorText="red,blue,,green,yellow";
colorText.split();//["red,blue,,green,yellow"]
colorText.split('');//["r", "e", "d", ",", "b", "l", "u", "e", ",", ",", "g", "r", "e", "e", "n", ",", "y", "e", "l", "l", "o", "w"]
colorText.split(',');["red", "blue", "", "green", "yellow"]
colorText.split(',',2);//["red", "blue"]
colorText.split(',,');//["red,blue", "green,yellow"]
colorText.split(/[^\,]+/);//["", ",", ",,", ",", ""] 匹配不是“,”(可有多个)的字符串并用它作为分割 //用任意字符串'a'做分割条件
'ababcdab'.split(/a/);// ["", "b", "bcd", "b"]
//当正则表达式中含有捕获组时,该捕获组既充当分割条件又它的内容也会在数组中出现。这意味着用"a"分割的同时又用""分割着字符串,是因为捕获组的原因吗??
'ababcdab'.split(/(a)/);// ["", "a", "b", "a", "bcd", "a", "b"]
'ssvdfvdavss'.split(/s(s)/);// ["", "s", "vdfvdav", "s", ""]
//通过正则返回,用指定的某个项作为分割条件,这里用指定的第一个位置的's'来分割
'ss'.split(/s(?=s)/);// ["", "s"]
- localCompare()方法:比较两个字符串并返回下列值中的一个
- 如果字符串在字母表中应该排在字符串参数之前,返回一个负数(大多数为-1,具体值要视实现而定)
- 如果字符串等于字符串参数,返回0
- 如果字符串在字母表中应该排在字符串参数后,返回一个正数(大多情况为1,具体值视实现而定)
var str="sdvdav";
var determineOrder=function(value){
var result=str.localeCompare(value);
if(result<0){
console.log('str排在value之前');
}else if(result>0){
console.log('str排在value之后');
}else{
console.log('str和value相同');
}
}
fromCharCode()方法:接受一或多个字符编码,将他们转换成一个字符串。该方法和 charCodeAt() 执行的是相反的操作。该方法在 String 构造函数本身上。
String.fromCharCode(104,101,108,111);//"hello"
- HTML方法:早期的web浏览器实现的使用javascript动态格式化HTML,在字符串上调用这些方法可以产生字符串形式的HTML标签,但创建的标记通常无法表达语义,不建议使用不详细介绍。
参考:《javascript高级程序设计》
javascript之基本包装类型(Boolean,Number,String)基础篇的更多相关文章
- JavaScript的基本包装类型概述与基本包装类型_Number类型
JavaScript的基本包装类型示例 为了便于操作基本类型值,javaScript 提供了 3 个特殊的引用类型:Boolean.Number和 String. 这些类型与其他引用类型相似,但同时也 ...
- js常用API 数据类型 基本类型,基本包装类型,引用类型 Object String Array Boolean Number Date Math
数据类型 变量.作用域及内存 基础类型(primitive value):Undefined.Null.Boolean.Number和String.这些类型在内存中分别占用固定大小的空间,他们的值保存 ...
- javascript 之基本包装类型--04
基本包装类型 基本包装类型是特殊的引用类型.每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用属性.方法来进行后续操作. ECMAScript还提供了三种基本包装类型 ...
- 基本包装类型Boolean、Number、String特性及常用方法
基本包装类型:Boolean.Number.String 一.String 字符串常用方法 1.indexOf() lastIndexOf() 返回相应字符的索引号 2.slice(index1, ...
- JavaScript 之 基本包装类型
基本包装类型 为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String/Number/Boolean. 下面先看一段代码: var s1 = "Hello ...
- Javascript之基本包装类型
一.基本包装类型概述 var box = 'Mr. Lee';//定义一个字符串 var box2 = box.substring(2);//截掉字符串前两位 alert(box2);//输出新字符串 ...
- JavaScript的基本包装类型说明
一.基本包装类型: 为了便于操作基本类型值,ECMAScript 还提供了3个特殊的引用类型:Boolean.Number和String.这些基本包装类型,具有与各自基本类型相应的特殊行为. 实际上我 ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- JavaScript的基本包装类型_String类型
String类型概述 String在底层字符串是以字符数组的形式保存的 var str = "Hello"; // 在底层其实就是['H','e','l','l','o'] 字符串 ...
随机推荐
- 【JavsScript】webapp的优化整理
单页or多页 webapp 现状 优劣之分 网络传输优化 综述 fake页-首屏加速 降低请求数 降低请求量 缓存Ajax/localstorage DOM操作优化 综述 关于页面渲染 减少使用定位属 ...
- cocos2d-x学习之自动内存管理
一.自动内存管理 1)概述 C++语言默认是没有提供自动内存管理的.使用者需要自己分配,自己释放.在cocos2d-x里提供了一个自动内存管理的方案.主要是通过CCObject来提供的,用户只要继承了 ...
- careercup-高等难度 18.9
18.9 随机生成一些数字并传入某个方法.编写一个程序,每当收到新字符数字时,找出并记录中位数. 类似:设计一个数据结构,包括两个函数,插入数据和获得中位数 解法: 一种解法是使用两个优先级堆:一个大 ...
- j疑难杂症:java.lang.VerifyError: class org.hibernate.type.WrappedMaterializedBlobType overrides final method getReturnedClass.()Ljava/lang/Class;
问题: java.lang.VerifyError: class org.hibernate.type.WrappedMaterializedBlobType overrides final meth ...
- css中postion的fixed与absolute区别详解
fixed:固定定位,参照位置是浏览器窗口的左上角,即坐标点为(0px, 0px) absolute:绝对定位,参展位置是离当前元素最近的定位方式为fixed,absolute,relative的祖先 ...
- 条件判断语句if
一.简单if语句的格式 if 条件表达式 then 语句1 语句2 ...... fi 二.if else语句的格式 if 条件测试 then 语句块1 else 语句块2 fi 三.if elif ...
- [Tips]解决HG之waiting for lock on repository
# Symptom 在tortoiseHg中commit或者Sync change的时候,总是出现下面的错误: waiting for lock on repository ... # Solutio ...
- PHP.12-PHP-设计文件上传类
设计文件上传类 [PHP参数详解]{文件上传} ********************** *#构造方法编写 ********************** 此种传参方法规定必须用户必须按响应位置输入 ...
- 【如何快速的开发一个完整的 iOS 直播 app】(美颜篇)
来源:袁峥Seemygo 链接:http://www.jianshu.com/p/4646894245ba 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播 ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...