跳至主要內容

ES5

ES5 发行于2009年,按照ECMAScript命名风格,ES5也被称作ECMAScript 2009, 是JavaScript历史上第一个主要的版本。

严格模式

使用use strict定义代码应该在严格模式下执行,协助写出更加清晰的代码,一定程度上约定代码规范,例如: 禁止使用未声明的变量

use strict只是一个字符串表达式。旧的浏览器如果不理解的话不会抛出错误。

'use strict'
// 抛错,变量未定义
PI = 3.14

// 正常使用
const name = '142vip'
console.log(name)

字符串

charAt方法

使用charAt()方法返回字符串中字符所有的角标位置(Index)值,例如:

const str = 'HELLO'
// 返回 E
str.charAt(1)

多行显示

使用反斜杠\转义,允许多行字符串,例如:

// 转义字符可能支持的不是很好
// const msg = 'Hello \
// Dolly!'

// 更安全的做法
const newMsg = 'Hello ' + 'Dolly!'

trim方法

使用trim()方法可以删除字符串两侧的空格,例如:

const name = '       142vip.cn        '
// 返回 142vip.cn
console.log(name.trim())

数组

isArray方法

Array对象中使用isArray()方法,可以检查对象是否为数组,例如:

const arr = [1, 2, 3]
// 返回 true
Array.isArray(arr)

forEach方法

forEach()方法为每个数组元素调用一次回调函数,可以用来处理数组,例如:

const arr = [1, 2, 3]

const result: number[] = []
arr.forEach((a) => {
  result.push(a * a)
})
// 返回 [1,4,9]
console.log(result)

map方法

filter

reduce

reduceRight()

every()

判断数组中的元素是否全部满足特定函数的情况,返回true | false,全部满足才会返回true,例如:

export const nums = [12, 14, 33, 25, 28]

// 判断数组中的值是否全部超过15的
const over15 = nums.every((num) => {
  return num > 15
})

// 输出 false
console.log(over15)

some()

判断数组中的元素是否存在满足特定函数的情况,返回true | false,部分满足即返回true,例如:

const nums = [12, 14, 33, 25, 28]

// 判断数组中的值是否存在超过15的
const over15 = nums.some((num) => {
  return num > 15
})

// 输出 true
console.log(over15)

indexOf()

定义:

  • indexOf(searchElement: T, fromIndex?: number): number

indexOf()方法支持从数组开头开始查找所有,找到第一个符合条件值的索引(角标),例如:

const stu = ['142vip', 'Lisa', '142vip']

// 输出 0,数组中角标为0对应的就是142vip
console.log(stu.indexOf('142vip'))

// 支持指定起始索引
console.log(stu.indexOf('142vip', 1))

lastIndexOf()

定义:

  • lastIndexOf(searchElement: T, fromIndex?: number): number

lastIndexOf()方法支持从数组结尾开始查找所有,找到第一个符合条件值的索引(角标),例如:

const stu: string[] = ['Tom', 'Lisa', '142vip']

// 输出 2,数组中角标为2对应的就是142vip
console.log(stu.lastIndexOf('142vip'))

// 支持指定起始索引
console.log(stu.lastIndexOf('142vip', 2))

序列化

JSON.parse()

反序列化方法,支持将JSON字符串还原为对象,例如:

const student = JSON.parse('{"name":"142vip","age":18}')

console.log(student)

JSON.stringify()

序列化方法,支持将对象转化为JSON字符串,例如:

const student = {
  name: '142vip',
  age: 18
}

// 序列化为字符串
console.log(JSON.stringify(student))

日期

now()

Date.now()返回自零日期(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数,例如:

// 输出:1702525268142
console.log(Date.now())

toISOString()

toISOString()方法使用 ISO 标准格式将 Date 对象转换为字符串,例如:

const today = new Date()

// 输出:2023-12-14T03:31:56.160Z
console.log(today.toISOString())

toJSON()

toJSON()Date 对象转换为字符串,格式为 JSON 日期。JSON 日期的格式与 ISO-8601 标准相同:YYYY-MM-DDTHH:mm:ss.sssZ,例如:

const today = new Date()

// 输出: 2023-12-14T03:27:50.441Z
console.log(today.toJSON())

获取器和设置器

对象方法

新增了一些对象方法,

Object.create(parent, donor)

// Adding or changing an object property
Object.defineProperty(object, property, descriptor)

// Adding or changing object properties
Object.defineProperties(object, descriptors)

// Accessing Properties
Object.getOwnPropertyDescriptor(object, property)

// Returns all properties as an array
Object.getOwnPropertyNames(object)

// Accessing the prototype
Object.getPrototypeOf(object)

// Returns enumerable properties as an array
Object.keys(object)

函数绑定

尾随逗号

ES5允许在定义对象和数组中使用尾随逗号,对于JSON数据格式是支持尾随逗号,例如:

对象和数组的数据中,最后的一个元素末尾可以跟随逗号。

const person = {
  name: 'Tom',
  age: 18,
}

const arr = [1, 2, 3,]

JSON数据格式末尾不支持尾随逗号。

// 支持
const badStu = '{"name":"Tom", , "age":18}'
JSON.parse(person)

// 不支持
const goodStu = '{"name":"Tom", , "age":18,}'
JSON.parse(person)