js对象2

字符串相关方法

在上一小节中,我们已经学习了什么是对象,以及对象常用的属性和方法。实际上,前面我们所 学习过的基本数据类型中,Boolean、Number和String类型的数据都可以看作是一^个对 象。既然是对象,那么肯定就有相应的属性和方法。这里大家可以仔细回忆一下,例如前面我们 所学习过的toFixed(),如下:

let num = 10.456;

console.log(num.toFixed(2));//10.46

这里我们所使用到的toFixed()实际上就是num这个数字对象的一个方法。

由于Boolean类型和Number类型的对象,所涉及的属性和方法不多,所以掌握前面那些所介绍 过的内容即可。

这里我们主要来看一看字符串对象的相关属性和方法。

6-2-1字符串属性

在字符串里面有一个length属性,可以访问到该字符串里面有多少个字符

console.log("Hello".length);//5

6-2-2字符串方法

访问特定字符

有两个访问字符串中特定字符的方法,分别是c harAt ()和c harCodeAt。

charAtO:接收一个数字参数,找到对应该下标的字符是什么

let str = "Hello World";

console.log(str.charAt(1));//e

console.log(str.charAt( 'a'));//H 因为a被转为了数字0

charCodeAtO:接收一个数字参数,找到对应该下标的字符编码是什么

let str = "Hello World";

console.log(str.charCodeAt(1));//101

console.log(str.charCodeAt('a'));//72

fromCharCode。:这个方法基本上和c harCodeAt ()执行相反的操作,如下:

console.log(String.fromCharCode(104,101,108,108,111));//^ello

字符串操作方法

concatO:用于将一个或者多个字符串拼接起来,返回拼接得到的新字符串 需要注意的就是原字符串不会产生改变,拼接后的字符串以返回值的方式返回

let str = "Hello";

let newStr = str.concat(" World!!!"); console.log(str);//Hello console.log(newStr);//Hello World!!!

还有一点,那就是虽然c oncatO可以用于拼接字符串,但是还是使用+号拼接的方式比较简便,使 用的情况更多一些

slice。:和数组的slice。方法相似,接收一或者两个参数,截取字符串

let str = "Hello World";

let str2 = str.slice(2);

let str3 = str.slice(2,7);//不包括7 console.log(str);//Hello World console.log(str2);//llo World console.log(str3);//llo W

substrO:在字符串中抽取从开始下标开始的指定数目的字符,效果和slice。方法基本一样。但是 还是有一定的区别,区别就在于第二个参数,如下:

let str = "Hello World";

let str1 = str.slice(2);

let str2 = str.substr(2);

console.log(str1);//llo World

console.log(str2);//llo World

str1 = str.slice(2,7);//结束位置为 7,不包含7

str2 = str.substr(2,7);//^^回的字待个数

console.log(str1);//llo W

console.log(str2);//llo Wor

substringO:用于提取字符串中介于两个指定下标之间的字符。和前面的方法也是非常的相似, 但是还是有不同的地方

let str = "Hello World";

let strl = str.slice(2);

let str2 = str.substr(2);

let str3 = str.substring(2);

console.log(strl);//Ho World

console.log(str2);//llo World

console.log(str3);//llo World

str1 = str.slice(2,7);//结束位置为 7,不包含7

str2 = str.substr(2,7);//^^回的字待个数

str3 = str.substring(2,7);//结束位置为 7,不包含7

console.log(str1);//llo W

console.log(str2);//llo Wor

console.log(str3);//llo W

普通的传入2个参数的时候,好像substring。方法和slice。方法就是一样的方法,那么区别在什么 地方呢?区别就在于参数为负数的时候,如下:

let str = "Hello World";

let str1 = str.slice(-3);

let str2 = str.substr(-3);

let str3 = str.substring(-3);

//slice将所有的负值和字符串的长度相加

//substr负的第一个参数和字符串长度相加负的第二个参数转换为0

//substring把所有的负值转换为0 substring会将较小的数作为开始 较大的数作为结束 console.log(str1);//rld

console.log(str2);//rld

