内置对象(基本包装类型)

目录

基本包装类型

1. Boolean类型

2. Number类型

3. String类型


基本包装类型

  • 数据的分类分为基本数据类型和引用类型,基本包装类型不属于其中的任何一个。
  • 引用数据类型有自己的内置方法,为了方便操作基本类型值,ECMAScript提供了3个 特殊引用类型(基本包装类型):Boolean, Number, String。
  • 基本包装类型,和其他引用类型一样,拥有内置的方法可以对数据进行额外操作。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,从而可以调用一些方法操作这些数据。

var str='hello string';
var newStr=str.substring(2);
console.log(newStr);  //llo string

// 基本包装类型的操作流程 类似于隐藏 不需要手动去转换
 var str=new String('hello string'); //用String构造函数创建一个实例,这个实例是一个对象
 var str2=str.substring(2);//对象中有内置方法供开发人员调用
 str=null;  //销毁这个实例
//  虽然基本数据类型的值没有方法可以调用,但是后台临时创建的构造函数实例(也就是对象)上有内置方法可以让我们对值进行操作,因此这样我们就可以对字符串、数值、布尔值这三种基本数据类型的数据进行更多操作,这也是基本包装类型的主要用处:便于操作基本类型值。

str不是对象还能调用对象的原因:

1. 第二步str调用substring时,会主动创建String类型的一个实例(和基本类型的值不同,这个实例就是一个基本包装类型的对象);

2. 调用实例(对象)上指定的方法;

3.销毁这个实例。

JS什么时候会自动创建一个对应的基本包装类型对象呢?

取决于当前执行的代码是否是为了获取他的值。每当读取一个基本类型的值,也就是当我们需要从内存中获取到它的值时(这个访问过程称为读取模式),这时,后台就会自动创建一个基本包装类型的对象。

var str='hello';
console.log(str); //读取模式,后台主动创建基本包装类型对象
var str2=str;       //赋值给变量str,也需要读取str的值
console.log(str2); //hello

引用类型和基本包装类有什么不同呢?最主要的区别就是对象的生存期。

  • 引用类型:使用new操作符创建的引用类型实例,在执行流离开当前作用域之前一直都保存在内存中

  • 基本包装类型:只存在一行代码的执行瞬间,然后立即销毁

var str='hello';   
str.test='world';   //读取模式 var str = new String()
console.log(str.test); //undefined 读取模式 var str = new String()

执行第二行代码主动创建String实例对象添加了test属性,虽然此刻代码执行时它是生效的,但是在这行代码执行完毕后该String实例就会被立刻销毁,String实例的test属性就不存在了。

执行第三行代码时,由于是读取模式,又重新创建了新的String实例,而这个新创建的String实例没有test属性,结果就是undefined。

怎么才能给基本类型添加方法或者属性呢?

  • 增加对应的包装对象的原型方法
//给字符串添加属性或方法  要写到对应的包装对象的原型下才行
var str='hello';
String.prototype.last=function(){
    // 返回指定位置的字符
    return this.charAt(this.length-1);
};
console.log(str.last());//o     执行到这一句,JS会偷偷做一些事情
// 相当于
// 1.找到基本包装对象,new一个和字符串值相同的对象,
// var str = new String('hello');
// 2.通过这个对象找到了包装对象下的方法并调用 
// str.last();  
// 3.这个对象被销毁
// str = null; 
  • 使用new运算创建String对象
// new运算符
var str=new String('hello');
// 有效属性
str.name='world';
// 有效方法
str.age=function(){
    return 20;
}
console.log(str); //[String: 'hello'] { name: 'world', age: [Function (anonymous)] }

console.log(typeof str);  //object
console.log(typeof str.valueOf());  //string 重写valueOf()方法,返回对象表示的基本字符串值
console.log(str.name);    //world
console.log(str.age());  //20

注意:在使用 new 运算符创建String,Number,Boolean三种类型的对象时,可以给自己添加属性和方法;或增加对应的包装对象的原型方法;但我们建议不要这样使用,因为这样会导致根本分不清到底是基本类型值还是引用类型值。

1. Boolean类型

Boolean 类型没有特定的属性或者方法。一般直接将Boolean当做一个工具方法来使用。

2. Number类型

  • 内置属性(静态属性,直接调用即可)
属性描述
MAX_VALUE可表示的最大的数。
MIN_VALUE可表示的最小的数。
NaN非数字值。
NEGATIVE_INFINITY负无穷大,溢出时返回该值。
POSITIVE_INFINITY正无穷大,溢出时返回该值。
prototype使您有能力向对象添加属性和方法。

 

  • 内置方法(对象方法)
