三大包装对象


前言

一、什么是包装对象

1.含义

定义:指的是与布尔值、数值、字符串分别相对应的Boolean、Number、String三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。
理解:可以理解为原始数据类型在一定条件下的转化。

2.作用

1.实现数据类型的转换;
2.把基本类型的值转化为对象,凸显JS面向对象的能力;
3.字面量使用对应包装对象的方法的内在原理;

代码如下(示例):

var a = 1 , b = "yes" , c = true ;
var aa = new Number(1) , bb = new String("yes") , cc = new Boolean(true) ; 
typeof(a);   //"number"
typeof(aa);   //"object"
typeof(b);    //"string"
typeof(bb);    //"object"
typeof(c);    // "boolean"
typeof(cc);   // "object"

二、三个包装对象

1. Boolean对象

(1)作用概述

主要用于生成布尔值的包装对象实例。
代码如下(示例):

var b = new Boolean(false);

typeof b // "object"
b.valueOf() // false

注意:这里如果对b与b.valueOf进行逻辑运算的话,第一个得到true(所有对象布尔值为true),第二个为false(返回对应原始值)。

(2).Boolean函数的单独使用

Boolean对象的单独使用,将任意值变为布尔值。

代码如下(示例):

data = pd.read_csv(
Boolean(undefined) // false
Boolean(null)     // false
Boolean(0)        // false
Boolean('')      // false
Boolean(NaN)     // false

Boolean(1)        // true
Boolean('false') // true

补充:使用双重的否运算符(!)也可以将任意值转为对应的布尔值。
例如:

!!undefined // false
!!null // false

2. Number对象

(1)作为构造函数

作用:生成值为数值的对象。
例如:

 var n = new Number(3);
 typeof n // "object"

(2)作为工具函数

作用:将任何数据类型的值转为数值。

Number(true) // 1

(3)常用实例方法

3.1 Number.prototype.toString()

作用:将一个数值变为字符串形式,并且后面接受一个参数,代表输出的进制(默认为十进制)。
代码如下(示例):

(10).toString(2) // "1010"
(10).toString(8) // "12"

10.0.toString(2) // "1010"
//这里要么加两个点,要么就把数字放入括号,这样表示调用对象属性

10.5.toString(8) // "12.4"
10.5.toString(16) // "a.8"

注意:toString方法只能转化十进制的数,如果想转化其它进制的数,请使用parseInt方法。

3.2 Number.prototype.toFixed()

作用:将一个数变为指定位数的小数,并且返回其对应的字符串
代码如下:

(10).toFixed(2) // "10.00"

(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01
//由于浮点数的原因,小数的四舍五入是不确定的

注意:全部的数必须放入括号中,不然后面的.会被当做小数点。
例如:

10.005.toFixed(2) // "10.01"
3.3 Number.prototype.toExponential()

作用:将数转化为科学计数法的形式。
代码如下:

(10).toExponential()  // "1e+1"
(10).toExponential(1) // "1.0e+1"
(1234).toExponential(2) // "1.23e+3"

备注:toExponential()参数表示有效数字的位数,范围是0-100.

(4)自定义方法

特点:
1. 定义在原型对象Number.prototype上面的方法,数值本身无法自定义属性。
2. 调用方法的时可以实现链式运算。
代码如下:

Number.prototype.add = function (x) {
return this + x;
};
Number.prototype.subtract = function (x) {
return this - x;
};
(8).add(2).subtract(4)
// 6

var n = 1;
n.x = 1;
n.x // undefined

注意:当原始类型的输值新增属性时,由于被调用属性时,n就自动转为Number的实例对象,调用结束后,该对象自动销毁,所以下次用n属性时,实际取到的是另一个对象,所以x读不出来。


3. String对象

(1)作用概述

String用来生成字符串对象,字符串对象相当于一个类似数组的对象。
代码如下:

new String('abc')
// String {0: "a", 1: "b", 2: "c", length: 3}
(new String('abc'))[1] // "b"
//有数组的数值键及一些属性
String(5) // "5"

与Number对象类似,也可以作为工具方法使用,将任意值改为字符串。

(2)常见实例方法

2.1 String.prototype.charAt()

作用:返回指定位置的字符,参数是从0开始编号的位置。
代码如下:

var s = new String('abc');

s.charAt(1) // "b"
s.charAt(s.length - 1) // "c"
//也可以用数组下标
'abc'.charAt(1) // "b"
'abc'[1] // "b"

当参数为负数或大于等于字符串的长度时,charAt返回空字符串

2.2 String.prototype.concat()

作用:连接两个字符串,返回一个新字符串,不改变原字符串。
实例如下:

var s1 = 'abc';
var s2 = 'def';

s1.concat(s2) // "abcdef"
s1 // "abc"

'a'.concat('b', 'c') // "abc"

注意:它可以接受多个参数,并且如果参数不是字符串时,它会先进行转化。

2.3 String.prototype.slice()

作用:从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。
实例如下:

'JavaScript'.slice(0, 4) // "Java"

'JavaScript'.slice(4) // "Script"  不写默认到最后结束

'JavaScript'.slice(-6) // "Script"  
//  负值表示从结尾开始倒数计算的位置,(加上字符串长度即可)

备注:如果第一个参数大于第二个参数,一般情况下会返回空字符串,并且由于substring()方法违反直觉,所以优先使用slice。

2.4 String.prototype.indexOf(), String.prototype.lastIndexOf()

作用:与数组的该方法类似,都是用来确定出现位置的,第二个参数都是表示初始位置,indexOf()是用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。而lastIndexOf()是最后一个。
上代码:

'hello world'.indexOf('o', 6) // 7,因为从第六个开始的

'hello world'.lastIndexOf('o', 6) // 4
2.5 String.prototype.trim()

用于去除字符串两端的空格以及制表符(\t、\v)、换行符(\n)和回车符(\r)。
例如

'\r\nabc \t'.trim() // 'abc'
2.6 String.prototype.localeCompare()

作用:比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等。
例如

'B' > 'a' // false
'B'.localeCompare('a') // 1

注意:localeCompare方法会考虑自然语言的排序情况,将B排在a的前面,而JS采用的是Unicode 码点比较。
并且localeCompare还可以有第二个参数,指定所使用的语言(默认是英语),然后根据该语言的规则进行比较。
例如

'ä'.localeCompare('z', 'de') // -1
'ä'.localeCompare('z', 'sv') // 1

上面代码中,de表示德语,sv表示瑞典语。德语中,ä小于z,所以返回-1;瑞典语中,ä大于z,所以返回1。

2.7 String.prototype.split()

作用:照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。

例如

'a|b|c'.split('') // ["a", "|", "b", "|", "c"]

'a|b|c'.split() // ["a|b|c"]

'a||c'.split('|') // ['a', '', 'c']
 //满足分割规则的紧挨着那就返回一个空字符串

'a|b|c'.split() // ["a|b|c"]  省略参数就是唯一一个原字符串

也可以接受第二个参数,为了限制返回数组的最大数。
例如

'a|b|c'.split('|', 1) // ["a"]
'a|b|c'.split('|', 2) // ["a", "b"]
2.8 String.prototype.toLowerCase(),String.prototype.toUpperCase()

作用:toLowerCase方法用于将一个字符串全部转为小写,toUpperCase则是全部转为大写。它们都返回一个新字符串,不改变原字符串。
例如

'Hello World'.toLowerCase()// "hello world"

'Hello World'.toUpperCase()// "HELLO WORLD"
2.9 String.prototype.match()

作用:用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null。
其中还有index属性和input属性,分别表示匹配字符串开始的位置和原始字符串。
例如

'cat, bat, sat, fat'.match('xt') // null
var matches = 'cat, bat, sat, fat'.match('at');
matches.index // 1
matches.input // "cat, bat, sat, fat"

三、Object对象与其联系

Object是其他一切对象的构造函数,三大包装对象的实例都可以用Object来构造。
例如

var bool = new Object(true);等价于 new Boolean(true);
var num = new Object(1)等价于 new Number(1);
var str = new Object("yes");等价于 new String("yes");

参考链接: 标准库.

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值