console.log(str3);//Hello World

str1 = str.slice(2,-3);//等徐于slice(2,8)

str2 = str.substr(2,-3);//等徐于substr(2,0)

str3 = str.substring(2,-3);//等徐子substring(2,0)等价于substring(0,2) console.log(str1);//llo Wo

console.log(str2);//

console.log(str3);//He

字符串位置方法

indexOf()和l astlndexOf。:这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字 符串的位置,没有找到就是返回-1,两个方法的区别在于一个是从前面开始找,一个是从后面开

始找。

let str = "Hello World";

console.log(str.indexOf('l'));//2 console.log(str.lastIndexOf('l'));//9

字符串对象中还存在一个和indexOf()方法很类似的方法,为search。方法。该方法也是用 于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹 配的子串,则返回-1。具体示例如下:

let str="Visit Runoob!";

let n=str.search("Runoob");

console.log(n); // 6

除了传入子字符串,还可以传入一个正则,如下:

let str="Mr. Blue has a blue house"; console.log(str.search(/blue/i)); // 4

查看是否包含字符

includes。:如果包含返回true,否则返回false

let str = "Hello World";

console.log(str.includes("l"));//true console.log(str.includes("M"));//false

检测开始字符和结束字符

startsWith() endsWith()

let str = "Hello World";

console.log(str.startsWith("H"));//true console.log(str.endsWith("d"));//true console.log(str.endsWith("z"));//false

去除字符串空白方法

有一个去除字符串两端空白的方法trim。,这个在表单里面经常会用 trim。:这个方法会创建一个字符串副本,删除前置以及后缀的所有空格。

let str = " Hello World ";

let newStr = str.trim();

console.log(str);//Hello World

console.log(newStr);//Hello World

除了trim。以外,还有trimLeft()和trimRight()方法,分别用于删除字符串开头和末尾的空格。

重复字符串

repeat。:里面传入要重复的次数即可

let str = "Hello";

console.log(str.repeat(3));

//HelloHelloHello

字符串大小写转换方法

这里涉及到4个方法,分别是toLowerCase。和toLocaleLowerCase。,还有就是toUpperCase。 toLocaleUpperCase()。

用得较多的一般就是toLowerCase。和toUpperCase。

let str = "HELLO";

console.log(str.toLowerCase());//hello

str = "hello";

console.log(str.toUpperCase());//HELLO


6-3 JSON

JSON,英语全称为JavaScript Object Notation。是Douglas Crockford2001 年发明的一种轻 量级数据存储格式,被很多服务用于数据序列化以及配置。JSON经常被用于Web服务之间交换 信息,也被很多网站用来共享信息,例如twitter, facebook等。JSON最大的优点在于它在人、 机可读性方面达到了一个最佳的临界点。

经常有人会把对象字面量和JSON相混淆,认为是同一个东西。但是实际上它们之间还是有几个 关键性的区别:

-属性名必须用双引号引起来

允许的值包括数字,true, false, null,数组,对象以及双引号引起来的字符串

-函数是不允许的

例如:蝙蝠侠的JSON字符串可以表示为如下

let batman = {

"name" : "Batman",

"real name" : "Bruce Wayne",

"height" : 74,

"weight" : 210,

"hero" : true,

"villain" : false,

"allies" : ["Robin","Batgirl","Superman"]

}

JSON正作为一种数据存储格式变得日益的流行,很多编程语言现在都有现成的库来解析和生成 JSONES5开始,就已经有了全局的JSON对象,该对象存在方法,可以将JavaScript中的字 符串转为JSON或者将JSON转换为字符串。

JSON对象转为字符串

使用的方法为JSON.stringifyO,示例如下:

let person = {

"name" : "xiejie",

"age" : 18,

"gender" : "male",

}

let str = JSON.stringify(person);

console.log(str);

//{"name":"xiejie","age":18,"gender":"male"} 如果一个字面量对象里面包含了方法,那么在使用JSON.stringify()方法将其转为字符串时, 会直接忽略掉对象里面的方法,如下:

