【JAVASCRIPT】

关于JS

  • JavaScript是一门解释型语言,所谓解释型值语言是指不需要被编译为机器码在执行,而是直接执行。

  • JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,现在个整型,下一时刻可能会变成字符串了。

  • 类似于 C 和 Java 的语法结构
    JavaScript的语法结构与C和Java很像,向for、if、while等语句和Java的基本上是一模一样的。

  • Java也是一门面向对象的语言,但是JavaScript是基于原型的面向对象

  • 严格区分大小写

数据类型

1.原始值

  • Number

    • 大–>近似值 infinity无穷
    • 非法数值NaN
    • typeof->“number”
  • BigInt 大整数

    • 大整数用来表示一些比较大的整数
    • 大整数使用n结尾,它可以表示的数字范围是无限大
      typeof ->“bigint”
  • 字符串

    • 模板字符串
    • typeof->“string”
  • 布尔值

    • typeof->“boolean”
  • 空值

    • typeof->“object”
  • 未定义Undefined

    • typeof->“undefined”
  • Symbol(唯一符号)

    • typeof->“symbol”

2.对象

对于上述基本类型 有对应的包装类 
但他们进行类型转化的时候
他们就会临时转化为对应的包装类 
从而可以调用其中的方法 

对于页面来说 一切都是对象
最大的对象是object
在页面里 window代表整个视口
而document表示整个页面 通过dom(文档对象模型)可以实现动态修改页面 让页面有行为

 实现方式:
 1.对象字面量
 let 对象名={
        属性名:属性值,
        [属性名]:属性值,
        对象名:{},
        }
 2.类实例
 class 类名 {}
 const 类名 = class {}
 let 对象名=new 类名

对于new的理解:
当使用new去调用一个函数时,这个函数将会作为构造函数调用
使用new调用函数时,将会发生这些事:
创建一个普通的JS对象(Object对象 {}), 为了方便,称其为新对象
新对象的隐式原型=构造函数的显示原型
使用实参来执行构造函数,并且将新对象设置为函数中的this
如果构造函数返回的是一个非原始值,则该值会作为new运算的返回值返回(千万不要这么做) 如果构造函数的返回值是一个原始值或者没有指定返回值,则新的对象将会作为返回值返回 通常不会为构造函数指定返回值

OOP

JS的ocp思想

同其他语言
js也是有三大特性 封装 继承 多态

  • ocp开闭原则
    • 程序应该对修改关闭,对扩展开放
    • 子类可以重写父类的同名方法
    • 子类重写构造函数,需要在里面super(…)调用下父类的构造器

对象的结构

  • 对象自身

    • 直接通过对象所添加的属性,位于对象自身中
    • 在类中通过 x = y 的形式添加的属性,位于对象自身中
  • 原型(prototype)

    • 在对象中会有一个属性用来存储原型对象,这个属性叫做proto(隐式原型)

    • 原型对象也负责为对象存储属性,当我们访问对象中的属性时,会优先访问对象自身的属性,对象自身不包含该属性时,才会去原型对象中寻找

    • 会添加到原型对象中的情况:

      • 在类中通过xxx(){}方式添加的方法,位于原型中
      • 主动向原型中添加的属性或方法

对于原型的理解:
继承关系链===原型链
所有的同类型对象它们的原型对象都是同一个,也就意味着,同类型对象的原型链是一样的
原型就相当于是一个公共的区域,可以被所有该类实例访问,可以将该类实例中,所有的公共属性(方法)统一存储到原型中 (这样我们只需要创建一个属性,即可被所有实例访问)

关于浅拷贝和深拷贝:
区别:浅拷贝基本类型之前互不影响,
引用类型其中一个对象改了地址,
就会影响另一个对象。
深拷贝改变新对象不会影响原对象,
他们之前互不影响.
浅拷贝就是复制一层,深拷贝是所有层或多层
const arr3 = structuredClone(arr)   // 专门用来深拷贝的方法
const obj2 =  JSON.parse(JSON.stringify(obj))  //能使用JSON实现深复制

