对象
1.内置对象
1.1 基本包装类型
在ES中,数据分类基本分为基本数据类型和引用类型
而基本包装类型,严格来说不属于这两类,但又和他们息息相关
基本数据类型和引用类型的其中一个明显区别是:引用数据类型有内置方法或者可以自定义方法来操作数据。但大部分基本数据类型没有。
而根据最新ES标准定义,基本数据类型包括Undefined, Null, Boolean, Number, Symbol, String。
为了便于操作基本数据类型值,CMAScript提供了3个特殊引用数据(即基本包装类型):Boolean、Number、String
基本包装类型,和其他引用类型一样,拥有内置的方法可以对数据进行额外操作。
当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,从而可以调用一些方法操作这些数据
例如:
var str = 'test';
//substring(start,end),截取从start到end的字符串,不包括end。
var str2 = str.substring(2);
console.log(str2); //st
在上面的例子中,str是string类型,属于基本数据类型,但是却调用了对象的方法。
这是因为在执行第二行代码的时候,后台会自动进行一些操作:
- 自动创建String类型的一个实例,该实例为基本包装类型的对象
- 再调用实例方法
- 最后销毁这个实例(即该实例只在调用方法的时候存在,调用结束则会被销毁,可以理解为这个实例只作用于这一行代码)
同样的,Boolean、Number类型的数据调用相应方法时后台也会进行这些操作。
此时,你是不是在疑惑,那什么时候JS会自动创建基本包装类型的对象呢?
当需要读取到基本数据类型的值时,即需要从内存中获取到值(这个过程称为读取模式),就会自动创建基本包装类型的对象。
var str='test';
console.log(str); //读取模式
var str1=str; //读取模式
引用类型和基本包装类型的区别
主要区别在于对象的生存期
- 引用类型:使用new操作符创建的引用类型实例,在执行流离开当前作用域之前一直都保存在内存中
- 基本包装类型:只存在一行代码的执行瞬间,然后立即销毁
var str='test';
str.name='zs';
console.log(str.name); //undefined
上述例子给str自动创建了String对象实例,给该对象实例添加了name属性,在第二行代码中,我们确实给这个实例成功添加了name属性,但是它只存在于这一行代码中,当我们执行第三行代码时,又创建了一个新的实例,而之前的实例已经被销毁了,因此也就没有了name属性,所以打印出来的值就是undefined。
给基本数据类型添加方法或属性
-
增加对应的包装对象的原型方法
/给字符串添加属性或方法 要写到对应的包装对象的原型下才行 var str = 'hello'; String.prototype.last = function(){ // 返回指定位置的字符 return this.charAt(this.length - 1); }; console.log(str.last());//o
-
使用new运算符创建String对象
不建议使用该方法,否则会分不清是基本数据类型还是引用类型的数据
var str = new String('hello');
// 有效属性
str.name = 'HI';
// 有效方法
str.age = function () {
return 100;
}
console.log(str);//[String: 'hello'] { name: 'HI', age: [Function (anonymous)] }
console.log(str.name); // HI
console.log(str.age()); // 100
1.1.1 Boolean类型
Boolean 类型没有特定的属性或者方法。一般直接将Boolean当做一个工具方法来使用
1.1.2 Number类型
属性 | 描述 |
---|---|
MAX_VALUE | 可表示的最大的数。 |
MIN_VALUE | 可表示的最小的数。 |
NaN | 非数字值。 |
NEGATIVE_INFINITY | 负无穷大,溢出时返回该值。 |
POSITIVE_INFINITY | 正无穷大,溢出时返回该值。 |
prototype | 使您有能力向对象添加属性和方法。 |
方法 | 描述 |
---|---|
toString | 把数字转换为字符串,使用指定的基数。 |
toLocaleString | 把数字转换为字符串,使用本地数字格式顺序。 |
toFixed | 把数字转换为字符串,结果的小数点后有指定位数的数字。 |
toExponential | 把对象的值转换为指数计数法。 |
toPrecision | 方法可在对象的值超出指定位数时将其转换为指数计数法。 |
valueOf | 返回一个 Number 对象的基本数字值。 |
1.1.3 String类型
属性 | 描述 |
---|---|
constructor | 对创建该对象的函数的引用 |
length | 字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
String 也包含对象的通用方法,比如 valueOf()、toLocaleString()和 toString()方法,但这些方法都返回字符串的基本值。
方法 | 描述 |
---|---|
charAt(index) | 返回指定索引位置的字符 |
charCodeAt(index) | 以Unicode编码形式返回指定索引位置的字符 |
方法 | 描述 |
---|---|
concat() | 连接字符串。 |
slice(start,end) | 返回start到end(不包括end)之间位置的字符串,start和end可以为负数 |
substring(start,end) | 返回start到end(不包括end)之间位置的字符串,start和end不可以为负数,没有end的话,提取剩余全部 |
substr(start,length) | 返回start(可以为负数)开始的length个字符串 |
方法 | 描述 |
---|---|
indexOf(str,n) | 从n开始搜索第一个str,并将搜索的索引值返回,无n从首字符开始检索,未找到返回-1 |
lastIndexOf(str,n) | 从n开始搜索的最后一个str,并将搜索的索引值返回,无n从首字符开始检索,未找到返回-1 |
方法 | 描述 |
---|---|
toLowerCase() | 把字符串转换为小写。 |
toUpperCase() | 把字符串转换为大写。 |
toLocaleLowerCase() | 把字符串转换为小写。本地化 |
toLocaleUpperCase() | 把字符串转换为大写。本地化 |
方法 | 描述 |
---|---|
match() | 找到一个或多个正则表达式的匹配。 |
replace() | 替换与正则表达式匹配的子串。 |
search() | 检索与正则表达式相匹配的值。 |
split() | 把字符串分割为字符串数组。 |
1.2 Math对象
Math对象用于实现数学任务
1.2.1 对象属性
属性 | 描述 |
---|---|
E | 返回算术常量 e,即自然对数的底数(约等于2.718)。 |
LN2 | 返回 2 的自然对数(约等于0.693)。 |
LN10 | 返回 10 的自然对数(约等于2.302)。 |
LOG2E | 返回以 2 为底的 e 的对数(约等于 1.414)。 |
LOG10E | 返回以 10 为底的 e 的对数(约等于0.434)。 |
PI | 返回圆周率(约等于3.14159)。 |
SQRT1_2 | 返回返回 2 的平方根的倒数(约等于 0.707)。 |
SQRT2 | 返回 2 的平方根(约等于 1.414)。 |
1.2.2 对象方法
Math的方法很多,下面为常用的
比较方法
Math.min():一组数中的最小值
Math.max() :求一组数中的最大值
将小数值舍入为整数的几个方法
Math.ceil():向上舍入
Math.floor():向下舍入
Math.round() :四舍五入
随机数
Math.random():返回大于0小于1的一个随机数 [0,1)
1.3 Date对象
Date 对象用于处理日期和时间,是JS提供的内置构造函数,会自动把当前日期和时间保存为其初始值
创建Date对象的语法:
var myDate = new Date();
console.log(myDate); //2021-09-14T07:24:07.901Z
//在node环境和浏览器环境输出不同
Date对象可传入参数,获取到你传入参数的时间
var time = new Date('2021-01-01 16:06:06')
console.log(time)
// node环境下 2021-01-01T08:06:06.000Z
// 浏览器环境下 Fri Jan 01 2021 16:06:06 GMT+0800 (中国标准时间)
//传入多个参数 月份取值从0-11
var time = new Date(2021, 01, 1, 16, 06, 06);
console.log(time);//2021-02-01T08:06:06.000Z
1.3.1 常用对象方法
toString():转化为字符串形式
toLocaleString():转化为 本地化字符串
getFullYear():得到指定字符串中的哪一年
getMonth() :得到指定字符串中的哪一个月份,月份取值为0-11,即0表示1月,1表示2月
getDate():得到指定字符串中的哪一天
getHours() :得到指定字符串中的哪小时
getMinutes() :得到指定字符串中的哪分钟
getSeconds() :得到指定字符串中的哪秒钟
getDay() :得到指定字符串当前日期是一周中的第几天(周日是 0,周六是 6)
getTime() :得到执行时间到 格林威治时间 的毫秒数 时间戳