let person = {

name : "xiejie",

age : 18,

walk : function(){

console.log("I'm walking");

}

}

let str = JSON.stringify(person); console.log(str);//{"name":"xiejie","age":18}

字符串转为J SON对象

使用的方法为JSON.parse()方法,但是需要注意的一个问题是,当我们要将一个字符串转为 JSON对象时,必须要保证字符串的格式要和JSON的格式一模一样,否则无法进行转换,示例如 下:

let person = '{"name":"xiejie","age":18,"gender":"male"}';

let obj = JSON.parse(person);

console.log(obj);

//{ name: 'xiejie', age: 18, gender: 'male' }


6-4 Math 对象

ECMAScript中,Math对象是一个比较特殊的对象,它是一个静态对象。什么意思呢?就是说 这个Math和前面讲的其他类型不一样,不需要实例化,直接拿来用就可以了。

6-4-1 Math对象常见的属性

Math对象常见的属性如下表:

属性

说明

Math.E

自然对数的底数,即常量e的值

Math.LNIO

10的自然对数

Math.LN2

2的自然对数

Math.LOG2E

以2为底e的对数

Math.LOGlOE

以10为底e的对象

Math.PI

数学里面PI的值

Math.SQRT1_2

1/2的平方根(即2的平方根的倒数)

Math.SQRT2

2的平方根

 

这里面用得稍微多一点的就是PI,直接拿来用即可。

console.log(Math.PI);//3,141592653589793

6-4-2 Math对象常见的方法

1. min() max

这两个方法很简单,就是求一组数值的最大值和最小值

let max = Math.max(3,5,8,1);

let min = Math.min(3,5,8,1);

console.log(max);//8

console.log(min);//1

2.舍入方法ceil。,floorround

ceil:执行向上舍入

floor。:执行向下舍入

round:四舍五入

let num = 3.14;

console.log(Math.ceil(num));//4

console.log(Math.floor(num));//3

console.log(Math.round(num));//3

  1. 随机数方法

Math.random方法返回0-1之间的随机数,如果想显示固定范围的随机数,可以套用下面的公 式。

=Math.floor(Math.random*可能值的总数+第一^可能的值)

let num = Math.random();

console.log(num);//0.24003779065523112

//生成25-50之间的随机数

//可能值的计算:50-25+1

let rand = Math.floor(Math.random()*26 + 25); console.log(rand);//41

练习:封装一个函数,这个函数接收两个参数,然后可以返回这两个参数之间的随机数

let rand = function(x,y){

let choice = y - x + 1;

return Math.floor(Math.random() * choice + x);

}

console.log(rand(1,10));//3

  1. 其他方法

Math对象里面还有诸如下表所示的其他方法,这里不再做一一演示

方法说明

Math.abs(num) 返回num的绝对值


Math.exp(num)

Math.log(num)

Math.pow(num,power)

Math.sqrt(num)

Math.acos(x)

Math.asin(x)

Math.atan(x)

Math.atan2(x)

Math.cos(x)

Math.sin(x)

Math.tan(x)

返回Math.Enum次寫

返回num的自然对数

返回numpower次寫

返回num的平方根

返回x的反余弦值

返回x的反正弦值

返回x的反正切值

返回y/x的反正切值

返回x的余弦值

返回x的正弦值

返回x的正切值


 


6-5 Dat e 对象

Date类型主要是用于处理和时间相关的操作。

6-5-1时间戳

在学习Date类型之前,有一个概念必须要了解,那就是时间戳。

所谓时间戳,就是从197011000秒到现在为止的秒数。在计算机里面,进行时间的计 算都是通过时间戳来进行计算的。计算完成以后再将时间戳转换为表示时间的字符串。

获取时间戳

ECMAScript中比较特殊的是获取时间的精度更高一些,可以获取到的时间戳精确到了毫秒, 通过以下方式可以获取到

let now = Date.now();

console.log(now);//1511767644238

如果想要得到秒数,可以使用得到的毫秒数除以1000,然后四舍五入,如下:

let now = Date.now();

now = Math.round(now / 1000);//毫秒除以 1000,得到描述 console.log(now);//1511767768

