核心(ECMAScript)
语法
类型
语句
关键字
保留字
操作符
对象
文档对象模型 (DOM)
document、location、navigator、screen、history、frames
浏览器对象模型 (BOM)
浏览器提供的接口对象
DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口。
遍历 forEach
// 循环遍历每个元素, 没有返回值
arcray.forEach((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
});
map 重组
// 循环遍历每个元素,对其进行处理后返回给新的对象,
var endobjcar2 = arcray.map((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
return newElement
})
filter 筛选
// 循环遍历每个元素,对其进行比较,如果为ture,该元素会被返回,
var endobjcar2 = arcray.fitter((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
return Boolean
})
find 查找
// 循环遍历每个元素,对其进行比较,如果一个为ture,就结束,不在继续,该元素会被返回,
var endobjcar2 = arcray.find((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
return Boolean
})
every 和 some
// every 只要一个返回为false,并不继续遍历, 值为 false,
// 循环遍历每个元素,对其进行比较,
var endobjcar2 = arcray.every((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
return Boolean
})
// some 只要一个返回为true,并不继续遍历 则值为 true
// 循环遍历每个元素,对其进行比较,
var endobjcar2 = arcray.some((element,index) => {
/// 循环遍历, 每个元素
// index 当前元素下标
return Boolean
})
reducel
/// num为默认参数, item 被遍历的元素,进行迭代运算
/// num 0 为初始值,并在下次迭代作为参数传入
user = porducts.reduce((num,item)=>{
console.log(num,item);
return num+item.age; // 这里下次迭代作为参数 num的值
},0)
console.log(user);
var, let 和 const
function fn(){
var a=1;
function fn1(){
console.log(a);
var a; // var a=2; // let a=2;
}
fn1();
}
fn();
var 变量提升 ---- 无论在哪个地方声明,都会提升到当前作用域顶部
let 声明块级作用域,不会变量提升,锁在当前块中 (先声明在访问)
const 声明块级作用域,不会变量提升,声明常量,一旦声明,不可更改,而且常量必须初始化赋值。 (可以修改数组内部值和对象内部属性,新增删除键值对)
const ties = { a:1 } // {a:1}
ties.a=2 // {a:2}
ties.b=3 // {a:2,b:3}
delete ties.a // {b:3}
ties=2 // Uncaught TypeError: Assignment to constant variable.
模板字面量/多行字符串
// 使用
let a = `132` // 123
let b = `12
3`
// 12
//3
let c = `12\`3`
在模板字面量插入变量的方法。(变量占位符)
我们不需要时用 +(加号)来向字符串插入变量,而是使用 ${params} 直接插入你需要添加到字符串中的位置
let t = 'HAHA'
let a = `123${t}456` // 123HAHA456
function fn(){
return 'hello world'
}
console.log(`foo ${fn()} bar`)
模板字面量的终极用法 tag是一个方法,方法名你可以任意命名,这种写法被称作标签模板。
function tag(literals, ...substitutions) {
//literals是数组,第一个位置是"",第二个位置是占位符之间的字符串,在本例中是[ '', 'ha', 'ha', '' ]
//substitutions是字符串中的模板字面量,可能多个 [ 4, '-----', '-----' ]
let result = ''
console.log(literals)
console.log(substitutions)
//函数最终返回字符串
result = literals+substitutions
return result
}
let a = 4
let b = '-----'
let t = tag`${a}ha${b}ha${b}`
console.log(t) //,ha,ha,4,-----,-----
没有独立作用域,和上级(父级)共享一个作用域
不能用做构造函数
没有 prototype
// => 前的是参数 如果没有参数用 () 代替 => 后面是表达式
let double = function(number){
return number*2;
}
let double = (number)=>{
return number*2;
}
let double = (number)=>number*2; // 单条语句没有中括号时,会默认为返回参数
let double = number =>number*2; // 没有中括号时,会默认为返回参数
// 解决this指针问题
// 1,函数外部赋值给一个常量 内部调用这个变量
// 2,函数 .build(this);
// 3,箭头函数,this指向 父级对象
const team ={
members:["Henry","Elyse"],
teamName:"es6",
teamSummary:function(){
const _this = this;
return this.members.map(function(member){
console.log(_this); // this指向了 window
return `${member} 隶属于 ${_this.teamName}`;
})
}
}
console.log(team.teamSummary());
const team ={
members:["Henry","Elyse"],
teamName:"es6",
teamSummary:function(){
return this.members.map(function(member){
console.log(this); // this指向了 window
return `${member} 隶属于 ${this.teamName}`;
}.bind(this))
}
}
console.log(team.teamSummary());
//
const team ={
members:["Henry","Elyse"],
teamName:"es6",
teamSummary:function(){
return this.members.map((member)=>{
console.log(this); // this指向了 window
return `${member} 隶属于 ${this.teamName}`;
})
}
}
console.log(team.teamSummary());
增强对象字面量
// 对象用法
var name = "jack",age = 20
var obj = {
name:name,
age:age,
getName:function(){
return this.name
},
getAge:function(){
return this.age
}
}
let name = "jack",age = 20
let obj = {
name,
age,
getName(){
return this.name
},
["get"+"Age"](){
return this.age
}
}
Object.keys(obj) // 返回对象key值组成的数组
Object.assign(x,y) // 合并两个对象 多个key值一样的取后面一个
函数的默认参数
在ES5中,我们给函数传参数,然后在函数体内设置默认值
function a(mun, callback){
num = num || 6
callback = callback ||function(data){console.log('ES5:',data)}
callcakc(num*num)
}
a() // ES5:36, 不传参输出默认值
a(10,function(data){console.log(data){console.log(data*10)}})
ES6中,新的默认值写法
function a(num=6,callback = function(data){console.log('ES6:',data)}){
callback(num*num)
}
a() //ES6:36,不传参输出默认值
a(10,function(data){console.log(data*10)}) // 1000,传参输出新数值
arguments :一个类数组对象,存在函数内部,当前函数的所有参数组成了一个类数组对象
function a(num,b){
console.log(arguments) //{"0":6,"1":10}
console.log(arguments.length) // 2
}
a(6,10)
// 常规写法1
function addNumbers(number){
return number.reduce((sum,number)=>{
return sum+number;
},0)
}
const number= [1,2,3,4,5];
console.log(addNumbers(number));
// es6 写法 多参
function addNumbers(...number){
return number.reduce((sum,number)=>{
return sum+number;
},0)
}
console.log(addNumbers(1,2,3,4,5));
数组合并 concat
let colors = ['red','blue']
const colors1 = ['pick',"yellow"]
colors = colors.concat(colors1);
console.log(colors);
// 展开预算符
let colors = ['red','blue']
const colors1 = ['pick',"yellow"]
colors = [...colors,...colors1];
console.log(colors);
对象解构
// 普通写法
var expense = {
type:"es6",
amount:"45"
}
var type =expense.type;
var amount = expense.amount;
console.log(type,amount);
// 解构 当键名和键值相同时可以简写
var expense = {
type: "es6",
amount: "45"
}
const { type ,amount} = expense;
console.log(type, amount)
// 常用方法
var saveFiled = {
extension:"jpg",
name:"girl",
size:1231231
}
// es5
// function fileSammary(file){
// return `${file.name}.${file.extension} 的大小${file.size}`;
// }
// es6
function fileSammary({extension,name,size}){
return `${name}.${extension} 的大小${size}`;
}
console.log(fileSammary(saveFiled));
数组解构
const names = ['张三','李四','王五'];
console.log(names);
const [name1,name2,name3] = names;
console.log(name1,name2,name3);
const { length } = names;
console.log(length);
数组对象
const people = [
{name:"Henry",age:20},
{name:"Bucky",age:18},
{name:"Emily",age:11}
]
const [{},{age}] = people;
console.log(age);
类的定义和继承
/// es5
function Car(options){
this.title = options.title;
}
Car.prototype.drive = function(){
return "Vroom";
}
const car = new Car({title:"BMW"});
console.log(car);
console.log(car.drive());
// 继承
function Toyota(options){
Car.call(this,options);
this.color = options.color;
}
const toyota = new Toyota({title:"Fous",color:"red"});
console.log(toyota);
// es6 类
class Car{
constructor({title}){
this.title =title;
}
drive(){
return "vroom";
}
}
const car = new Car({title:"ben"})
console.log(car);
// 继承
class Toyota extends Car{
constructor(options){
super(options)
this.color =options.color;
}
}
const toyota = new Toyota({title:"Focus",color:"red"});
console.log(toyota);
console.log(toyota.drive());
generator 生成器
// es5
function nameIterator(name){
let nextIndex = 0;
return {
next(){
return nextIndex
const map1 = new Map();
const key1 = "some string",
key2 = {},
key3 = function(){};
map1.set(key1,"Value of key1")
map1.set(key2,"Value of key2")
map1.set(key3,"Value of key3")
console.log(map1);
console.log(map1.get(key1));
console.log(map1.get(key2));
console.log(map1.get(key3));
console.log(map1.size);
for (let [key,value] of map1) {
console.log(`${key} : ${value}`);
}
console.log("------------");
map1.forEach((value,key)=>{
console.log(`${key} : ${value}`);
})
console.log("------------");
for (let key of map1.keys()) {
console.log(key);
}
console.log("------------");
for (let val of map1.values()) {
console.log(val);
}
console.log("------------");
const arrayList = Array.from(map1);
const arrayListkeys = Array.from(map1.keys());
const arrayListvaluse = Array.from(map1.values());
console.log(arrayList);
console.log(arrayListkeys);
console.log(arrayListvaluse);
set 可以存储任意数据类型,并且唯一(不重复)
const set1 = new Set();
set1.add(100);
set1.add("a string");
set1.add({name:"张三"});
set1.add(false)
set1.add(100); // 不能重复添加
console.log(set1);
const set2 = new Set([1,true,"STRING"]);
console.log(set2);
console.log(set1.size);
// 是否存在对应值
console.log(set1.has(100));
console.log(set1.has({name:"张三"}));
// 删除
set1.delete(100);
Promise 结构
new Promise((resolve,reject)=>{
// 异步函数
$.ajax({
url:'',
type:'',
success(res){
resolve(res)
},
error(err){
reject(err)
}
})
}).then((res)=>{
console.log(res)
},(err)=>{
console.log(err)
})
链式调用
var promiseFn1=new Promise((resolve,reject)=>{
// 异步函数
$.ajax({
url:'',
type:'',
success(res){
resolve(res)
},
error(err){
reject(err)
}
})
})
var promiseFn2=new Promise((resolve,reject)=>{
// 异步函数
$.ajax({
url:'',
type:'',
success(res){
resolve(res)
},
error(err){
reject(err)
}
})
})
promiseFn1.then(()=>{
//
return promiseFn2
}).then(()=>{
//
})
fetch("url",{
method:"post",
headers:{'Content-type':'application/json'},
body:{}
})
.then(res=>res.json())
.then(res=>{
// res
}).catch(err=>{
// err
})
另:更多关于异步编程的问题可参考这篇文章JS-学习ES6之- async & await;
由于本人才疏学浅,故在此总结得可能不是很全面,仅做个人笔记使用,望各位海涵。本文中如有和其他文章重复之处,请及时批评指正;