一. 对象基础介绍
创建对象:
要创建对象,只需要输入一对大括号即可。这样就可以创建一个空的对象。
let objName = {};
可以给对象添加相应的属性
let xiejie = {};
xiejie.name = "xiejie";
xiejie.age = 18;
xiejie.gender = "male";
xiejie.score = 100;
let xiejie = {
name : "xiejie",
age : 18,
gender : "male",
score : 100
};
访问对象属性
- 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
let xiejie = {
name : "xiejie",
age : 18,
gender : "male",
score : 100
};
let str = "name";
console.log(xiejie[str]);//xiejie
伪数组对象原理
let obj = {
1 : "Bill",
2 : "Lucy",
3 : "David"
}
console.log(obj[1]);//Bill
console.log(obj[2]);//Lucy
console.log(obj[3]);//David
symbol访问法
用于解决属性名冲突
let sym = Symbol(描述信息);
let name = Symbol("这是一个名字");
console.log(name);//Symbol(这是一个名字)
console.log(typeof name);//symbol
let person = {
name : "xiejie"
}
let name = Symbol("??????");
person[name] = "yajing";
console.log(person.name);//xiejie
console.log(person[name]);//yajing
Symbol.for()方法用来创建一个共享的symbol。
let obj = {};
let name = Symbol.for("test");
- obj[name] = "xiejie";
let name2 = Symbol.for("test");
console.log(obj[name2]);//xiejie
Symbol.keyFor()方法来查找一个symbol的键是什么
let obj = {};
let name1 = Symbol("test1");
let name2 = Symbol.for("test2");
let i = Symbol.keyFor(name1);
let j = Symbol.keyFor(name2);
console.log(i);//udnefined
console.log(j);//test2
删除对象属性
对象的任何属性都可以通过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();//报错
对象常用属性和方法
- 1. in操作符
判断一个对象中是否含有某个属性,如果有返回true,没有返回false。
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let gender = Symbol("person's gender");
person[gender] = "male";
console.log("name" in person);//true
console.log("age" in person);//true
console.log([gender] in person);//报错
注意in无法判断对象的symbol属性的包含情况,会直接报错
- 2. for…in
使用for…in来取出数组的键
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
for(let i in person){
console.log(i);
}
// name
// age
// walk
注意:for…in无法遍历出用symbol来定义的属性
Object.getOwnPropertySymbols()用来返回一个对象所有的symbol属性
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let gender = Symbol("person's gender");
person[gender] = "male";
console.log(Object.getOwnPropertySymbols(person));
//[ Symbol(person's gender) ]
Object.key():用于找出可迭代对象的键
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let gender = Symbol("person's gender");
person[gender] = "male";
for(let i of Object.keys(person)){
console.log(i);
}
// name
// age
// walk
Object.values():用于找出可迭代对象的值
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let gender = Symbol("person's gender");
person[gender] = "male";
for(let i of Object.values(person)){
console.log(i);
}
// xiejie
// 18
// [Function: walk]
Object.entries():用于找出可迭代对象的键和值
let person = {
name : "xiejie",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let gender = Symbol("person's gender");
person[gender] = "male";
for(let i of Object.entries(person)){
console.log(i);
}
// [ 'name', 'xiejie' ]
// [ 'age', 18 ]
// [ 'walk', [Function: walk] ]
1-5嵌套对象
一个对象里面可以包含其他的对象
let family = {
xiejie : {
age : 18,
gender : "male"
},
song : {
age : 20,
gender : "female"
}
};
对象的解构
let a = {name:"xiejie",age:18};
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
this关键字: 代表当前对象
let person = {
name : 'xiejie',
age : 18,
intro : function(){
console.log(this);
// { name: 'xiejie', age: 18, intro: [Function: intro] }
console.log(`My name is ${this.name},I'm ${this.age} years old`);
// My name is xiejie,I'm 18 years old
}
}
person.intro();
3. 字符串相关方法
3-1.字符串属性: length属性:可以访问到该字符串里面有多少个字符
console.log("Hello".length);//5
3-2.字符串方法
访问特定字符
charAt():接收一个数字参数,找到对应该下标的字符是什么
let str = "Hello World";
console.log(str.charAt(1));//e
console.log(str.charAt('a'));//H
charCodeAt():接收一个数字参数,找到对应该下标的字符编码是什么
let str = "Hello World";
console.log(str.charCodeAt(1));//101
console.log(str.charCodeAt('a'));//72
字符串操作方法
contact():用于将一个或者多个字符串拼接起来,返回拼接得到的新字符串
let str = "Hello";
let newStr = str.concat(" World!!!");
console.log(str);//Hello
console.log(newStr);//Hello World!!!
substr():截取字符串,第一个数是起始位置,第二个是表示截取多少个
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
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
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
slice(),substr(),substring()的区别:
slice 将所有负值和字符串的长度相加
substr 负的第一个参数和字符串长度相加负的第二个参数转化为0
substring 把所有负值转化为0 substring()会将比较小的数作为开始,比较大的数作为结束
indexOf()和lastIndexOf():一个从开头一个从结尾开始找到第一个相同的字符,返回字符串的位置
let str = "Hello World";
console.log(str.indexOf('l'));//2
console.log(str.lastIndexOf('l'));//9
4. JSON
JSON英语全称JavaScript Object Notation。
JSON,属性名必须用双引号包含起来
let batman = {
"name" : "Batman",
"real name" : "Bruce Wayne",
"height" : 74,
"weight" : 210,
"hero" : true,
"villain" : false,
"allies" : ["Robin","Batgirl","Superman"]
}
JSON对象转为字符串
JSON.stringify():let person = {
"name" : "xiejie",
"age" : 18,
"gender" : "male",
}
let str = JSON.stringify(person);
console.log(str);
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}
字符串转为JSON对象
使用JSON.parse()方法
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对象
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
随机数方法:
Math.random()方法返回0-1之间的随机数。
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
6-5.Date 对象
获取时间戳
let now = Date.now();
console.log(now);//1511767644238
Date.parse()
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