ES5 ES6一
一.ES5
ES(ECMA Script) 常见的版本 ES3(最基础版本 所有浏览器都能解析) ES5(2009年12月发布 部分低版本浏览器不能解析) ES6(2015年发布 大部分的不能直接解析)
ES5的增强内容
// 严格模式 es5新增模式
“use strict” // 表示当前使用的是严格模式 没有书写采用的是怪异模式
严格模式
- 变量命名必须有修饰符
- this指向 在函数内部不能指向window 返回undefined
- 函数内部arguments数组的形参不会改变
- 不允许在非函数的代码块内声明函数
- 禁止八进制
数组新增方法
forEach
map
some
every
filter
reduce / reducRight
indexOf()
lastIndexOf()
bind绑定对象this指向
var obj = {
name: 'jack'
}
// 属于window
var name = {
name: 'tom'
}
function sayHi () {
console.log(this.name)
}
sayHi() // tom
var say = sayHi.bind(obj)
say() // jack bind的返回值也是一个对象
// 绑定this指向-自动执行 第1个参数指定this指向 第2个参数为函数需要的参数-为数组
sayHi.apply(obj, null)
// 绑定this指向-自动执行 第1个参数指定this指向 第2个参数为函数需要的参数-为1个个元素
sayHi.call(obj, null)
二.ES6
ES6诞生于2015年6月 对应函数对象和string 数组做了全套加强
<script type="module">es6代码<script>
命名修饰符
弥补var关键字不足 使我们代码更加规范
-
var声明的是伪全局作用域(变量提升) 不满足于作用域的规则
-
let关键字
- 声明的是块级作用域
- 同一作用域不能重复声明
2.1 let作用
1.防止全局变量泄露
2.防止变量提升带来的覆盖问题
-
const关键字 修饰为常量不可变 定义名建议全大写
- 不允许二次赋值
- 定义常量时必须赋值
string新增方法
// includes 是否包含,返回boolean类型
str.includes()
// startWith 开头是否包含 第2个参数表示开始的下标-默认是0
str.startWith()
// endWith 结尾是否包含 第2个参数表示结束的下标-默认是0
str.endWith()
// repeat 重复n次
str.repeat(n)
数组新增静态方法和高阶函数
<ul>
<li></li>
<li></li>
</ul>
<script>
// Array.from() 将伪数组转为数组
var liList = document.querySelectAll('li')
Array.from(liList)
</script>
// Array.of() 将对应一组数据转为数组
var arr = Array.of(1, 3, 4, 5)
// find 高阶函数-参数是函数 返回第1个匹配的元素
var arr = [3, 5, 6, 7, 1]
arr.find(function (item, index, arr) {
return item == 'a'
})
// findIndex() 高阶函数-参数是函数
arr.find(function(item, index, arr) {
return item == 5
})
循环新增内容
var obj = {
name: 'jack',
age: 18,
}
var arr = [33, 44, 11, 22, 66]
// for in 遍历对象
for (var item in obj) {
console.log(item) // 遍历对象取到键
console.log(obj[item])
}
for (var item in arr) {
console.log(item) // 遍历数组取到下标,存在一定问题增删会改变下标 不建议使用
}
// for of 遍历数组
for (var item of arr) {
console.log(item) // 遍历数组取到值 不能遍历没有迭代器的对象
}
/* Object对象方法 */
// Object.entries(obj) 获取每个元素 包含键和值 返回1个二维数组
// Objec.keys() 获取对象的所有键
// Object.values() 获取对象所有值
for (var kv of Object.entries(obj)) {
console.log(kv) // [key, value] 二维数组
}
function加强
对应默认参数 (支持没传值的时候有1个默认值)
// 如果没传name默认值是'hello' 后续封装函数一定要用到
function sayHi (name = 'hello') {
console.log(name)
}
箭头函数
// 箭头函数 匿名函数
var fn = function() { // 匿名函数
console.log('sayk')
}
fn() //调用匿名函数
var sayhi = () => { // 箭头函数
console.log('sayk')
}
sayhi()
// 箭头函数 1个形参可以省略()
// 函数只有1句代码 {}可以省略
var say = name => console.log(name)
// 当你需要return数据的时候 函数只有1句代码 return也可以省略
var sayHi = name => name
- 箭头函数没有this 指向父级作用域this
- 没有arguments伪数组
拓展运算符
// ... 打开数组 需要的时候默认会用','分割
var newArr = [...arr, ...arr1, arr2]
console.log(...[a, b, c]) // a b c 一般不会有','
解构对象
var obj = {
name: '王五',
age: 19,
}
// 解构 减少obj.
var {name, age, sex} = obj // 比对obj是否有相同的属性
如果没有返回undefined, 有就返回对应的值
console.log(name) //’王五'
console.log(age) // 19
console.log(sex) // undefined
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构