JavaScript核心基础(李立超2022版)

2024-04-12 19:04

本文主要是介绍JavaScript核心基础(李立超2022版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022年李立超老师最新JavaScript基础主要内容包括:

JS基本语法、变量、数据类型(原始值和类型转换等)、运算符、流程控制语句、对象、

函数(箭头函数、作用域、作用域链、高阶函数、闭包、递归等)、

面向对象(类、属性、方法、构造函数、原型、原型链、旧类等)、

数组(创建、遍历、方法、排序等)、

内建对象(Map、Set、Math、Date、RegExp、JSON等)。

基础语法

变量和标识符

1.JS严格区分大小写

2.变量中并不存储任何值,而是存储值的内存地址!(变量名存储数据的内存地址存在栈中,数据存在堆中)

3.在JS中,使用const声明常量,常量只能赋值一次,重复赋值会报错;在JS中除了常规的常量外,有一些对象类型的数据我们也会声明为常量

4.标识符命名规范:

1. 标识符只能含有字母、数字、下划线、$,且不能以数字开头
2. 标识符不能是JS中的关键字和保留字,也不建议使用内置的函数或类名作为变量名
3. 命名规范:- 通常会使用小驼峰命名法- 首字母小写,每个单词开头大写- maxlength --> maxLength- borderleftwidth --> borderLeftWidth- 类名会使用大驼峰命名法- 首字母大写,每个单词开头大写- maxlength --> MaxLength- 常量的字母会全部大写- MAX_LENGTH

数据类型

数值(Number)-JS中所有的整数和浮点数都是Number类型- JS中的数值并不是无限大的,当数值超过一定范围后会显示近似值- Infinity 是一个特殊的数值表示无穷- 所以在JS中进行一些精度比较高的运算时要十分注意- NaN 也是一个特殊的数值,表示非法的数值大整数(BigInt)- 大整数用来表示一些比较大的整数- 大整数使用n结尾,它可以表示的数字范围是无限大
其他进制的数字:- 二进制 0b- 八进制 0o- 十六进制 0x
typeof 运算符- typeof用来检查不同的值的类型- 它会根据不同的值返回不同的结果
字符串(String)-JS中使用单引号或双引号来表示字符串- 转义字符 \\" --> "\' --> '\\ --> \\\t --> 制表符\n --> 换行- 模板字符串- 使用反单引号 来表示模板字符串- 模板字符串中可以嵌入变量- 使用typeof检查一个字符串时会返回 "string"
布尔值(Boolean)- 布尔值主要用来进行逻辑判断- 布尔值只有两个truefalse- 使用typeof检查一个布尔值时会返回 "boolean"
空值 (Null)- 空值用来表示空对象- 空值只有一个 null- 使用typeof检查一个空值时会返回"object"- 使用typeof无法检查空值
未定义(Undefined)- 当声明一个变量而没有赋值时,它的值就是Undefined- Undefined类型的值只有一个就是 undefined- 使用typeof检查一个Undefined类型的值时,会返回 "undefined"            
符号(Symbol)- 用来创建一个唯一的标识    - 使用typeof检查符号时会返回 "symbol"JS中原始值一共有七种1.Number2.BigInt3.String4.Boolean5.Null6.Undefined7.Symbol
七种原始值是构成各种数据的基石原始值在JS中是不可变类型,一旦创建就不能修改类型转换指将一种数据类型转换为其他类型将其他类型转换为(字符串、数值和布尔值)转换为字符串1.调用toString()方法将其他类型转换为字符串- 调用xxx的yyy方法--> xxx.yyy()- 由于nullundefined中没有toString()所以对这两个东西调用toString()时会报错2.调用String()函数将其他类型转换为字符串- 调用xxx函数--> xxx()- 原理:对于拥有toString()方法的值调用String()函数时,实际上就是在调用toString()方法对于null,则直接转换为"null"对于undefined,直接转换为"undefined"
将其他的数据类型转换为数值1.使用Number()函数来将其他类型转换为数值转换的情况:- 字符串:- 如果字符串是一个合法的数字,则会自动转换为对应的数字- 如果字符串不是合法数字,则转换为NaN- 如果字符串是空串或纯空格的字符串,则转换为0- 布尔值:- true转换为1false转换为0- null 转换为 0- undefined 转换为 NaN2.专门用来将字符串转换为数值的两个方法           parseInt() —— 将一个字符串转换为一个整数- 解析时,会自左向右读取一个字符串,直到读取到字符串中所有的有效的整数- 也可以使用parseInt()来对一个数字进行取整parseFloat() —— 将一个字符串转换为浮点数 - 解析时,会自左向右读取一个字符串,直到读取到字符串中所有的有效的小数
使用Boolean()函数来将其他类型转换为布尔值- 转换的情况:数字:- 0NaN 转换为false- 其余是true字符串:- 空串 转换为 false- 其余是truenullundefined 都转换为 false对象:对象会转换为true- 所有表示空性的没有的错误的值都会转换为false0NaN、空串、nullundefinedfalse

运算符

运算符(操作符)- 运算符可以用来对一个或多个操作数(值)进行运算- 算术运算符:+ 加法运算符- 减法运算符* 乘法运算符/ 除法运算符** 幂运算% 模运算,两个数相除取余数- 注意:算术运算时,除了字符串的加法,其他运算的操作数是非数值时,都会转换为数值然后再运算(自动类型转换)当任意一个值和字符串做加法运算时,它会先将其他值转换为字符串,然后再做拼串的操作可以利用这一特点来完成类型转换 可以通过为任意类型 + 一个空串的形式来将其转换为字符串 其原理和String()函数相同,但使用起来更加简洁
赋值运算符用来将一个值赋值给一个变量=- 将符号右侧的值赋值给左侧的变量??=- 空赋值- 只有当变量的值为nullundefined时才会对变量进行赋值+=- a += n 等价于 a = a + n-=- a -= n 等价于 a = a - n*=- a *= n 等价于 a = a * n/=- a /= n 等价于 a = a / n%=- a %= n 等价于 a = a % n**=- a **= n 等价于 a = a ** n
! 逻辑非- ! 可以用来对一个值进行非运算- 它可以对一个布尔值进行取反操作true --> falsefalse --> true- 如果对一个非布尔值进行取反,它会先将其转换为布尔值然后再取反可以利用这个特点将其他类型转换为布尔值- 类型转换转换为字符串显式转换String()隐式转换+ ""转换为数值显式转换Number()隐式转换+转换为布尔值显式转换Boolean()隐式转换!!&& 逻辑与- 可以对两个值进行与运算-&&左右都为true时,则返回true,否则返回false- 与运算是短路的与,如果第一个值为false,则不看第二个值- 与运算是找false的,如果找到false则直接返回,没有false才会返回true- 对于非布尔值进行与运算,它会转换为布尔值然后运算但是最终会返回原值- 如果第一个值为false,则直接返回第一个值如果第一个值为true,则返回第二个值|| 逻辑或- 可以对两个值进行或运算-||左右有true时,则返回true,否则返回false- 或运算也是短路的或,如果第一个值为true,则不看第二个值- 或运算是找true,如果找到true则直接返回,没有true才会返回false- 对于非布尔值或运算,它会转换为布尔值然后运算但是最终会返回原值- 如果第一个值为true,则返回第一个如果第一个值为false,则返回第二个
==- 相等运算符,用来比较两个值是否相等- 使用相等运算符比较两个不同类型的值时,它会将其转换为相同的类型(通常转换为数值)然后再比较类型转换后值相同也会返回true- nullundefined进行相等比较时会返回true- NaN不和任何值相等,包括它自身
===- 全等运算符,用来比较两个值是否全等- 它不会进行自动的类型转换,如果两个值的类型不同直接返回false- nullundefined进行全等比较时会返回false!=- 不等,用来检查两个值是否不相等- 会自动的进行类型转换
!==- 不全等,比较两个值是否不全等- 不和自动的类型转换

流程控制

使用 {} 来创建代码块,代码块可以用来对代码进行分组,同一个代码中的代码,就是同一组代码,一个代码块中的代码要么都执行要么都不执行letvar-JS中,使用let声明的变量具有块作用域在代码块中声明的变量无法在代码块的外部访问- 使用var声明的变量,不具有块作用域

对象

枚举属性,指将对象中的所有的属性全部获取for-in语句- 语法:for(let propName in 对象){语句...}- for-in的循环体会执行多次,有几个属性就会执行几次,每次执行时,都会将一个属性名赋值给我们所定义的变量- 注意:并不是所有的属性都可以枚举,比如 使用符号添加的属性
对象属于可变类型- 对象创建完成后,可以任意的添加删除修改对象中的属性- 注意:- 当对两个对象进行相等或全等比较时,比较的是对象的内存地址- 如果有两个变量同时指向一个对象,通过一个变量修改对象时,对另外一个变量也会产生影响修改对象- 修改对象时,如果有其他变量指向该对象 则所有指向该对象的变量都会受到影响修改变量- 修改变量时,只会影响当前的变量在使用变量存储对象时,很容易因为改变变量指向的对象,提高代码的复杂度,所以通常情况下,声明存储对象的变量时会使用const注意:const只是禁止变量被重新赋值,对对象的修改没有任何影响方法(method)- 当一个对象的属性指向一个函数,那么我们就称这个函数是该对象的方法调用函数就称为调用对象的方法

函数

函数的定义方式:1.函数声明function 函数名([参数]){语句...}2.函数表达式const 变量 = function([参数]){语句...}3.箭头函数([参数]) => {语句...}
在函数中,可以通过return关键字来指定函数的返回值,返回值就是函数的执行结果,函数调用完毕返回值便会作为结果返回任何值都可以作为返回值使用(包括对象和函数之类)如果return后不跟任何值,则相当于返回undefined如果不写return,那么函数的返回值依然是undefinedreturn一执行函数立即结束箭头函数的返回值可以直接写在箭头后,如果直接在箭头后设置对象字面量为返回值时,对象字面量必须使用()括起来
this- 函数在执行时,JS解析器每次都会传递进一个隐含的参数,这个参数就叫做 this- this会指向一个对象,所指向的对象会根据函数调用方式的不同而不同1.以函数形式调用时,this指向的是window(相当于window对象调用该函数)2.以方法的形式调用时,this指向的是调用方法的对象(相当于该对象调用该方法)- 通过this可以在方法中引用调用方法的对象
箭头函数:([参数]) => 返回值例子:无参箭头函数:() => 返回值一个参数的:a => 返回值多个参数的:(a, b) => 返回值只有一个语句的函数:() => 返回值只返回一个对象的函数:() => ({...})有多行语句的函数:() => {....    return 返回值}
箭头函数没有自己的this,它的this有外层作用域决定,箭头函数的this和它的调用方式无关(如果函数定义在外层,this就是window,与谁调用无关)

面向对象

/* 对象中存储属性的区域实际有两个:1. 对象自身- 直接通过对象所添加的属性,位于对象自身中- 在类中通过 x = y 的形式添加的属性,位于对象自身中2. 原型对象(prototype)- 对象中还有一些内容,会存储到其他的对象里(原型对象)- 在对象中会有一个属性用来存储原型对象,这个属性叫做__proto__- 原型对象也负责为对象存储属性,当我们访问对象中的属性时,会优先访问对象自身的属性,对象自身不包含该属性时,才会去原型对象中寻找- 会添加到原型对象中的情况:1. 在类中通过xxx(){}方式添加的方法,位于原型中2. 主动向原型中添加的属性或方法*/class Person {name = "孙悟空"age = 18// 原型sayHello() {console.log("Hello,我是", this.name)}
}/* 访问一个对象的原型对象对象.__proto__Object.getPrototypeOf(对象)原型对象中的数据:1. 对象中的数据(属性、方法等)2. constructor (对象的构造函数)注意:原型对象也有原型,这样就构成了一条原型链,根据对象的复杂程度不同,原型链的长度也不同p对象的原型链:p对象 --> 原型 --> 原型 --> nullobj对象的原型链:obj对象 --> 原型 --> null原型链:- 读取对象属性时,会优先对象自身属性,如果对象中有,则使用,没有则去对象的原型中寻找如果原型中有,则使用,没有则去原型的原型中寻找直到找到Object对象的原型(Object的原型没有原型(为null))如果依然没有找到,则返回undefined- 作用域链,是找变量的链,找不到会报错- 原型链,是找属性的链,找不到会返回undefined所有的同类型对象它们的原型对象都是同一个,也就意味着,同类型对象的原型链是一样的原型的作用:原型就相当于是一个公共的区域,可以被所有该类实例访问,可以将该类实例中,所有的公共属性(方法)统一存储到原型中这样我们只需要创建一个属性,即可被所有实例访问JS中继承就是通过原型来实现的,当继承时,子类的原型就是一个父类的实例在对象中有些值是对象独有的,像属性(name,age,gender)每个对象都应该有自己值,但是有些值对于每个对象来说都是一样的,像各种方法,对于一样的值没必要重复的创建大部分情况下,我们是不需要修改原型对象注意:千万不要通过类的实例去修改原型1. 通过一个对象影响所有同类对象,这么做不合适2. 修改原型先得创建实例,麻烦3. 危险处理通过__proto__能访问对象的原型外,还可以通过类的prototype属性,来访问实例的原型修改原型时,最好通过通过类去修改好处:1. 一修改就是修改所有实例的原型2. 无需创建实例即可完成对类的修改原则:1. 原型尽量不要手动改2. 要改也不要通过实例对象去改3. 通过 类.prototype 属性去修改4. 最好不要直接给prototype去赋值*/const obj = new Object()// console.log(obj.__proto__)// console.log(Object.prototype)/* instanceof 用来检查一个对象是否是一个类的实例- instanceof检查的是对象的原型链上是否有该类实例只要原型链上有该类实例,就会返回true- dog -> Animal的实例 -> Object实例 -> Object原型- Object是所有对象的原型,所以任何和对象和Object进行instanceof运算都会返回truein- 使用in运算符检查属性时,无论属性在对象自身还是在原型中,都会返回true对象.hasOwnProperty(属性名) (不推荐使用)- 用来检查一个对象的自身是否含有某个属性Object.hasOwn(对象, 属性名) - 用来检查一个对象的自身是否含有某个属性*/

数组

https://www.jb51.net/article/269686.htm

for-of语句可以用来遍历可迭代对象语法: for(变量 of 可迭代的对象){语句...}执行流程: for-of的循环体会执行多次,数组中有几个元素就会执行几次,每次执行时都会将一个元素赋值给变量:for(let value of "hello"){console.log(value)}
Array.isArray()- 用来检查一个对象是否是数组
at()- 可以根据索引获取数组中的指定元素- at可以接收负索引作为参数
concat()- 用来连接两个或多个数组- 非破坏性方法,不会影响原数组,而是返回一个新的数组
indexOf()- 获取元素在数组中第一次出现的索引- 参数:1. 要查询的元素2. 查询的其实位置
lastIndexOf()- 获取元素在数组中最后一次出现的位置- 返回值:找到了则返回元素的索引,没有找到返回-1
join()- 将一个数组中的元素连接为一个字符串- ["孙悟空", "猪八戒", "沙和尚", "唐僧", "沙和尚"] -> "孙悟空,猪八戒,沙和尚,唐僧,沙和尚"- 参数:指定一个字符串作为连接符
slice()- 用来截取数组(非破坏性方法)     - 参数:1. 截取的起始位置(包括该位置)2. 截取的结束位置(不包括该位置)   - 第二个参数可以省略不写,如果省略则会一直截取到最后- 索引可以是负值如果将两个参数全都省略,则可以对数组进行浅拷贝(浅复制)
// 如何去复制一个对象 复制必须要产生新的对象: 当调用slice时,会产生一个新的数组对象,从而完成对数组的复制浅拷贝(shallow copy)- 通常对对象的拷贝都是浅拷贝- 浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层)- 如果对象中存储的数据是原始值,那么拷贝的深浅是不重要- 浅拷贝只会对对象本身进行复制,不会复制对象中的属性(或元素)const arr2 = arr.slice() // 浅拷贝
深拷贝(deep copy)- 深拷贝指不仅复制对象本身,还复制对象中的属性和元素- 因为性能问题,通常情况不太使用深拷贝const arr3 = structuredClone(arr) // 专门用来深拷贝的方法
... (展开运算符)- 可以将一个数组中的元素展开到另一个数组中或者作为函数的参数传递- 通过它也可以对数组进行浅复制const arr3 = [...arr] // 浅拷贝
对象的复制- Object.assign(目标对象, 被复制的对象)- 将被复制对象中的属性复制到目标对象里,并将目标对象返回- 也可以使用展开运算符对对象进行复制const obj2 = Object.assign({}, obj)const obj2 = {...obj}
push()- 向数组的末尾添加一个或多个元素,并返回新的长度
pop()- 删除并返回数组的最后一个元素
unshift()- 向数组的开头添加一个或多个元素,并返回新的长度
shift()- 删除并返回数组的第一个元素
splice()- 可以删除、插入、替换数组中的元素- 参数:1. 删除的起始位置2. 删除的数量3. 要插入的元素- 返回值:- 返回被删除的元素
reverse()- 反转数组
数组去重for(let i=0; i<arr.length; i++){const index = arr.indexOf(arr[i], i+1)if(index !== -1){// 出现重复内容arr.splice(index, 1)i--}}
冒泡排序function sort(array) {const arr = [...array]for (let i = 0; i < arr.length; i++) {for (let j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {// 交换两个元素的位置let temp = arr[i]arr[i] = arr[j]arr[j] = temp}}}return arr}
sort()- sort用来对数组进行排序(会对改变原数组)- sort默认会将数组升序排列注意:sort默认会按照Unicode编码进行排序,所以如果直接通过sort对数字进行排序可能会得到一个不正确的结果- 参数:- 可以传递一个回调函数作为参数,通过回调函数来指定排序规则(a, b) => a - b 升序排列(a, b) => b - a 降序排列
forEach()- 用来遍历数组- 它需要一个回调函数作为参数,这个回调函数会被调用多次数组中有几个元素,回调函数就会调用几次每次调用,都会将数组中的数据作为参数传递- 回调函数中有三个参数:element 当前的元素index 当前元素的索引array 被遍历的数组filter()- 将数组中符合条件的元素保存到一个新数组中返回- 需要一个回调函数作为参数,会为每一个元素去调用回调函数,并根据返回值来决定是否将元素添加到新数组中- 非破坏性方法,不会影响原数组map()- 根据当前数组生成一个新数组- 需要一个回调函数作为参数,回调函数的返回值会成为新数组中的元素- 非破坏性方法不会影响原数组reduce()- 可以用来将一个数组中的所有元素整合为一个值- 参数:1. 回调函数,通过回调函数来指定合并的规则2. 可选参数,初始值闭包:闭包就是能访问到外部函数作用域中变量的函数 可以利用函数,来隐藏不希望被外部访问到的变量
什么时候使用:当我们需要隐藏一些不希望被别人访问的内容时就可以使用闭包
构成闭包的要件:1. 函数的嵌套2. 内部函数要引用外部函数中的变量3. 内部函数要作为返回值返回function outer(){let num = 0 // 位于函数作用域中return () => {num++console.log(num)}}const newFn = outer()newFn()
根据函数调用方式的不同,this的值也不同:1. 以函数形式调用,this是window2. 以方法形式调用,this是调用方法的对象3. 构造函数中,this是新建的对象4. 箭头函数没有自己的this,由外层作用域决定5. 通过call和apply调用的函数,它们的第一个参数就是函数的this
调用函数除了通过 函数() 这种形式外,还可以通过其他的方式来调用函数比如,我们可以通过调用函数的call()和apply()来个方法来调用函数函数.call()函数.apply()- call 和 apply除了可以调用函数,还可以用来指定函数中的this- call和apply的第一个参数,将会成为函数的this- 通过call方法调用函数,函数的实参直接在第一个参数后一个一个的列出来- 通过apply方法调用函数,函数的实参需要通过一个数组传递
根据函数调用方式的不同,this的值也不同:1. 以函数形式调用,this是window2. 以方法形式调用,this是调用方法的对象3. 构造函数中,this是新建的对象4. 箭头函数没有自己的this,由外层作用域决定5. 通过call和apply调用的函数,它们的第一个参数就是函数的this6. 通过bind返回的函数,this由bind第一个参数决定(无法修改)bind() 是函数的方法,可以用来创建一个新的函数- bind可以为新函数绑定this- bind可以为新函数绑定参数箭头函数没有自身的this,它的this由外层作用域决定,也无法通过call apply 和 bind修改它的this 箭头函数中没有arguments

内建对象

1.解构赋值:数组的解构 let [a,b,c] = arr对象的解构赋值 let {a,b,c} = obj
对象的序列化- JS中的对象使用时都是存在于计算机的内存中的- 序列化指将对象转换为一个可以存储的格式在JS中对象的序列化通常是将一个对象转换为字符串(JSON字符串)- 序列化的用途(对象转换为字符串有什么用):- 对象转换为字符串后,可以将字符串在不同的语言之间进行传递甚至人可以直接对字符串进行读写操作,使得JS对象可以不同的语言之间传递- 用途:1. 作为数据交换的格式2. 用来编写配置文字- 如何进行序列化:-JS中有一个工具类 JSON (JavaScript Object Notation) JS对象表示法- JS对象序列化后会转换为一个字符串,这个字符串我们称其为JSON字符串  - 也可以手动的编写JSON字符串,在很多程序的配置文件就是使用JSON编写的- 编写JSON的注意事项:1. JSON字符串有两种类型:JSON对象 {}JSON数组 []2. JSON字符串的属性名必须使用双引号引起来3. JSON中可以使用的属性值(元素)- 数字(Number)- 字符串(String) 必须使用双引号- 布尔值(Boolean)- 空值(Null)- 对象(Object {}- 数组(Array []4. JSON的格式和JS对象的格式基本上一致的,注意:JSON字符串如果属性是最后一个,则不要再加,const str = JSON.stringify(obj) //JSON.stringify() 可以将一个对象转换为JSON字符串const obj2 = JSON.parse(str) // JSON.parse() 可以将一个JSON格式的字符串转换为JS对象
Map- Map用来存储键值对结构的数据(key-value)- Object中存储的数据就可以认为是一种键值对结构- Map和Object的主要区别:- Object中的属性名只能是字符串或符号,如果传递了一个其他类型的属性名,JS解释器会自动将其转换为字符串- Map中任何类型的值都可以称为数据的key  
创建:new Map()
属性和方法:map.size() 获取map中键值对的数量map.set(key, value) 向map中添加键值对map.get(key) 根据key获取值   map.delete(key) 删除指定数据map.has(key) 检查map中是否包含指定键map.clear() 删除全部的键值对	// 将map转换为数组const arr = Array.from(map) // [["name","孙悟空"],["age",18]]const arr = [...map]map.keys() - 获取map的所有的keymap.values() - 获取map的所有的value// 遍历mapfor (const [key, value] of map) {// const [key, value] = entryconsole.log(key, value)}map.forEach((key, value)=>{console.log(key, value)})
Set- Set用来创建一个集合- 它的功能和数组类似,不同点在于Set中不能存储重复的数据- 使用方式:创建- new Set()- new Set([...])方法size 获取数量add() 添加元素has() 检查元素delete() 删除元素
Math- Math一个工具类- Math中为我们提供了数学运算相关的一些常量和方法- 常量:Math.PI 圆周率- 方法:Math.abs() 求一个数的绝对值Math.min() 求多个值中的最小值Math.max() 求多个值中的最大值Math.pow() 求x的y次幂Math.sqrt() 求一个数的平方根Math.floor() 向下取整Math.ceil() 向上取整Math.round() 四舍五入取整Math.trunc() 直接去除小数位Math.random() 生成一个0-1之间的随机数生成0-5之间的随机数Math.random() --> 0 - 1生成 0-x之间的随机数:Math.round(Math.random() * x)Math.floor(Math.random() * (x + 1))生成 x-y 之间的随机数Math.round(Math.random() * (y-x) + x)
Date-JS中所有的和时间相关的数据都由Date对象来表示- 对象的方法:getFullYear() 获取4位年份getMonth() 返当前日期的月份(0-11getDate() 返回当前是几日getDay() 返回当前日期是周几(0-60表示周日......getTime() 返回当前日期对象的时间戳时间戳:自197011000秒到当前时间所经历的毫秒数计算机底层存储时间时,使用都是时间戳Date.now() 获取当前的时间戳
Date-JS中所有的和时间相关的数据都由Date对象来表示- 对象的方法:getFullYear() 获取4位年份getMonth() 返当前日期的月份(0-11getDate() 返回当前是几日getDay() 返回当前日期是周几(0-60表示周日......getTime() 返回当前日期对象的时间戳时间戳:自197011000秒到当前时间所经历的毫秒数计算机底层存储时间时,使用都是时间戳Date.now() 获取当前的时间戳
toLocaleDateString() // 将日期转换为本地的字符串
toLocaleTimeString() // 将时间转换为本地的字符串
toLocaleString()     // 可以将一个日期转换为本地时间格式的字符串- 参数:1. 描述语言和国家信息的字符串zh-CN 中文中国zh-HK 中文香港en-US 英文美国2. 需要一个对象作为参数,在对象中可以通过对象的属性来对日期的格式进行配置dateStyle 日期的风格timeStyle 时间的风格fulllongmediumshorthour12 是否采用12小时值truefalseweekday 星期的显示方式longshortnarrowyearnumeric2-digit
字符串:- 字符串其本质就是一个字符数组- "hello" --> ["h", "e", "l", "l", "o"]- 字符串的很多方法都和数组是非常类似的- 属性和方法:length 获取字符串的长度字符串[索引] 获取指定位置的字符str.at() (实验方法)- 根据索引获取字符,可以接受负索引str.charAt()- 根据索引获取字符str.concat()- 用来连接两个或多个字符串str.includes()- 用来检查字符串中是否包含某个内容有返回true没有返回falsestr.indexOf()str.lastIndexOf()- 查询字符串中是否包含某个内容str.startsWith()- 检查一个字符串是否以指定内容开头str.endsWith()- 检查一个字符串是否以指定内容结尾str.padStart()str.padEnd()- 通过添加指定的内容,使字符串保持某个长度str.replace()- 使用一个新字符串替换一个指定内容str.replaceAll()    - 使用一个新字符串替换所有指定内容str.slice()- 对字符串进行切片str.substring()- 截取字符串str.split()- 用来将一个字符串拆分为一个数组str.toLowerCase()- 将字符串转换为小写str.toUpperCase()- 将字符串转换为大写str.trim()- 去除前后空格str.trimStart()- 去除开始空格str.trimEnd()- 去除结束空格
正则表达式- 正则表达式用来定义一个规则- 通过这个规则计算机可以检查一个字符串是否符合规则或者将字符串中符合规则的内容提取出来- 正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象
new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式   et reg = new RegExp("a", "i") 
使用字面量来创建正则表达式:/正则/匹配模式  reg = /a/i
通过正则表达式检查一个字符串是否符合规则  reg.test("b")1.在正则表达式中大部分字符都可以直接写2.| 在正则表达式中表示或3.[] 表示或(字符集)[a-z] 任意的小写字母[A-Z] 任意的大写字母[a-zA-Z] 任意的字母[0-9]任意数字4.[^] 表示除了[^x] 除了x5. . 表示除了换行外的任意字符6. 在正则表达式中使用\作为转义字符7. 其他的字符集\w 任意的单词字符 [A-Za-z0-9_]\W 除了单词字符 [^A-Za-z0-9_]\d 任意数字 [0-9]\D 除了数字 [^0-9]\s 空格\S 除了空格\b 单词边界\B 除了单词边界8. 开头和结尾^ 表示字符串的开头$ 表示字符串的结尾
量词{m} 正好m个{m,} 至少m个{m,n} m-n个+ 一个以上,相当于{1,}* 任意数量的a? 0-1{0,1}
re.exec()- 获取字符串中符合正则表达式的内容
split()- 可以根据正则表达式来对一个字符串进行拆分
search()- 可以去搜索符合正则表达式的内容第一次在字符串中出现的位置
replace()- 根据正则表达式替换字符串中的指定内容
match()- 根据正则表达式去匹配字符串中符合要求的内容
matchAll()- 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)- 它返回的是一个迭代器
字符串的正则表达式方法:
split()- 可以根据正则表达式来对一个字符串进行拆分
search()- 可以去搜索符合正则表达式的内容第一次在字符串中出现的位置
replace()- 根据正则表达式替换字符串中的指定内容
match()- 根据正则表达式去匹配字符串中符合要求的内容
matchAll()- 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)- 它返回的是一个迭代器

这篇关于JavaScript核心基础(李立超2022版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897976

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python