优秀的编程知识分享平台

网站首页 > 技术文章 正文

JavaScript 基础之 ECMAScript5(javascript基础教学)

nanyue 2024-10-23 12:11:03 技术文章 2 ℃

本章目标

  • 了解 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';


使用说明:


  1. 要放在代码的最前面,也就是在 script 标签中的第一行或者某个函数中的第一行,否则会失效
  2. 严格模式可以规范当前 script 标签或者当前函数中的代码,不能规范别的 script 标签中的代码和别的函数


规范的语法:


  1. 不允许隐式声明变量
  2. 禁止函数中的形参重名
  1. 禁止函数中的 this 代表 window


为什么要使用严格模式?


  1. 可以让代码更加规范
  2. 可以让代码运行起来更快,提高运行效率


新增数组方法


我们之前所学的 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);
最近发表
标签列表