方法描述
toString把数字转换为字符串,使用指定的基数。
toLocaleString把数字转换为字符串,使用本地数字格式顺序。
toFixed把数字转换为字符串,结果的小数点后有指定位数的数字。
toExponential把对象的值转换为指数计数法。
toPrecision方法可在对象的值超出指定位数时将其转换为指数计数法。
valueOf返回一个 Number 对象的基本数字值。

 

toString 把数字转换为字符串,使用指定的基数。

var num = 123;
console.log(num.toString()); //123

 

toLocaleString 把数字转换为字符串,使用本地数字格式顺序。

var num = 123;
console.log(num.toLocaleString()); //123

toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。

var num = 123;
console.log(num.toFixed(2)); // 123.00

toExponential 把对象的值转换为指数计数法。科学计数法

var num = 123;
console.log(num.toExponential()); // 1.23e+2

toPrecision 方法可在对象的值超出指定位数时将其转换为指数计数法。

var num = 123;

valueOf 返回一个 Number 对象的基本数字值。

var num = 123;
console.log(num.valueOf()); // 123 number

3. String类型

  • 对象属性
属性描述
constructor对创建该对象的函数的引用
length字符串的长度
prototype允许您向对象添加属性和方法

String 也包含对象的通用方法,比如 valueOf()、toLocaleString()和 toString()方法,但这些方法都返回字符串的基本值。

  • 字符方法
方法描述
charAt(index)返回指定索引位置的字符
charCodeAt(index)以Unicode编码形式返回指定索引位置的字符(index必需)
var str = 'hihi';
console.log(str.charAt(3)); // i
var str = 'nhihi';
console.log(str.charCodeAt(0)); // 110
  • 字符串操作方法
方法描述
concat()连接字符串。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
substring()提取字符串中两个指定的索引号之间的字符。
substr()从起始索引号提取字符串中指定数目的字符。
var str = 'hello';
console.log(str.concat('world', 'hello', 'js')); // helloworldhellojs

slice(start,end) 提取字符串的片断,并在新的字符串中返回被提取的部分。

返回字符串start到end(不包括end)之间位置的字符串,start和end可以为负数。

var str = 'hello';
console.log(str.slice(0,3)); // hel

substring(start,end) 提取字符串中两个指定的索引号之间的字符。

返回字符串start到end(不包括end)之间位置的字符串,start和end不可以为负数,没有end的话,提取剩余全部。

var str = 'hello';
console.log(str.substring(0, 3)); // hel
console.log(str.substring(0)); // hello

substr(start,length) 从起始索引号提取字符串中指定数目的字符。

返回字符串start(可以为负数)开始的length个字符串

var str = 'hello';
console.log(str.substr(0, 3)); // hel
  • 字符串位置方法
方法描述
indexOf(str,n)从n开始搜索第一个str,并将搜索的索引值返回,没有找到返回-1
lastIndexOf(str,n)从n开始搜索的最后一个str,并将搜索的索引值返回,没有找到返回-1
var str = 'hello world';
console.log(str.indexOf('l')); // 2

console.log(str.lastIndexOf('l')); // 9
  • 大小写转换方法
方法描述
toLowerCase()把字符串转换为小写。
toUpperCase()把字符串转换为大写。
toLocaleLowerCase()把字符串转换为小写。本地化
toLocaleUpperCase()把字符串转换为大写。本地化
var str = 'hello world';
// 转换为大写
console.log(str.toUpperCase()); //HELLO WORLD
// 转换为小写
console.log(str.toLowerCase()); //hello world

字符串的模式匹配方法

方法描述
match()找到一个或多个正则表达式的匹配。
replace()替换与正则表达式匹配的子串。
search()检索与正则表达式相匹配的值。
split()把字符串分割为字符串数组。

 

var str = 'HELLO World';
console.log(str.match('L'));//  [ 'L', index: 2, input: 'HELLO World', groups: undefined ]           找到 L,返回 L 否则返回 null
console.log(str.search('L'));// 2  找到 L 的位置,和 indexOf 类似
console.log(str.replace('L', 'Q'));//  HEQLO World  把 L 替换成 Q
//如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
console.log(str.split(''));//  把字符串分割为字符串数组。
// [
//     'H', 'E', 'L', 'L',
//     'O', ' ', 'W', 'o',
//     'r', 'l', 'd'
//   ]     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值