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

相关文章
|
18天前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
3月前
|
前端开发 JavaScript
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
99 58
|
6月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
112 1
|
2月前
|
JavaScript 前端开发 开发者
JavaScript基础——JavaScript变量名称命名规范
JavaScript变量命名规范是编写高质量代码的重要部分。通过遵循基本规则、使用常见命名约定并应用最佳实践,可以提高代码的可读性和可维护性。希望本文能帮助开发者在日常编程中更好地理解和应用JavaScript变量命名规范,从而编写出更清晰、更可靠的代码。
97 11
|
2月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
2月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
4月前
|
JavaScript 前端开发 容器
盘点JavaScript中所有声明变量的方式及特性
本文详细介绍了JavaScript中变量定义的多种方式,包括传统的`var`、`let`和`const`,以及通过`this`、`window`、`top`等对象定义变量的方法。每种方式都有其独特的语法和特性,并附有代码示例说明。推荐使用`let`和`const`以避免作用域和提升问题,谨慎使用`window`和`top`定义全局变量,不建议使用隐式全局变量。掌握这些定义方式有助于编写更健壮的JS代码。
74 11
|
6月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
416 62
|
4月前
|
JavaScript 前端开发 开发者
JavaScript字符串的常用方法
在JavaScript中,字符串处理是一个非常常见的任务。JavaScript提供了丰富的字符串操作方法,使开发者能够高效地处理和操作字符串。本文将详细介绍JavaScript字符串的常用方法,并提供示例代码以便更好地理解和应用这些方法。
80 13
下一篇
oss创建bucket