6-5-2静态方法(扩展)

可以看到,上面的Date.now()就是一个静态方法,除了这个方法以外,这里还要介绍两个静态 方法,分别是 Date.parse() Date.UTC()

Date.parse()

该方法用于解析一个日期字符串,参数是一个包含待解析的日期和时间的字符串,返回从1970 110点到给定日期的毫秒数

该方法会根据日期时间字符串格式规则来解析字符串的格式,除了标准格式外,以下格式也支

持。如果字符串无法识别,将返回NaN

1//’如6/13/2004

2 ' 日,年'如January 12,2004Jan 12,2004

3 '星期月 日年时:分:秒时区,Tue May 25 2004 00:00:00 GMT-0700

注意:浏览器不支持不表示日期只表示时间的字符串格式

console.log(Date.parse("1990/03/23"));//638121600000

console.log(Date.parse("March 23,1990"));//638121600000

console.log(Date.parse("2017"));//1483228800000 console.log(Date.parse("Hello"));//NaN

注意:在ECMAScript5中,如果使用标准的日期时间字符串格式规则的字符串中,数学前有 前置0,则会解析为UTC时间,时间没有前置0,则会解析为本地时间。其他情况一般都会解 析为本地时间

Date.UTC()

Date.UTC()同样返回给定日期的毫秒数,但其参数并不是一个字符串,而是分别代表年、月、 日、时、分、秒、毫秒的数字参数,说白了就是参数的形式和上面不一样。Date.UTCO方法的语 法如下:

Date.UTC(year,month,day,hours,minutes,seconds,ms),其中 year 参数是固定的,其余参数都是 可选的,我们可以通过函数的I ength属性来查看该函数的形式参数个数

console.log(Date.UTC.length);//7

|注意:该方法使用的是UTC时间,而不是本地时间

console.log(Date.UTC("1990/03/23"));//NaN

console.log(Date.UTC(1990,3,23));//640828800000 console.log(Date.UTC(2017));//1483228800000 console.log(Date.UTC("Hello"));//NaN

6-5-3日期对象构造函数

日期对象的构造函数为Date。。该构造函数根据使用的不同效果也不尽相同。

不使用new关键字

如果不使用new关键字,那么就只是单纯的函数调用。会返回一个当前的日期和时间的字符串表 示。并且被当作函数调用时,会忽略所有传递进去的参数,如下:

console.log(Date());

//Mon Nov 27 2017 16:03:33 GMT+0800 (CST)

console.log(Date("1990-03-23"));

//Mon Nov 27 2017 16:03:33 GMT+0800 (CST)

使用new关键字

如果使用new关键字,那么这个时候就会返回一个对象。关于这种使用new关键字创建对象的方 式,我们会在后面进行详细的介绍,这是只是作为了解即可。

使用new关键字但是没有传入任何参数,则会根据当前的日期时间来创建一个date对象

let date = new Date();

console.log(date);//2017-11-27T08:05:44.025Z

console.log(typeof date);//object

如果传入数字参数,则该参数表示与197011000秒之间的毫秒数,如下:

let date = new Date(638121600000);

console.log(date);//1990-03-22T16:00:00.000Z

可以接收多个数字参数,这个时候形式有点类似于Date.UTC()这个方法,不过返回的是一个对 象,而不是毫秒数。

let date = new Date(1990,3,23);

console.log(date);//1990-04-22T15:00:00.000Z

如果传入的是字符串参数,则返回该日期对象。如果字符串不能被解析为日期,则返回I nvalid

Date

let date = new Date("1990-03-23");

console.log(date);//1990-03-23T00:00:00.000Z let date2 = new Date("Hello");

console.log(date2);//Invalid Date

6-5-5实例方法

Date对象没有可以直接读写的属性,所有对日期和时间的访问都需要通过方法。

Date对象的大多数方法分为两种形式:一种是使用本地时间,一种是使用UTC时间,这些方法在 下面一起列出。例如,get[UTC]Day()同时代表getDay()getUTCDay()

