网站首页 > 技术文章 正文
本章目标
- 了解 ES5 中新增的严格模式
- 掌握 ES5 中新增的数组方法
- 理解简单类型和复杂类型的区别
本章任务
ES5简介
JavaScript 在产生的时候,年代比较早,当时的Web 需求比较少,所以刚开始的 JavaScript 功能比较少,语法没有特别严谨。随着时代的发展和Web 应用的普及,JavaScript 需要更多的功能,以及更严谨的语法,所以,JavaScript 会有版本的升级。第一版的 JavaScript 是 ECMA 一开始统一了标准以后的版本。我们现在的所使用的语法,大多是 ECMAScript 版本3的语法,简称ES3。到目前为止,已经有了 ES6(ES2015), ES7(ES2016) 等,从 ES6 开始,每年都会更新一个小版本。
每个版本的更新,都需要浏览器支持才能运行,但浏览器不会在 JavaScript 更新之后,立马更新。所以有的版本出来之后,需要在很长时间之后,浏览器才会兼容他。有一些工具可以把最新版本的语法进行降级处理。
ES5比起我们所正在使用的 ES3,语法没有什么变化,新增了一些功能。
- 增加了严格模式
- 新增了一些数组的方法
- 新增了一些 Object 的方法
- 新增了 JSON 的处理对象
- 函数的 bind 方法
严格模式
由于 JavaScript 的作用域和隐式声明变量等语法会造成很多预想不到的错误,所以ES5中新增了一个严格模式的语法,用于严格规范代码的书写。例如:变量不定义直接直接使用。
function fn () {
a = 5;
console.log(5);
}
fn();
console.log(a);
相当于在全局作用域中使用 var 定义了变量 a。为了避免类似的不规范的语法,可以开启严格模式,语法如下:
'use strict';
使用说明:
- 要放在代码的最前面,也就是在 script 标签中的第一行或者某个函数中的第一行,否则会失效
- 严格模式可以规范当前 script 标签或者当前函数中的代码,不能规范别的 script 标签中的代码和别的函数
规范的语法:
- 不允许隐式声明变量
- 禁止函数中的形参重名
- 禁止函数中的 this 代表 window
为什么要使用严格模式?
- 可以让代码更加规范
- 可以让代码运行起来更快,提高运行效率
新增数组方法
我们之前所学的 indexOf()、lastIndexOf() 是ES5中新增的方法。ES5中新增的 API 现代浏览器已经全部支持,基本不需要再考虑兼容性的问题,可以直接使用。
forEach方法
用于遍历数组
语法:
arr.forEach(function(值, 下标, 当前数组){
// 代码段
});
# 在这个方法中需要传入一个函数参数,这个函数的参数说明如下:
# 参数1:数组遍历出来的每个值
# 参数2:可选项。数组遍历出来的每个值对应的下标
# 参数3:可选项。被遍历的当前数组
例:
let arr = [1, 2, 3, 4, 5];
arr.forEach (function(x, index, a){
console.log(x + '|' + index + '|' + (a === arr));
});
// 输出为:
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true
使用说明:
这个方法没有返回值,返回值为 undefined,不会改变原来数组的值。
map方法
遍历数组,并将每个元素经过函数处理后,形成新的元素,所有新元素组成新数组返回
语法:
arr.map(function(值,下标,当前数组){
return 新的值 - 通常新的值是由旧的值处理以后得到
});
例:
let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25]
使用说明:
这个方法主要用于以同样的规则处理数组中的每个值,并组成新的数组返回
filter方法
将数组中满足指定条件的值,组成新的数组返回
语法:
arr.filter(function(值, 下标, 当前数组){
return 筛选条件
});
例:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let arr2 = arr.filter(function(v, index) {
return v>5
});
console.log(arr2); //[6, 7, 8, 9, 10]
使用说明:
使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回true或false来筛选元素
除了上述方法以外还有:
- arr.some()
- arr.every()
- arr.reduce()
- Array.isArray()
简单类型和复杂类型的区别
基本类型又叫做值类型,复杂类型又叫做引用类型
值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。
引用类型:复杂数据类型,在存储是,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。
- 堆和栈
堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。
2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收。
- 注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来讲解,目的方便理解和方便以后的学习。
基本类型在内存中的存储
复杂类型在内存中的存储
基本类型作为函数的参数
复杂类型作为函数的参数
// 下面代码输出的结果?
function f1 (person) {
person.name = "ls";
person = {
name: 'ls',
age: 20,
salary: 20000
}
}
let p = {
name: 'zs',
age: 18,
salary: 10000
}
console.log(p.name);
f1(p);
console.log(p.name);
思考:
//1.
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1);
console.log(num2);
//2.
var num = 50;
function f1(num) {
num = 60;
console.log(num);
}
f1(num);
console.log(num);
猜你喜欢
- 2024-10-23 ECMAScript 6的历史和未来前景展望
- 2024-10-23 JavaScript 引擎基本原理:Shapes 和 Inline Caches
- 2024-10-23 Vue进阶(四十二):var、let、const三者的区别
- 2024-10-23 JavaScript编程基础2(javascript编程工具)
- 2024-10-23 什么是ESLint?(什么是血糖)
- 2024-10-23 前端三剑客:HTML、CSS 和 JavaScript
- 2024-10-23 JavaScript 后端开发者必须跨的 10 道门槛
- 2024-10-23 ECMAScript 2023 新特性解读,附代码示例
- 2024-10-23 带你走进JavaScript世界系列——window对象和全局作用域
- 2024-10-23 前端基础:ECMAScript 6(前端基础笔试题及答案)
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)