Javascript基础巩固系列——标准库包装对象(Boolean对象+Number对象+String对象)
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/13723822.html, 多谢,=。=~(如果对你有帮助的话请帮我点个赞啦)
重新学习JavaScript是因为当年转前端有点儿赶鸭子上架的意味,我一直在反思我的知识点总是很零散,不能在脑海中形成一个完整的体系,所以这次想通过再次学习将知识点都串联起来,结合日常开发的项目,达到温故而知新的效果。与此同时,总结一下我认为很重要但又被我遗漏的知识点~
包装对象
三种原始类型的值(数值、字符串、布尔值)通过构造函数Number
、String
、Boolean
可以转为对象,也就是原始类型的“包装对象”(wrapper),包装对象仅只读,不可修改。
公共实例方法
valueOf()
返回包装对象实例对应的原始类型的值。
new Number(123).valueOf() // 123
new String('abc').valueOf() // "abc"
new Boolean(true).valueOf() // true
toString()
返回对应的字符串形式。
new Number(123).toString() // "123"
new String('abc').toString() // "abc"
new Boolean(true).toString() // "true"
自定义实例方法
在原型对象上添加方法实现包装对象的方法自定义,供原始类型的值直接调用。
String.prototype.double = function () {
return this.valueOf() + this.valueOf();
};
'abc'.double()
// abcabc
自动转换
某些场合,原始类型的值会自动当作包装对象调用,即调用包装对象的属性和方法。这时,JavaScript 引擎会自动将原始类型的值转为包装对象实例,并在使用后立刻销毁实例。
'abc'.length // 3
// 等同于
var objStr = new String('abc')
// String {
// 0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"
// }
objStr.length // 3
Boolean
对象
作为构造函数,它主要用于生成布尔值的包装对象实例,直接使用可以将任意值转为布尔值,使用双重的否运算符(!!
)也可以将任意值转为对应的布尔值。。
var b = new Boolean(true);
typeof b // "object"
b.valueOf() // true
Boolean(NaN) // false
!![] // true
Number
对象
- 作为构造函数时,它用于生成值为数值的对象,直接使用可以将任意值转为数值。
var n = new Number(1);
typeof n // "object"
Number(true) // 1
静态属性(即直接定义在Number
对象上的属性,而不是定义在实例上的属性)。
Number.POSITIVE_INFINITY
:正的无限,指向Infinity
。Number.NEGATIVE_INFINITY
:负的无限,指向-Infinity
。Number.NaN
:表示非数值,指向NaN
。Number.MAX_VALUE
: 表示最大的正数(在64位浮点数体系中为1.7976931348623157e+308)。Number.MIN_VALUE
:表示最小的正数(即最接近0的正数,在64位浮点数体系中为5e-324),相应的,最接近0的负数为-Number.MIN_VALUE
。Number.MAX_SAFE_INTEGER
:表示能够精确表示的最大整数,即9007199254740991。Number.MIN_SAFE_INTEGER
:表示能够精确表示的最小整数,即-9007199254740991。
实例方法
Number.prototype.toString()
将一个数值转为字符串形式,接受一个参数表示转换的进制,默认十进制。
10.5.toString() // "10.5"
(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"
Number.prototype.toFixed()
先将一个数转为指定位数(有效范围0到100)的小数,然后返回这个小数对应的字符串。
(10).toFixed(2) // "10.00"
10.005.toFixed(2) // "10.01"
// 由于浮点数的原因小数的四舍五入是不定的
(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01
Number.prototype.toExponential()
将一个数转为科学计数法形式,参数是小数点后有效数字的位数,范围为0到100。
(1234).toExponential() // "1.234e+3"
(1234).toExponential(1) // "1.2e+3"
(1234).toExponential(2) // "1.23e+3"
Number.prototype.toPrecision()
将一个数转为指定位数的有效数字,参数为有效数字的位数,范围是1到100,用于四舍五入时不太可靠,跟浮点数不是精确储存有关。
(12.35).toPrecision(3) // "12.3"
(12.25).toPrecision(3) // "12.3"
(12.15).toPrecision(3) // "12.2"
(12.45).toPrecision(3) // "12.4"
Number.prototype.toLocaleString()
接受一个地区码作为参数,返回一个字符串,表示当前数字在该地区的当地书写形式,第二个参数用来定制指定用途的返回字符串。
(123).toLocaleString('zh-Hans-CN-u-nu-hanidec')
// "一二三"
(123).toLocaleString('zh-Hans-CN', { style: 'percent' })
// "12,300%"
(123).toLocaleString('zh-Hans-CN', { style: 'currency', currency: 'CNY' })
// "¥123.00"
(123).toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })
// "123,00 €"
(123).toLocaleString('en-US', { style: 'currency', currency: 'USD' })
// "$123.00"
String
对象
作为构造函数时,它用于生成值为字符串的对象,直接使用可以将任意值转为字符串。
var s = new String('abc');
typeof s // "object"
s.valueOf() // "abc"
String(true) // "true"
静态方法
String.fromCharCode()
参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串,不支持 Unicode 码点大于0xFFFF(十进制65535)的字符,因为码点大于0xFFFF的字符占用四个字节,而 JavaScript 默认支持两个字节的字符。。
String.fromCharCode() // ""
String.fromCharCode(97) // "a"
String.fromCharCode(104, 101, 108, 108, 111) // "hello"
String.fromCharCode(0x20BB7) // 文档会报错,可自行打印查看
String.fromCharCode(0x20BB7) === String.fromCharCode(0x0BB7) // true
// 用拆分的方法解决
String.fromCharCode(0xD842, 0xDFB7) // 文档会报错,可自行打印查看
实例属性
String.prototype.length
返回字符串的长度。
'abc'.length // 3
实例方法
String.prototype.charAt()
返回指定位置的字符。
var s = new String('abc');
s.charAt(1) // "b"
// 等同于
'abc'[1] // "b"
String.prototype.charCodeAt()
返回字符串指定位置的 Unicode 码点(十进制表示),无参数时返回首字母码点,相当于String.fromCharCode()
的逆操作。
'abc'.charCodeAt(1) // 98
'abc'.charCodeAt() // 97
String.prototype.concat()
连接两个字符串,返回一个新字符串,不改变原字符串。
var one = 1;
var two = 2;
var three = '3';
''.concat(one, two, three) // "123"
one + two + three // "33"
String.prototype.slice()
用于从原字符串取出子字符串并返回,不改变原字符串,如果第一个参数大于第二个参数返回空字符串。
'JavaScript'.slice(0, 4) // "Java"
'JavaScript'.slice(2, 1) // ""
String.prototype.substring()
用于从原字符串取出子字符串并返回,不改变原字符串,如果第一个参数大于第二个参数会自动更换两个参数的位置,如果参数是负数会自动转0,规则有点反直觉建议优先使用slice
。
'JavaScript'.substring(0, 4) // "Java"
'JavaScript'.substring(10, 4) // "Script"
'JavaScript'.substring(4, -3) // "Java"
String.prototype.substr()
用于从原字符串取出子字符串并返回,不改变原字符串,但第二个参数是子字符串的长度,如果为负数会自动转0。
'JavaScript'.substr(4, 6) // "Script"
'JavaScript'.substr(4, -1) // ""
String.prototype.indexOf()
和String.prototype.lastIndexOf()
用于确定一个字符串在另一个字符串中第一次和最后一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。第二个参数表示开始比较的位置,前者是从前往后,后者是从后往前。
'hello world'.indexOf('o', 6) // 7
'JavaScript'.indexOf('script') // -1
'hello world'.lastIndexOf('o', 6) // 4
String.prototype.trim()
用于去除字符串两端的空格、制表符(\t
、\v
)、换行符(\n
)和回车符(\r
),返回一个新字符串,不改变原字符串。
' hello world '.trim() // "hello world"
'\r\nabc \t'.trim() // 'abc'
String.prototype.toLowerCase()
和String.prototype.toUpperCase()
前者将一个字符串全部转为小写,后者则是全部转为大写,它们都返回一个新字符串,不改变原字符串。
'Hello World'.toLowerCase()
// "hello world"
'Hello World'.toUpperCase()
// "HELLO WORLD"
String.prototype.match()
用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null
。
var matches = 'cat, bat, sat, fat'.match('at');
matches.index // 1 匹配字符串开始的位置
matches.input // "cat, bat, sat, fat" 原始字符串
String.prototype.search()
和String.prototype.replace()
前者基本等同于match
,但是返回值为匹配的第一个位置,如果没有找到匹配,则返回-1。后者用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g
修饰符的正则表达式)。
'cat, bat, sat, fat'.search('at') // 1
'aaa'.replace('a', 'b') // "baa"
String.prototype.split()
按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组,第二个参数限定返回数组的最大成员数。
'a||c'.split('|') // ['a', '', 'c']
'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
'a|b|c'.split() // ["a|b|c"]
'a|b|c'.split('|', 2) // ["a", "b"]
String.prototype.localeCompare()
用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串。第二个参数指定所使用的语言(默认是英语)
'B'.localeCompare('a') // 1
'ä'.localeCompare('z', 'de') // -1
'ä'.localeCompare('z', 'sv') // 1
参考资料
JavaScript 语言入门教程 :https://wangdoc.com/javascript/index.html