第九章 基本包装类型

学习要点:

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容