一、内置对象和内置函数1.1基本封装类型(1)在ES中,数据的分类分为基本数据类型和引用类型。(2)基本包装类型,严格来说,不属于以上两种类型中的任何一种,但与这两种类型密切相关。(3)基本数据类型和引用类型这两种类型的一个明显区别是引用类型有自己内置的方法,你也可以自定义其他方法来操作数据。基本数据类型不能像引用类型那样用自己内置的方法对数据进行更多的操作。(4)ECMAScript提供了3种特殊的引用类型(基本封装类型):Boolean、Number和String。(5)基本包装器类型与其他引用类型一样,具有内置方法来对数据执行附加操作。(6)每当读取到一个基本类型的值时,就会在后台创建一个对应的基本封装类型对象,这样就可以调用一些方法来操作数据。例如:varstr='test';varstr2=str.substring(2);控制台日志(str2);上面的str变量中保存的值是一个字符串,'test'字符串是基本数据类型String的值,然后调用substring方法将结果保存到str2中。为什么不是对象却可以调用对象的方法呢?执行第二行代码时,JS会自动执行以下步骤:1.自动创建一个String类型的实例(与基本类型的值不同,这个实例是一个基本封装类型的对象)2.调用theinstance(object)上面指定的方法3.Destroythisinstance//用String构造函数创建一个实例,这个实例是一个对象varstr=newString('test');//对象中有内置方法供开发者使用varstr2=str.substring();//销毁这个实例str=null;经过上面的处理,基本的字符串就变成了对象一样了,以上三步同样适用于Boolean和Number类型。1.1.1JS什么时候会自动创建对应的基础包装类型对象?取决于当前执行的代码是否要获取它的值每当读取一个基本类型的值时,也就是当我们需要从内存中获取它的值时(这种访问过程称为读模式),此时,后台会自动创建一个基本封装类型的对象。varstr='hhh';console.log(str);//读取模式,后台自动创建基本包装类型对象varstr2=str;//赋值给变量str2,同样需要读取str的值,同上1.1。2引用类型和原始包装类型有什么区别?主要区别在于对象的生命周期。(1)引用类型:使用new操作符创建的引用类型实例一直保存在内存中,直到执行流离开当前作用域。(2)基本封装型:执行瞬间只有一行代码,然后立即销毁。varstr='测试';str.test='hhh';console.log(str.test);//undefined上面第二行代码为自动创建的String实例对象添加了test属性,虽然在代码执行的那一刻他是有效的,但是String实例会这行代码执行后立即销毁,String实例的test属性将不复存在。当第三行代码执行时,因为是读模式,所以重新创建了一个String实例,而这个新创建的String实例没有test属性,结果是undefined。1.1.3如何给基本类型添加方法或属性?(1)添加对应包装对象的原型方法//给字符串添加属性或方法必须写在对应包装对象的原型下varstr='hello';String.prototype.last=function(){//返回指定位置的字符returnthis.charAt(this.length-1);}console.log(str.last());//执行到这句话的时候,JS会偷偷的做一些事情,相当于//1.找到基本包装器对象,new一个与字符串同值的对象varstr=newString('hello');//2。通过这个对象找到wrapper对象下的方法,调用str.last();//3.这个对象被销毁str=null;(2)使用new运算符创建String对象//newoperatorvarstr=newString('hello');//有效属性str.name='HI';//有效方法str.age=function(){return100;}注意:使用new操作符创建String、Number、Boolean三种类型的对象时,可以自己添加属性或方法;或者添加对应包装对象的原型方法;但是我们建议不要这样使用,因为这样会导致无法区分是基本类型还是引用类型。1.1.4布尔类型布尔类型没有特定的属性或方法。一般直接使用Boolean作为工具方法来使用1.1.5Number类型(1)内置属性(静态属性,直接调用即可)该属性描述了MAX_VALUE所能表示的最大数。MIN_VALUE代表最小的数字。NaN不是数值。NEGATIVE_INFINITY负无穷大,该值在溢出时返回。POSITIVE_INFINITY为正无穷大并在溢出时返回该值。原型使您能够向对象添加属性和方法。(2)内置方法(对象方法)方法说明toString将数字转换为字符串,使用指定的基数。toLocaleString使用本地数字格式顺序将数字转换为字符串。toFixed将数字转换为字符串,结果小数点后有指定位数。toExponential将对象的值转换为指数表示法。当对象的值超过指定的位数时,toPrecision方法将对象的值转换为指数表示法。valueOf返回Number对象的原始数值。1.1.6String类型(1)Objectattribute属性说明constructor是指创建对象的函数lengthstring原型的length允许你给对象添加属性和方法String还包含了对象的通用方法,比如valueOf()、toLocaleString()和toString()方法,但是这些方法都是返回字符串的基本值(2)字符方法1.charAt(index)返回指定索引位置的字符串2.charCodeAt(index)返回Unicode编码中指定索引位置的字符String(3)字符串操作方法1.concat()连接字符串2.slice()可以提取字符串的某一部分,并以新字符串返回提取的部分3.substring()提取字符串Thecharactersbetweentwospecifiedindexnumbers.4.substr()从起始索引号开始提取字符串(4)字符串定位方法1.indexOf(str,n)从n中查找第一个str,返回查找到的索引值2.lastIndexOf(str,n)的laststr从n开始搜索,返回搜索到的索引值(5)大小写转换方法1.toLowerCase()将字符串转为小写2.toUpperCase()将字符串转为大写3.toLocaleLowerCase()将字符串转为小写。本地化4.toLocaleUpperCase()将字符串转换为大写。本地化(六)字符串模式匹配方法1.match()查找一个或多个正则表达式的匹配2.replace()替换匹配正则表达式的子串3.search()检索与正则表达式匹配的匹配值4.split()拆分将字符串转化为字符串数组1.2Math对象Math对象用于执行数学任务。Math对象不是像Date、String那样的对象类,所以没有构造函数Math(),像Math.sin()这样的函数只是函数,不是对象的方法。它的所有属性和方法都可以通过使用Math作为对象来调用,而无需创建它。1.2.1对象属性(1)E返回以自然对数为底的算术常数e(约等于2.718)(2)LN2返回2的自然对数(约等于0.693)(3)LN10返回10的自然对数(约等于2.302)(4)LOG2E返回e以2为基准的对数(5)LOG10E返回e以10为基准的对数(约等于0.434)(6)PI返回pi的比值(7)SQRT1_2返回2(8)SQRT2返回2的平方根1.2.2对象方法(以下是常用的方法)(1)比较方法Math.min()//求一组数中的最小值Math.max()//求一组数中的最大值(二)小数取整的几种方法Math.ceil()向上舍入Math.floor()向下舍入Math.round()向上舍入(3)随机数Math.random()返回一个大于0小于1的随机数[0,1)
