【前端开发】ES6知识点系统化梳理笔记
>ES6扩展:
#Map和Set是es6标准新增的数据类型 ##Map是key-value(关键字-值),Map允许修改value,不允许修改key,Map支持下标操作
var m = new Map([['zhangsan',20],['lisi',25],['wangwu',19]]);
m.get('lisi') // ##Set是key(关键字),Set的迭代器是const,不允许修改元素值,Set不支持下标操作
var m = new Set([1,2,3,4,3,2]);
m // Set{1,2,3,4} #Symbol
typeof Symbol 代表独一无二的值;
避免键名重复被覆盖;
无法进行字符串拼接和数字的计算;
可以转布尔型; #find
发现数组中满足条件的第一个
var m = [10,20,30,60,26,50];
var n = m.find(function(item){
return item > 50
})
console.log(n) // 60 取数组中第一个满足条件的 #findIndex
发现数组中满足条件的第一个数的下标序号
var m = [10,20,30,60,26,50];
var n = m.findIndex(function(item){
return item > 50
})
console.log(n) // 3 取数组中第一个满足条件的位置下标 !! 转换为布尔值 #判断是否数组:
Array.isArray([]) #1、数组新增:
var arr = new Array(10,20,30) 可以多项也不可以一项,一项数据时返回代表的是长度10;
var arr = Array.of(20,10,30) 可以多项也可以一项;
#2、字符串新增;
2.1字符串中是否存在
ES5:
var str=“abcdefg”;
console.log( str.indexOf('c') !== -1) //true 若该indexOf检索的下标值不等于-1则证明存在;
ES6:
str.includes('c') //true 若存在为true否则false
str.startsWith('ab') //true 若是ab开头则true 否则false
str.endsWith('fg') //true 若是fg结尾则true 否则false
2.2字符串重复拷贝
console.log(str.repeat(3)) //abcdefgabcdefgabcdefg 重复拷贝
2.3超级字符串:
反引号包起来(换行生效和空格会生效)
反引号中间拼接变量${name}
var n = 2;
var m = 3;
console.log('n+m=${n+m}') 这里是反引号包裹
var isRaining = true
console.log('今天天气是${isRaining ? "雨天" : "晴天"}') 这里是反引号包裹 function fn (){
return "miaov"
}
console.log('fn执行结果是:${ fn() }') //函数也可以放反引号里执行
#3、对象新增:
3.1对象键名和键值相同可缩写:
var a=1;
var obj = {a};
console.log(obj) //a:1
3.2函数调用:
var obj = {
a,
fn(){
console.log("执行了")
},
b:100
};
obj.fn();
3.3键名动态改变:
var attrname = "width";
var obj={
[attrname]:100
}
console.log(obj) //键名随着attrname变化而变化
3.4函数名动态改变:
var attrFn = "fn";
var obj = {
[attrFn](){
console.log("attrFn执行了")
}
}
obj.fn();
3.5判断值是否完全相等
console.log(1 == "1") //true 隐式类型转换
console.log(NaN === NaN) //false es5的不足
console.log(Object.is(1,1)) //true es6 相当于 ===
console.log(Object.is(1,"1")) //false 即判断类型又判断值是否相等
console.log(Object.is(NaN,NaN)) //true 解决es5的不足之处
console.log(Object.is({},{})) //false {}为两个值
var obj={};
console.log(Object.is(obj,obj)) //true obj为一个对象
3.6 Object.assign()对象参数合并
function move(obj){
var defaultObj = {
ease : "linear",
duration:1000
}
<!-- var para = {
ease:obj.ease || defaultObj.ease,
duration:obj.duration || defaultObj.duratio
} -->
var para = {};
Object.assign(para,defaultObj,obj) //es6新属性 合并对象参数,后面依次合并到第一个参数,重复参数后面会覆盖前面的
console.log(para)
}
move({
ease:"easeIn",
duration:2000
})
3.7for of 对象遍历(Object.keys(obj))
var obj={
a:1,
b:2
}
console.log(Object.keys(obj)) // [a,b]
console.log(Object.values(obj)) //[1,2]
for(var attr of Object.values(obj)){
console.log(attr) //1 2
} console.log(Object.entries(obj)) //解构成二维数组
for(var [key,val] of Object.entries(obj)){
console.log(key,val) //分别取值 a 1 b 2
}
3.8 ES6扩展运算符
var a = {
a:1,
b:2
} var c = {
...a,
f:9999,
g:8888
}
console.log(c) //{a: 1, b: 2, f: 9999, g: 8888}
...obj 打散成参数的形式
var arr = [1,2,3,4];
console.log(arr) //[1,2,3,4]
console.log(...arr) //1 2 3 4
使用场景----数组取最大值
var arr = [1,23,4,5];
console.log(Math.max(1,23,4,5)) //23 参数形式是可以取到
console.log(Math.max(...arr)) //23 先用...扩展用算符转成参数形式即可
使用场景---数组去重
var aa = [1,2,3,2,4,5,2,3,1];
var bb = [...new Set(aa)] //先Set去重然后...运算符打散最后数组[]
console.log(bb) //[1,2,3,4,5]
#4、函数的扩展
##4.1 函数传递参数默认值设置
ES5写法:
function add(a,b){
var _b = b === undefined ? 100 : b ;
return a+_b
}
console.log(add(10,0)) ES6写法:
function add(a,b=100){
return a+b
}
console.log(add(10,0))
##4.2函数剩余参数
function fn(a,...r){
console.log(a,r) // 1 [2,3,4,5] ...r扩展运算符合并剩余参数为一个数组
console.log(r) // [2,3,4,5] }
fn(1,2,3,4,5)
##4.3箭头函数
var add = (a,b) => {
return a+b
}
add();
省略写法
var add = (a,b) => a+b //语句只有一句时省略{}和return
var add = (a,b) => ({miaov:3}) //{miaov:3} 想要返回对象需用()包起来
其他变体写法
var add = ()=>{
miaov:for(var i = 0; i<10;i++){
console.log(i)
if(i == 3){
break miaov;
}
}
}
add() 参数只有一个时,可省略()
var add = a => a*100
console.log(add(2)) // 筛选需要的数
var arr = [10,21,32,44,77];
var res = arr.filter(item=> item >21)
console.log(res) 箭头函数注意事项:
(1).内部this指向window,对于箭头函数修改this指向是没有用的(普通函数随着点击有可能是document,所以非箭头函数要注意this指向问题);
(2).箭头函数内部没有arguments,可用(...r)模拟使用;
(3).箭头函数不能通过new调用,无构造器;
#5、模块化开发
模块开发加type="module",且本地服务访问才生效
<script src="./data.js" type="module"> </script>
import {n} from "./data.js";
##模块化开发语法
第一种 导出变量和函数
var n = 100;
var m = 20;
function(x,y){
return x+y
}
export { n as newN,m,add}
html中使用
import {newN,m,add} from "./a.js"; 第二种 直接导出变量
exprot var n = 200;
import {n} from "./a.js"; 第三种 直接导出函数
exprot function fn(){
console.log(1)
};
import {fn} from "./a.js"; 第四种 默认导出
var n = 100;
var m = 20;
function(x,y){
return x+y
}
export default 1000; import d from "./a.js"; //全部导出
import * as tool from "./a.js"
用法
consoe.log(tool.m,tool.newN,tool.default) 只导入模块
console.log("a.js被加载")
import "./a.js" 模块化注意:
1、引入计算多次,模块只执行加载一次;
2、导出来的值是模块里的值的引用; #6、promise
##promise基础
1、异步编程解决方案;
##promise的基本使用
宏任务先执行,后微任务,最后定时器
var都是宏任务 .then(微任务)
var p = new Promise((resolve,reject)=>{
console.log("实例化...")
return resolve("成功!");
// reject("失败了")
console.log("shibai")
})
p.then((data)=>{
console.log("then",data)
}).catch((data)=>{
console.log(data)
})
使用方法:
Promise.all 全部执行完才返回
Promise.race 返回最先执行完的 #7、其他扩展总结: 之前嵌套的代码可用fn(a,b,c).then(()=>fn(a,b,c)).then(()=>fn(a,b,c))的形式比价简洁易维护了 选择器选取元素
document.getElementById 动态获取元素 会随着元素变化而变化
document.querySelector 静态获取元素 不会随着元素变化而变化 数字加undefined 结果为 NaN 字符串+undefined 结果是拼接起来ssundefined var fn = function(a,b,c){
console.log(arguments) //参数集合
}
fn(1,2,3) document.onclick = fn; //点击html页面即可触发
【前端开发】ES6知识点系统化梳理笔记的更多相关文章
- 1+x 证书 Web 前端开发 MySQL 知识点梳理
官方QQ群 1+x 证书 Web 前端开发 MySQL 知识点梳理 http://blog.zh66.club/index.php/archives/199/
- 前端开发面试知识点大纲--摘自jackyWHJ
前端开发面试知识点大纲:HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应 Ja ...
- 《编写高质量代码:Web 前端开发修炼之道》 笔记与读后感
编写高质量代码:Web 前端开发修炼之道/曹刘阳著. —北京:机械工业出版社,2010.5 第一版 涉及到的知识点: 1. CSS Sprites 在国内很多人叫css精灵,是一种网页图片应用处理方式 ...
- 《编写高质量代码-Web前端开发修改之道》笔记--第二章 团队合作
本章内容: 揭秘前端开发工程师 欲精一行,必先通十行 增加代码的可读性--注释 提高重用性--公共组件和私有组件的维护 冗余和精简的矛盾--选择集中还是选择分散 磨刀不误砍柴工--前期的构思很重要 制 ...
- 《编写高质量代码-Web前端开发修改之道》笔记--第一章 从网站重构说起
本章内容: 糟糕的页面实现,头疼的维护工作 Web标准--结构.样式和行为的分离 前端的现状 打造高品质的前端代码,提高代码的可维护性--精简.重用.有序 糟糕的页面实现,头疼的维护工作 工作中最大的 ...
- 前端读者 | ES6知识点概述
本文来自 @羯瑞 整理 ES6,并不是一个新鲜的东西,ES7.ES8已经赶脚了.但是,东西不在于新,而在于总结. 变量的新定义 let 和 const 在ES6没有被普及时,我们会用的变量定义的方法是 ...
- 『编写高质量代码Web前端开发修炼手册』读书笔记--高质量的CSS
1.怪异模式和DTD 标准模式:浏览器根据规范表现页面 怪异模式:模拟老浏览器行为防止老站点无法工作(为了兼容老式浏览器的代码),如果漏写DTD(Document Type Definition文档定 ...
- Web前端开发--JS技术大梳理
什么是JS JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语 ...
- 读《编写高质量代码-Web前端开发修炼之道》笔记
第一章 1.Web标准由一系列标准组合而成,核心理念是将网页的结构,样式和行为分离,所以分为三大部分:结构标准,样式标准和行为标准.结构标准包括XML标准,XHTML标准,HTML标准:样式标准指CS ...
随机推荐
- Tomcat 目录结构以及相关规范的介绍
目录 安装tomcat tomcat目录结构 tomcat/bin目录 tomcat/conf目录 tomcat/logs目录 JavaEE对项目结构的规范 war包 安装Tomcat 参考:安装Ja ...
- sorry, unimplemented: non-trivial designated initializers not supported
将C语言转换为C++代码时,发生如下错误 sorry, unimplemented: non-trivial designated initializers not supported. 查找原因,是 ...
- declaration of 'int ret' shadows a parameter
定义的变量名称重复, 例如: int look_up_max(int m, int n) { int m; //... return m; }
- 【PHP】 解决array_filter会过滤0 false的问题
定义和用法 array_filter() 函数用回调函数过滤数组中的元素. 该函数把输入数组中的每个键值传给回调函数.如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组.数组键名保持不 ...
- Centos7 手动编译 RabbitMQ ,并安装php amqp
RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统,底层基于Erlang语言. 一:centos7安装RabbitMQ 这玩意儿安装很扯淡,官方推荐rpm安装,rpm安装本身是最简单的 ...
- Swift4.0复习枚举
1.枚举类型: “Swift编程语言中,枚举类型属于值类型,而不是引用类型.” 摘录来自: “大话Swift 4.0”. iBooks. 2.枚举类型和枚举对象的定义: enum Enumeratio ...
- python3传文件到linux服务器然后解压
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import paramiko import time from scp import S ...
- DevOps - DevOps精要 - 落地
1 - 关键问题 如何向不具备相关基础知识的人说明和解释DevOps? 如何在组织和团队中推广和实施DevOps? 2 - 在组织中实施DevOps 在全新的组织或服务开发中,没有既定规则和老旧的习惯 ...
- C# RESTful API
C# RESTful API REST 全称是 Representational State Transfer,有人说它是一种风格,并非一种标准,个人觉得挺有道理.它本身并没有创造新的技术.组件与服务 ...
- win10卸载office2010的工具
本来想装一个高版本的office,于是想先卸载老版本的.结果在win10的应用和功能中,愣是没找到安装的office2010,使用360也找不到,没法卸载. 网上搜了一下,找到一个好工具,micros ...