内建对象

1 .map
存储键值对的数据
(a,b) 其中 a b 可为任何类型

创建:const map=new Map()

方法:
map.size() //获取map中键值对的数量
map.set(key, value) //向map中添加键值对
map.get(key) //根据key获取值
map.delete(key) //删除指定数据
map.has(key) //检查map中是否包含指定键
map.clear() //删除全部的键值对
map.keys() //获取map的所有的key
map.values() //获取map的所有的value
map.forEach((key,value)=>{...}) //遍历map
Array.from(map)
[...map] //将map转换为数组

const m=new Map();
m.set(NaN,0);
m.set(undefined,-1);
m.set("name","小米");
let keys=m.keys();
console.log(keys);
let values=m.values();
console.log(values);
let array=Array.from(m);
console.log(array)
//遍历
for(const entry of m){
    console.log(entry);
}
//解构遍历
for(const[key,value]of m){
    console.log(key,value);
}
m.forEach((key,value)=>{
    console.log(key,value);
})

  1. set
    相当于去重后的数组

实现:
new Set()
new Set(iterable)//iterable可迭代对象
方法

方法:
size()//获取数量
add()//添加元素
has()//检查元素
delete()//删除元素
[...set]//转换为数组
  1. math
    一个数学工具类
方法:
Math.abs() //求一个数的绝对值
Math.min() //求多个值中的最小值
Math.max() //求多个值中的最大值
Math.pow() //求x的y次幂
Math.sqrt() //求一个数的平方根
Math.floor() //向下取整
Math.ceil() //向上取整
Math.round() //四舍五入取整
Math.trunc() //直接去除小数位
Math.random() //生成一个0-1之间的随机数
  1. date

创建:new Date()

直接通过new Date()创建时间对象时,它创建的是当前的时间的对象
可以在构造函数中传递一个表示时间的字符串
字符串的格式:月/日/年 时:分:秒 ,年-月-日T时:分:秒

方法
getFullYear() //获取4位年份
getMonth() //返当前日期的月份(0-11)
getDate() //返回当前是几日
getDay() //返回当前日期是周几(0-6) 0表示周日
getTime() //返回当前日期对象的时间戳
/*时间戳:自1970年1月1日0时0分0秒到当前时间所经历的毫秒数,
计算机底层存储时间时,使用都是时间戳*/
Date.now() //获取当前的时间戳

正则表达式

很多的语言都有正则表达式 可以理解为一个正确的规则 计算机可以提取和识别
提取出来
正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象

创建方式
new RegExp()

可以接收两个参数(字符串) 1.正则表达式 2.匹配模式(i/g 忽略大小写 全局便利)
可以传参数,动态生成正则表达式

使用转义字符
let reg = new RegExp(“\w”, “i”)

使用字面量来创建正则表达式:/正则/匹配模式
let reg = /a/i

正则表达式.test(#字符串)检查字符串是否符合,返回ture/false

正则表达式.exec(#字符串) 获取字符串中符合正则表达式的内容,返回数组(可以通过在正则表达式里加括号的方式进行分组)

不开全局模式此方法只会匹配第一个
开了之后调一次匹配一个,下次调用从上次匹配的结尾开始

let str = "abcaecafcacc"

// 提取出str中符合axc格式的内容
let re = /a(([a-z])c)/ig

let result = re.exec(str)

console.log(result)

while(result){
    console.log(result[0], result[1], result[2])
    result = re.exec(str)
}

垃圾回收

如果一个对象没有任何的变量对其进行引用,那么这个对象就是一个垃圾
垃圾对象的存在,会严重的影响程序的性能
在JS中有自动的垃圾回收机制,这些垃圾对象会被解释器自动回收,我们无需手动处理
对于垃圾回收来说,我们唯一能做的事情就是将不再使用的变量设置为null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值