第九章 基本包装类型

学习要点:

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)这种暂时不做介绍。

你可能感兴趣的:(第九章 基本包装类型)