学习要点:
1. 基本包装类型概述
2. Boolean类型
3. Number类型
4. String类型
为了便于操作基本类型值,ECMAScript提供了三个特殊的引用类型:Boolean、Number和String。这些类型与其他引用类型相似,但是也具有各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值得时候,后台会创建一个基本包装类型的对象,从未能够调用一些方法来操作这些数据。
基本包装类型概述
var str = 'hello world';
console.log(typeof str); //string
console.log(str.substring(2)); //llo world 从下标为2处截取生成新字符串
console.log(typeof str.substring(2)); //string
字符串是基本类型,但是又是特殊引用类型(基本包装类型),因为它可以调用系统内置方法。
一、字面量创建字符串
var str = 'hello world';
str.age = 10; // 无效
str.hello = function () {
return 'hello hello'; // 无效
};
// 基本类型无法添加自定义属性方法
console.log(str.age); // undefined
console.log(str.hello()); // str.hello is not a function
// 基本包装类型可以调用系统内置方法
console.log(typeof str); //string
console.log(str.substring(2)); //llo world 从下标为2处截取生成新字符串
console.log(typeof str.substring(2)); //string
(2)new方法创建字符串(不推荐这种方式,创建的是引用(类型)
var str = new String('hello world');
str.age = 10;
str.hello = function () {
return 'hello hello';
};
// 基本类型无法添加自定义属性方法
console.log(str.age); // 10
console.log(str.hello()); // hello hello
字面量和new运算符都可以使用内置属性方法,字面量方式不可以自定义属性方法,但是new运算符可以。
二、Boolean类型
Boolean类型没有特定的属性或方法
三、Number类型
Number类型有一些静态属性(直接通过Number 调用的属性,而无需new运算符)和方法。
Number静态属性:
属性 | 描述 |
---|---|
MAX_VALUE | 表示最大数 |
MIN_VALUE | 表示最小数 |
NaN | 非数值 |
NEGATIVE_INFINITY | 负无穷大,溢出返回该值 |
POSITIVE_INFINITY | 无穷大,溢出返回该值 |
prototype | 原型,用于增加新属性和方法 |
Number对象方法:
方法 | 描述 |
---|---|
toString() | 将数值转换为字符串, |
toLocalString() | 根据本地数字格式转换为字符串 |
toFixed(位数) | 将数字保留小数点后指定位数并转化为字符串,会四舍五入 |
toExponential() | 将数字以指数形式表示,保留小数点后指定位数并转化为字符串 |
toPrecision(位数) | 指数形式或点形式表述数,保留小数点后面指定位数并转化为字符串 |
四、String类型
String类型包含了三个属性和大量的内置方法
String对象属性:
属性 | 描述 |
---|---|
length | 返回字符串的字符长度 |
constructor | 返回创建String对象的函数 |
prototype | 通过添加属性和方法扩展字符串定义 |
String也包含对象的通用方法,比如valueOf()、toLocalString()和toString()方法,但是这些方法都返回字符串的基本知。
var str = 'hello world';
console.log(str.length);
// 11
console.log(str.constructor);
//ƒ String() { [native code] }
字符方法:
方法 | 描述 |
---|---|
charAt(n) | 返回指定索引位置的字符 |
charCodeAt(n) | 以Unicode编码形式返回指定索引位置的字符 |
var str = 'hello world';
console.log(str.charAt(1)); // e
console.log(str.charCodeAt(1)); // 101
console.log(str[1]); // e
字符串操作方法:
方法 | 描述 |
---|---|
concat(str1...str2) | 将字符串参数串联到调用该方法 |
slice(n,m) | 返回字符串n到m之间位置的字符串 |
substring(n,m) | 同上 |
substr(n,m) | 返回字符串n开始的m个字符串 |
var str1 = 'Lee';
var str2 = 'XiaoLong';
console.log(str1.concat(' ', str2)); // Lee XiaoLong
console.log(str2.slice(2, 4)); //ao
console.log(str2.substring(2, 4)); //ao
console.log(str2.substr(2, 4)); //aoLo
//以上方法传参为负数会有影响,具体不再演示
字符串位置方法:
方法 | 描述 |
---|---|
indexOf(str,n) | 从n开始搜索的第一个str,并将搜索的索引值返回 |
lastIndexOf(str,n) | 从n开始搜索后一个str,并将搜索的索引值返回 |
var str = 'hello world';
console.log(str.indexOf('l')); //2
console.log(str.indexOf('l', 3)); //3 指定位置向后搜索
console.log(str.lastIndexOf('l')); //9
console.log(str.lastIndexOf('l', 8)); //3 指定位置向前搜索
如果没有找到想要的字符串返回-1
var str = 'hello world';
//找出所有l的下标
var arr = [];
function foo(str) {
var idx = str.indexOf('l');
while (idx > -1) {
arr.push(idx);
idx = str.indexOf('l', idx + 1);
}
}
foo(str);
console.log(arr); // [2, 3, 9]
大小写转换方法:
方法 | 描述 |
---|---|
toLowerCase(str) | 将字符串全部转换为小写 |
roUpperCase(str) | 将字符串全部转换为大写 |
toLocaleLowerCase(str) | 将字符串全部转换为小写,并且本地化 |
toLocaleupperCase(str) | 将字符串全部转换为大写,并且本地化 |
字符串的模式匹配方法:
方法 | 描述 |
---|---|
match(pattern) | 返回pattern中的子串或者null |
replace(pattern,relacement) | 用于replacement 替换pattern |
search(pattern) | 返回字符串中的pattern开始位置 |
split(pattern) | 返回字符串按指定pattern拆分的数组 |
var str = 'hello world';
console.log(str.match('l'));
// 找到返回 ["l", index: 2, input: "hello world", groups: undefined]
console.log(str.match(','));
// 没找到返回 null
console.log(str.search('l'));
// 找到返回下标 2
console.log(str.search(','));
// 没找到返回-1类似indexOf方法
console.log(str.replace('l', 'K'));
// heKlo world
console.log(str.split(' '));
// ["hello", "world"]
其他方法:
方法 | 描述 |
---|---|
fromCharCode(ascii) | 静态方法,输出Ascii码对应值 |
localeCompare(str1,str2) | 比较两个字符串,并返回对应的值 |
console.log(String.fromCharCode(76)); // l
var str = 'Lee';
console.log(str.localeCompare('Lee')); // 0
console.log(str.localeCompare('Aee')); // 1
console.log(str.localeCompare('Zee')); // -1
还有一些html方法,比如str.link(URL)这种暂时不做介绍。