JS基本变量,常用方法,this,正则

简介: JS基本变量,常用方法,this,正则

数据类型检验

image.png

typeof

识别值类型,函数,typeof null object

字符串

charAt

image.png

substring

image.png
image.png
a可以大于b,会自动换成小的在前

substr

image.png
省略第二个参数和substring一样

image.png

slice

image.png

image.png

image.png

大写,小写

image.png

indexOf

image.png

数据类型转化

Number

NAN==NAN false
image.png
image.png

  • Number({ }) //NaN
  • Number([ ])//0

    parseInt

image.png

parseFloat

image.png

String

image.png

toString

image.png

image.png

Boolean

image.png

  • Boolean({ }) //true
  • Boolean([ ]) //true

    js

image.png

image.png
image.png

短路运算

主要是看前一个决定了结果,就返回前一个,否则就返回后一个

逻辑运算符非>与>或
image.png

image.png

image.png

运算顺序:非运算→数学运算-→关系运算→逻辑运算(&&>||)

数组方法

image.png
shift pop 返回值是删除的值

slice

image.png

image.png

splice

image.png

image.png

join split

image.png

字符串可以使用中括号

image.png

concat

image.png

reverse

image.png

indexOf includes

image.png
对于这两个方法数组里有22,搜索‘22’不会有结果因为是使用===判断的

冒泡排序

image.png

复杂数据类型

image.png

image.png

深克隆、浅克隆

利用forin 浅拷贝

image.png

深拷贝

function deepClone(o) {
   
   
  if (Array.isArray(o)) {
   
   
    let result = []
    for (const key in o) {
   
   
      result.push(deepClone(o[key]))
    }
    return result
  } else if (typeof o == 'object') {
   
   
    let result = {
   
   }
    for (const key in o) {
   
   
      result[key] = deepClone(o[key])
    }
    return result
  } else {
   
   
    return o
  }
}
const a = {
   
   
  b: '123',
  c: {
   
   
    d: 4,
    r: 5,
  },
  f: [1, 2, 3, 4, 5],
}
let copy = deepClone(a)
a.c.d = 999
a.f[0]=666
console.log(copy)
console.log(a)

上下文

函数的上下文由调用函数的方式决定

image.png

规则一

image.png
image.png

规则二

image.png

image.png

规则三

image.png

image.png

规则四立即执行函数

image.png

image.png

规则五,定时器,延时器里面那个函数的this指向

image.png

image.png

image.png

规则六

image.png
备份上下文

image.png

image.png

定时器内使用箭头函数,this是包裹箭头函数的父函数的this指向,要注意父函数是不是箭头函数

const obj = {
    num: 10,
    outf: outFun
}

function outFun() {
    console.log('outFun', this); // obj

    setTimeout(function() {
        console.log('outFun', this); // window
    });

    setTimeout(() => {
        console.log('outFun', this); // obj
    });
}
obj.outf();
const obj = {
   
   
    num: 10,
    outf: outFun
}
const outFun = () => {
   
   
    console.log('outFun', this); // window

    setTimeout(function() {
   
   
        console.log('outFun', this); // window
    });

    setTimeout(() => {
   
   
        console.log('outFun', this); // window
    });
}
obj.outf();

call applay

image.png

image.png

image.png

用new调用函数

image.png

构造函数

image.png
什么是构造函数

  • 用new调用一个函数,这个函数就被称为"构造函数”,任何函数都可以是构造函数,只需要用new调用它
  • 顾名思义,构造函数用来"构造新对象”,它内部的语句将为新对象添加若干属性和方法,完成对象的初始化
  • 构造函数必须用new关键字调用, 否则不能正常工作,正因如此,开发者约定构造函数命名时首字母要大写

    如果不用new调用构造函数

image.png
全局this window

构造函数中的this不是函数本身,this是那个秘密创建的空对象

image.png

什么是prototype

  • 任何函数都有prototype属性
  • prototype属性值是个对象,它默认拥有constructor属性指回函数

image.png

  • 构造函数的prototype是实例的原型
    image.png

    has0wnProperty / in

    has0wnProperty方法可以检查对象是否真正“自己拥有某属性或者方法既不是从原型链上的获取的属性或方法
xiaoming.hasOwnProperty('name');
// true
xiaoming . hasOwnProperty('age');
// true
xiaoming.hasOwnProperty('sex');
// true
xiaoming. hasOwnProperty('nationality');
// false

in运算符只能检查某个属性或方法是否可以被对象访问,不能检查是否是自己的属性或方法

'name' in xiaoming // true
'age' in xiaoming // true
'sex' in xiaoming // true
'nationality' in xiaoming // true

将方法写到prototype上

把方法直接添加到实例身上的缺点:每个实例和每个实例的方法函数都是内存中不同的函数,造成了内存的浪费

image.png
image.png\
返回TRUE

原型链的终点

image.png
数组

image.png

利用原型链实现继承

image.png

image.png

包装类

image.png

image.png

image.png

Math

image.png

image.png

image.png
求数组最大值 Math.max(...arr)

image.png

Data

image.png

正则

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png
image.png

相关文章
|
10天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
22天前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
9天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
9天前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
11天前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
11天前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
9天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
25 7
|
11天前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
10天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
15天前
|
JavaScript 前端开发 Go
异步加载 JS 的方法
【10月更文挑战第24天】异步加载 JavaScript 是提高网页性能和用户体验的重要手段。通过使用不同的方法和技术,可以实现灵活、高效的异步加载 JavaScript。在实际应用中,需要根据具体情况选择合适的方法,并注意处理可能出现的问题,以确保网页能够正常加载和执行。