对象
## 对象
**创建对象**
只需要一对大括号即可。创建一个空的对象,可以给该对象添加相应的属性,属性与属性之间时以逗号隔开的,这里我们可以将属性名称之位键,属性对应的称之为值,对象是由一个一个键值对组成的。
**访问对象属性**
有3种方法:点访问法,中括号访问法,symbol访问法
1·点访问法:
示例:
let xiejie = { name : "xiejie", age : 18, gender : "male", score : 100 }; console.log(xiejie.name);//xiejie console.log(xiejie.age);//18 console.log(xiejie.gender);//male console.log(xiejie.score);//100
2·中括号访问法:
示例:
let xiejie = { name : "xiejie", age : 18, gender : "male", score : 100 }; console.log(xiejie["name"]);//xiejie console.log(xiejie["age"]);//18 console.log(xiejie["gender"]);//male console.log(xiejie["score"]);//100
当我们的属性名来自于变量时,用中括号访问法。
3·symbol访问法:
ES6新增的数据类型,解决同名属性名冲突的问题。
**删除对象属性**
对象的任何属性都可以通过delete运算符来从对象删除
示例:
let person = { name : "xiejie", age : 18, walk : function(){ console.log("I'm walking"); } } console.log(person.age);//18 delete person.age;//删除 age 这个属性 console.log(person.age);//undefined person.walk();//I'm walking delete person.walk;// 删除walk 方法 person.walk();// 报错 //TypeError: person.walk is not a function
如果删除的时属性,那么再次访问值变为undefined,而如果删除的时方法,那么调用时会直接报错。
**对象常用属性和方法**
1·in操作符:
该操作符用于判断一个对象是否有某一个属性,如果有返回true,没有返回false。
2·for...in
数组中使用for in来取出数组的键。这里循环遍历一个对象的所有属性。
3·keys(),values(),entries()
分别用于找出可迭代对象的键,值,以及键和值
**嵌套对象**
一个对象里面可以包含其他的对象,访问嵌套对象里面的值的时候,和访问单个对象的方式一样。
**对象的解构**
示例:
let a = {name:"xiejie",age:18}; l let b = {name:"song",age:20}; let {name:aName,age:aAge} = a; let {name:bName,age:bAge} = b; console.log(aName);//xiejie console.log(aAge);//18 console.log(bName);//song console.log(bAge);//20 当属性名和变量名一致时,可以简写: 示例: let a = {name:"xiejie",age:18}; let {name,age} = a; console.log(name);//xiejie console.log(age);//18
**对象作为函数参数**
对象字面量作为函数的参数进行传递,可以再调用函数时不用记住参数的顺序。
**this关键字**
代表的是当前的对象,
**命名空间**
相同的变量和函数名被共享再同一作用域的时候,就会发生命名冲突,解决命名冲突的方式,就是使用对象字面量来为一组相关函数创建一个命名空间,这样咋调用这些函数的时候需要写上对象名,这里的对象名就充当了命名空间的角色。
## 字符串相关方法
**字符串属性**
length属性:可以访问到该字符串里面有多少个字符
**字符串方法**
访问特定字符:
charAt():接收一个数字参数,找到对应下标的字符是什么。
示例:
let str = "Hello World"; console.log(str.charAt(1));//e console.log(str.charAt('a'));//H 因为a被转为了数字0
charCodeAt():接收一个数字参数,找到对应下标的字符编码是什么。
示例:
let str = "Hello World"; console.log(str.charCodeAt(1));//101 console.log(str.charCodeAt('a'));//72
from Char Code():这个方法基本上是和charCodeAt()执行相反的操作
示例:
console.log(String.fromCharCode(104,101,108,108,111));//hello
**字符串操作方法**
concat():用于将一个或者多个字符串拼接起来,返回拼接得到的新字符串,注意的是原字符串不会产生改变。,拼接后的字符串可以返回值的方式返回。
slice():和数组的slice()方法相似,接收一或两个参数,截取字符串,
substr():再字符串中抽取从开始下标开始的指定数目的字符,效果和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(str2);//llo Wor
substring():用于提取字符串中介于两个指定下标之间的字符。
示例:
let str = "Hello World"; let str1 = str.slice(2); let str2 = str.substr(2); let str3 = str.substring(2); console.log(str1);//llo 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
substring()和slice()方法的区别:
slice():是将所有的负值和字符串的长度相加
substr():负的第一个参数和字符串长度相加,负的第二个参数转换为0
substring():把所有的负值转换为0,substring()会将较小的数作为开始,较大的数作为结束
**字符串位置方法**
indexOf()和astlndexOf():这两个都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置,没有找到就是返回-1,区别在于一个从前面开始找,一个从后面开始找。
**查看是否包含字符**
includes():如果包含返回true,否则返回false
**检测开始字符和结束字符**
startsWith()和endsWith():返回true 不是返回false
**去除字符空白方法**
trim():去除字符串两端空白的方式,
trimLeft():删除字符串开头空格。
trimRight():删除字符串末尾的空格。
**重复字符串**
repeat():里面传入要重复的次数即可。
示例:
let str = "Hello"; console.log(str.repeat(3)); //HelloHelloHello
**字符串大小写转换方法**
toLowerCase()和toLocaleLowerCase()还有toUpperCase()和toLocaleUpperCase()
用的较多的是:toLowerCase()和toUpperCase()
## JSON
是2001年发明的一种轻量级数据存储格式,被很多服务用于数据序列化以及配置,经常用于Web服务之间交换信息,
**JSON**
- 属性名必须双引号引起来
- 允许的值包括数字,true,false,null,数组,对象以及双引号引起来的字符串
- 函数时不允许的
**JSON对象转为字符串**
使用方法为:JSON.stringify()
如果一个字面量对象里面包含了方法,那么在使用JSON.stringify()方法将其转为字符串时,会直接忽略掉对象里面的方法。
**字符串转为JSON对象**
使用方法为:JSON.parse()
当要将一个字符串转为JSON对象时,必须保证字符串的格式和JSON的格式一模一样,否则无法进行转换。
**Math对象**
**Math对象的常见属性**
| 属性 | 说明 | | Math.E | 自然数的底数,即常量e的值 | | Math.LN10 | 10的自然对数 | | Math.LN2 | 2的自然对数 | | Math.LOG2E | 以2为底的对数 | | Math.LOG10E | 以10为底e的对象 | | Math.PI | 数学里面PI的值 | | Math.SQRT1_2 | 1/2的平方根()即2的平方根的倒数 | | Math.SQRT2 | 2的平方根 |
这里用的稍微多一点的就是PI,直接拿出来用即可。
**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(),floor()和round()
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
3·随机数方法
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
**Date对象**
**时间戳**
就是从1970年1月1日0分0秒到现在为止的秒数。
获取时间戳:是精确的了毫秒,秒数需要毫秒除以1000
let now = Date.now(); now = Math.round(now / 1000); console.log(now);
静态方法
Date.now()
Date.parse():
注意:浏览器不支持不表示日期只表示时间的字符串格式
注意:在ECMAScript5中,如果使用标准的日期时间字符串格式规则的字符串中,数学前有 前置0,则会解析为UTC时间,时间没有前置0,则会解析为本地时间。其他情况一般都会解 析为本地时间
Date.UTC():
Date.UTCO同样返回给定日期的毫秒数,但其参数并不是一个字符串,而是分别代表年、月、日、时、分、秒、毫秒的数字参数,
注意:该方法使用的是UTC时间,而不是本地时间
日期对象构造函数
不使用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关键字,那么这个时候就会返回一个对象。
1、使用n ew关键字但是没有传入任何参数
会根据当前的日期时间来创建一个date对象
2、传入数字参数
则该参数表示与1970年1月1日0时0分0秒之间的毫秒数
3、接收多个数字参数
类似于Date.UTCO这个方法,不过返回的是一个对 象,而不是毫秒数。
4、传入的是字符串参数
返回该日期对象。如果字符串不能被解析为日期,则返回I nvalidDate