JS中分有基本类型和引用类型,此外为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean、Number、String。这些类型与其他引用类型相似,但同时也具有和各自的基本类型相应的特殊行为。事实上,每当读取一个基本类型值的时候,后台就会创建一个相应的基本包装类型的对象,从而可以调用一些方法来操作这些数据。
此处特意加注基本类型和引用类型的概念内容,以免忘记。基本数据类型:按值访问,可操作保存在变量中的实际的值。基本类型值指的是简单的数据段。基本数据类型有这五种:Undefined、Null、String、Number、Boolean。
引用类型:当复制保存着对象的某个变量时,操作的是对象的引用,但在为对象添加属性时,操作的是实际的对象。引用类型值指那些可能为多个值构成的对象。引用类型有这几种:object、Array、RegExp、Date、Function、特殊的基本包装类型(String、Number、Boolean)以及单体内置对象(Global、Math)。
基本包装类型举例,
var demo1="Hello World";
var demo2=demo1.substring(6);
alert(demo2);
分析上例,demo1是字符串类型,又因为只有对象才可以调用方法,demo1.substring(6)说明了demo1是一个对象,最后将处理结果赋值给demo2。字符串类型是基本类型,不应该是一个对象,也就不应该有自己的方法,然而代码顺利的执行了。上述代码等同于:
alert("Hello World".substring(6)); //输出结果World
为了更形象的了解基本类型和引用类型操作上的不同,用字面量写法和new运算符写法来创建两个例子比较不同,但是,两种方法都可以使用其内置方法(例:demo substring(9))。
1、字面量写法
var demo="personal information";//定义一个字符串类型变量,是基本类型
//故意认为基本类型就是对象,可以有自己的方法
demo.name="bert";
demo.age=function(){
return 24;
}
alert(demo);//输出结果personal information
alert(typeof demo);//查看demo类型,是string类型
alert(demo.name);//输出结果undefined,说明字符串类型没有自己的属性,name是无效属性
alert(demo.age());//报错demo.age is not a function,说明基本类型没有方法
alert(demo.substring(9));//输出结果information
2、new运算符写法
var demo=new String("personal information");
demo.name="bert";
demo.age=function(){
return 24;
}
alert(demo); //输出结果personal information
alert(typeof demo); //Object
alert(demo.name); //bert
alert(demo.age()); //24
alert(demo.substring(9)); //information
note:在使用new运算符创建String、Number、Boolean三种类型的对象时,可以给自己添加属性和方法,但不建议这样使用,因为这样会导致根本分不清到底是基本类型值还是引用类型值。
一、Boolean类型
Boolean类型没有特定的属性或者方法。
二、Number类型
Number类型有一些静态属性(直接通过Number调用的属性,而无须new运算符)和方法。
1、Number静态属性
属 性 |
描述 |
MAX_VALUE |
表示最大数 |
MIN_VALUE |
表示最小值 |
NaN |
非数值 |
NEGATIVE_INFINITY |
负无穷大,溢出返回该值 |
POSITIVE_INFINITY |
无穷大,溢出返回该值 |
prototype |
原型,用于增加新属性和方法 |
2、Number对象的方法
方 法 |
描述 |
toString() |
将数值转化为字符串,并且可以转换进制 |
toLocaleString() |
根据本地数字格式转换为字符串 |
toFixed() |
将数字保留小数点后指定位数并转化为字符串 |
toExponential() |
将数字以指数形式表示,保留小数点后指定位数并转化为字符串 |
toPrecision() |
指数形式或点形式表述数,保留小数点后面指定位数并转化为字符串 |
上述代码实现:
var demo=1234.567;
alert(demo.toString());
alert(typeof demo.toString()); //Number类型变成了String类型
alert(demo.toFixed(2));//保留小数点后两位
alert(typeof demo.toFixed());//String类型
alert(demo.toExponential());//科学计数法表示1.234567e+3,
alert(typeof demo.toExponential());//String类型
alert(demo.toPrecision(3));//输出结果1.23e+3
alert(typeof demo.toPrecision(3));//String类型
三、String类型
String类型包含 了三大属性和大量可用的内置对象。
1、String对象属性
属性 | 描述 |
length | 返回字符串的字符长度 |
constructor | 返回创建String对象的函数 |
prototype | t通过添加属性和方法扩展字符串定义 |
2、String包含了对象的通用方法,比如valueOf()、toLocaleString()和toString()方法,但这些方法都返回字符串的基本值。此外,可用的内置方法有字符方法、字符方法、字符串位置方法、大小写转换方法、字符串的模式匹配方法...
(1)字符方法
方法 | 描述 |
charAt(n) | 返回指定索引位置的字符 |
charCodeAt(n) | 以Unicode编码形式返回指定索引位置的字符 |
var demo="Hello World";
alert(demo.charAt(4));//返回第四位字符o
2、字符串操作方法
方法 | m描述 |
concat(str1...str2) | 将字符串参数串联到调用该方法的字符串 |
slice(n,m) | 返回字符串n到m之间位置的字符串 |
substring(n,m) | 返回字符串n到m之间位置的字符串 |
substr(n,m) | 返回字符串n开始的m个字符串 |
var demo="The harder you work,";
alert(demo.concat('the ','more ','progress ','you ','make ','.'));
alert(demo.slice(4));//只写一个参数,默认截取从当前位置到最后一个字符
alert(demo.slice(4,10));//截取到第十个字符,但不包含第十个字符
alert(demo.substring(4));//返回结果harder you work,
alert(demo.substr(4,6));//从第4个字符开始截取接下来的6个字符
alert(demo.slice(-5));//返回最后5个字符
alert(demo.slice(4,-10));//总字符19位,19+(-10)=9,从第4位开始截取到第9位,包含第9位。
alert(demo.substring(-4));//负数返回全部
alert(demo.substr(4,-1));//空白
3、字符串位置方法
方 法 |
描述 |
indexOf(str, n) |
从n开始搜索的第一个str,并将搜索的索引值返回 |
lastIndexOf(str, n) |
从n开始搜索的最后一个str,并将搜索的索引值返回 |
var demo="Every little helps.";
alert(demo.indexOf("l"));//搜寻到第一个‘l’字符,返回其位置第6位
alert(demo.indexOf("i",10));//从第10位开始搜寻‘i’字符,未找到返回-1
alert(demo.lastIndexOf("e"));//从头开始搜寻‘e’字符,返回找到的最后一个的位置第14位
alert(demo.lastIndexOf("l",5));//从第5位开始向前搜寻‘l’字符,未找到返回-1
4、大小写转换方法
方 法 |
描述 |
toLowerCase(str) |
将字符串全部转换为小写 |
toUpperCase(str) |
将字符串全部转换为大写 |
toLocaleLowerCase(str) |
将字符串全部转换为小写,并且本地化 |
toLocaleupperCase(str) |
将字符串全部转换为大写,并且本地化 |
5、字符串的模式匹配方法
方 法 |
描述 |
match(pattern) |
返回pattern 中的子串或null |
replace(pattern, replacement) |
用replacement 替换pattern |
search(pattern) |
返回字符串中pattern 开始位置 |
split(pattern) |
返回字符串按指定pattern 拆分的数组 |
6、其他方法
方 法 |
描述 |
fromCharCode(ascii) |
静态方法,输出Ascii码对应值 |
localeCompare(str1,str2) |
比较两个字符串,并返回相应的值 |
var demo="Hello";
alert(demo.localeCompare("World")); //-1
alert(demo.localeCompare("Everyone")); //0
alert(demo.localeCompare("Hi")); //-1
比较两个字符串并返回以下值中的一个:
如果字符串在字母表中应该排在字符串参数之前,则返回一个负数。(多数-1),
如果字符串等于字符串参数,则返回0,
如果字符串在自附表中应该排在字符串参数之后,则返回一个正数。(多数1),
第一个字符相同时候比较第二个字符,比较规则如上。