Date对象一共有46个实例方法,可以分为以下3类:to类、get类和set类。因为Date对象的 实例方法个数太多,而大多数实例方法在使用的时候都是非常相似的,所以我们这里只选择个别

方法进行演示

  1. to

to类方法从Date对象返回一个字符串,表示指定的时间

  • toString。:返回本地时区的日期字符串
  • toUTCString():返回UTC时间的日期字符串
  • tolSOStringO返回Date对象的标准的日期时间字符串格式的字符串
  • toDateString。:返回Date对象的日期部分的字符串
  • toTimeString:返回D ate对象的时间部分的字符串

toJSONO返回一个符合JSON格式的日期字符串,与tolSOString方法的返回结果完全相同

  • toLocaleString。: toString方法的本地化转换
  • toLocaleTimeString。: toTimeString方法的本地化转换
  • toLocaleDateString。: toDateString方法的本地化转换

个别方法演示:

console.log(new Date("1990-03-23").toString());

//Fri Mar 23 1990 08:00:00 GMT+0800 (CST)

console.log(new Date("1990-03-23").toDateString());//Fri Mar 23 1990

console.log(new Date("1990-03-23").toTimeString());//08:00:00 GMT+0800 (CST) console.log(new Date("1990-03-23").toLocaleString());//1990-3-23 08:00:00

  1. get

Date对象提供了一系列get类方法,用来获取实例对象某个方面的值

在介绍get类方法之前,首先要介绍valueOf方法

valueOf:返回距离1970110点的毫秒数。因此,可以方便地使用比较运算符来比较日期

let date1 = new Date(1990,3,23);

let date2 = new Date(1988,8,21);

console.log(date1 > date2);//true

  • getTime:返回距离1970110点的毫秒数,同valueOf。在ECMAScript5之前,可以 使用getTime方法实现Date.now
  • getTimezoneOffset。:返回当前时间与UTC的时区差异,以分钟表示(8*60=480分钟),返回 结果考虑到了夏令时因素
  • getYearO :返回距离1900年的年数(已过时)
  • get[UTC]FullYear():返回年份(4 位数)
  • get[UTC]Month():返回月份(0-11)
  • get[UTC]Date():返回第几天(1-31)
  • get[UTC]Day():返回星期几(0-6)
  • get[UTC]Hours()返回小时值(0-23)
  • get[UTC]Minutes()返回分钟值(0-59)
  • get[UTC]Seconds()返回秒值(0-59)
  • get[UTC]Milliseconds():返回毫秒值(0-999)

|注意:通过标准日期时间格式字符串,且有前置0的形式的参数设置,设置的是UTC时间

个别方法演示:

console.log(new Date("1990-03-23").valueOf());//638150400000

console.log(new Date("1990-03-23").getTime());//638150400000

console.log(new Date("1990-03-23").getDay());//5 console.log(new Date("1990-03-23").getMonth());//2

  1. set

Date对象提供了一系列set类方法,用来设置实例对象的各个方面

set方法基本与get方法相对应,set方法传入类似于Date.UTC()的参数,返回调整后的日期的内部 毫秒数

|注意:星期只能获取,不能设置

  • setTime:使用毫秒的格式,设置一个D ate对象的值
  • setYearO :设置年份(已过时)

-set[UTC]FullYear():设置年份(4位数),以及可选的月份值和日期值

  • set[UTC]Month()设置月份(0-11),以及可选的日期值
  • set[UTC]Date():设置第几天(1-31)
  • set[UTC]Hours()设置小时值(0-23),以及可选的分钟值、秒值及毫秒值
  • set[UTC]Minutes()设置分钟值(0-59),以及可选的秒值及毫秒值

-set[UTC]Seconds()设置秒值(0-59),以及可选的毫秒值

  • set[UTC]Milliseconds():设置毫秒值(0-999)

个别方法演示:

let date = new Date("1990-03-23"); console.log(date.setFullYear(1992),date.getFullYear()); //701308800000 1992

posted on 2019-08-23 15:59  dazhongma233  阅读(152)  评论(0编辑  收藏  举报