一、Map(映射)
1.Map类似于对象,也是键值对的集合。但是”键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说,Object(对象)提供了”字符串-值”的对应,Map结构提供了”值-值”的对应,是一种更完善的Hash结构实现。
2.Map的构建
//使用二位数组构建Map结构
let arr = [['name','lisi'],['title','kungfu']];
let map = new Map(arr);
console.log(map);
//使用Set来构建Map结构
let set = new Set([['name','小明'],['age',20]]);
let map1 = new Map(set);
console.log(map1);
3.Map的方法
// set(key,value):设置Map的键值对
let set = new Set([['name','小明'],['age',20]]);
let map1 = new Map(set);
map1.set('sex','male');
console.log(map1); // Map { 'name' => '小明', 'age' => 20, 'sex' => 'male' }
// get(key):读取key对应的键值,如果找不到key,则返回undefined
console.log(map1.get('name')); //小明
//has(key) 返回一个布尔值,表示某个键是否在集合中
console.log(map1.has('age')); // true
// keys():返回键名的遍历器
console.log(map1.keys());
// values():返回键值的遍历器
console.log(map1.values());
// entries():返回所有成员的遍历器
console.log(map1.entries());
// forEach():遍历Map的所有成员
map1.forEach(function(value, key) {
console.log(key, value);
});
map1.forEach((value, key) => {
console.log(key,value)
});
二、函数
1.函数的声明
// 1.函数的声明
function f() {
}
// ES6支持默认参数的函数
function fn1(x=1,y=2) {
return x+y
}
2.函数调用
声明函数之后使用“函数名(参数)”的形式,按顺序传递参数调用
3.函数的参数
//ES5中arguments对象的使用。定义函数时,函数默认带有arguments对象,该对象中存放的是函数的所有参数
function add(){
let sum=0;
for (let i = 0; i < arguments.length; i++) {
sum+=arguments[i]
}
return sum
}
let result = add(1,2,3,4);
console.log(result);
4.ES6中的rest参数可以替代arguments对象。
//ES6中的rest参数
function sum(...values){
let sum = 0;
for (let val of values) {
sum += val
}
return sum
}
console.log(sum(1,4,2));
5.匿名函数
var tsum = function (x,y) {
return x+y
}
let sum = tsum(100,90);
console.log(sum);
注意事项:形参,形式上的参数,只是占位符。通常在定义函数时声明
实参:实际的参数,在函数调用时出现在函数首部的参数。
6.箭头函数
// 1.无参的箭头函数
var fn = () => {
return '你好'
}
//2.若函数体的语句只有一条,可以省略‘{}’
var fn = x => x+1;
//3.带有一个参数
var fn = (x) => {语句}
//4.多个参数
var fn = (x,y) => {语句}
7.高阶函数
//高阶函数,把abs函数作为参数
function diffAvg(m,n,fn){
return fn(m-n)
}
//高阶函数的调用
let res = diffAvg(45,99,Math.abs);
console.log(res)
//fn:函数指针,指向实际参数的入口地址
8.闭包,当函数作为返回值,或者作为内部参数时,该函数就被称为闭包。闭包是能够读取其他函数内部变量的函数,可以使用函数之外定义的变量
示例:
//出租车收费问题
var basePrice = 10; // 起步价
var baseMileages = 3; //起步里程
function calPrice(price,mileages) {
//计算总费用
function totalPrice(){
if (mileages<=baseMileages){
return basePrice
}
else {
return price*mileages;
}
}
return totalPrice()
}
var res = calPrice(3,5);
console.log(res);
三、类
1.ES5中通过构造函数创造实例对象
// ES5中通过构造函数创造实例对象
function People(pname,age){
this.pname =pname;
this.age = age;
}
//通过原型对象增加类的方法
People.prototype.getInfo = function (){
return this.pname+this.age+'岁了'
}
//创建实例对象
var person = new People('张三',20);
console.log(person);
console.log(person.getInfo())
2.ES6中类的定义:引入类的模板,使用class关键字定义类
class People {
constructor(pname, age) {
this.pname = pname;
this.age = age;
}
getInfo(){
return this.pname+this.age+'岁了'
}
}
var person = new People('张飞',100);
console.log(person.getInfo());
四、JavaScript的代码规范
1.编码格式
(1)建议每条语句应该以分号结束,每行只有一条语句
(2)缩进使用2个半角空格或者4个半角空格,而不使用tab键
(3)每行仅声明一个变量,不要声明多个变量
(4)字符串尽量使用单引号
(5)符号“{”应该放在行末,表示代码块的开始,“}”应该放在行首,表示代码块的结束
2.命名规范
(1)变量推荐使用小驼峰命名法
(2)常量推荐使用大写
(3)函数推荐使用小驼峰命名法,前缀为动词
(4)类和构造函数采用大驼峰命名法(每个单词的首字母都是大写),第一个单词建议使用名词
(5)文件名建议采用下划线分割单词