js高级—基础深入总结

文章目录

    • 1. 数据类型
      • 1.1. 常见数据类型
      • 1.2.数据类型判断:
      • 1.3.underfined与null的区别
      • 1.4.什么时候给变量赋值为null
      • 1.5. 严格区别变量类型与数据类型:
    • 2. 数据变量和内存
      • 2.1. 什么是数据
      • 2.2. 什么是内存
      • 2.3. 什么是变量
      • 2.4.内存、数据、变量三者关系
      • 问题1:var a=xxx,a内存中到底保存的是什么?
      • 问题2:关于引用变量赋值问题
      • 问题3. 在js调用函数时传递变量参数时,是值传递还是引用传递?
      • 问题4. JS引擎如何管理内存
    • 3. 对象
        • 3.1 什么是对象?
        • 3.2 为什么要用对象?
        • 3.3 对象的组成属性
        • 3.4 如何访问对象内部数据?
          • 什么时候必须使用['']方式
    • 4. 函数
        • 为什么要用函数?
        • 如何定义函数?
        • 如何调用函数?
        • 回调函数
        • IIFE

1. 数据类型

1.1. 常见数据类型

1.基本(值)类型: String、Number、boolean、undefined、null、Symbol(es6新增)
2.对象(引用)类型:
object:任意对象
function:一种特别的对象(可以执行)
Array:一种特别的对象(数值下标、内部数据是有序的)

1.2.数据类型判断:

  1. typeof: 返回数据类型的字符串表达,
    • 可以判断undefined、数值、字符串、布尔值、function
    • 不能判断:null与object 、object与array
  2. instanceof:判断引用对象是不是某对象的实例(具体类型)
  3. === / ==:可以判断undefined、null
var b1 = {b2:[1,'atguigu',console.log],b3:function (){console.log('b3')
}}
console.log(b1 instanceof Object,b1 instanceof Array) // true false
console.log(b1.b2 instanceof Array,b1.b2 instanceof Object) // true true
console.log(b1.b3 instanceof Function,b1.b3 instanceof Object) // true true
console.log(typeof b1.b3 === 'function') // true

1.3.underfined与null的区别

underfined代表定义未赋值
null定义赋值了,但值为null

1.4.什么时候给变量赋值为null

初始赋值为null,表明将要赋值为对象,确定对象就赋值;
最后赋值为null(让指向的对象成为垃圾对象被垃圾回收器回收)释放内存

1.5. 严格区别变量类型与数据类型:

  • 数据类型
    • 基本类型
    • 对象类型
  • 变量类型(变量内存值的类型)
    • 基本类型:保存的是基本类型的数据
    • 引用类型:保存的是地址值

2. 数据变量和内存

2.1. 什么是数据

  • 存储在内存中代表特定信息的东西,本质上是0101二进制数据
  • 特点:可传递、可运算

2.2. 什么是内存

内存条通电后产生的可存储数据的空间(临时的),而硬盘的空间是持久的

内存产生和死亡:内存条(电路版)=>通电=>产生内存空间=>存储数据=>处理数据=>断电=>内存空间和数据都消失
  • 释放内存:清空内存中的数据,标识内存可以再分配使用(内存不释放就不能复用)
  • 自动释放:栈空间的局部变量
  • 垃圾回调器回调:堆空间的垃圾对象(没有一个指针指向的时候就是垃圾对象)

内存分类:

  • 栈:全局变量/局部变量
  • 堆:对象

2.3. 什么是变量

可变化的量,由变量名和变量值组成;
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
变量名就是内存地址的别名

var obj={name:'Tom'};var a=obj
obj读的是内容,但内容是一个地址

在这里插入图片描述

2.4.内存、数据、变量三者关系

内存是用来存储数据的空间

问题1:var a=xxx,a内存中到底保存的是什么?

xxx如果是基本数据,保存的就是这个数据;
如果是对象,保存的就是对象的地址值;
如果是一个变量,保存的是xxx的值(基本数据或地址值)

问题2:关于引用变量赋值问题

  • 几个引用变量指向同一个对象(引用变量指向的都是同一个地址值),其中一个变量修改数据其他变量的数据也会改变
  • 2个变量指向同一个对象,让其中的一个引用变量指向另一个引用对象,另一个引用变量依然指向前一个对象
var a={age:12]
var b=a  前两行a和b都指向同一个地址值的堆
a={name:'BOB'] 这里a指向先前的地址改变了,重新指向了name这块地址;而b还是不变,因此b只有age,没有name
console.log(b.age)

2:结果是13;函数里就相当于 var obj = a; obj = {age:15};在调用完函数后函数内部的局部变量会被释放
在这里插入图片描述

问题3. 在js调用函数时传递变量参数时,是值传递还是引用传递?

理解1:值(基本/地址值)传递(把传参的值传递给形参)
理解2:可能是值传递也可能是引用传递(实参传给形参的值根据自身而定,实参如果是一个对象,传递的就是地址值)

	var a=3;function fn(a){a=a+1;}fn(a);console.log(a);//3

问题4. JS引擎如何管理内存

  • 内存生命周期:
    分配小内存空间,得到他的使用权 存储数据,可以反复进行操作
    释放小内存空间
    var a=3;obj={};obj=null占两个内存空间,{}对象被释放掉了

  • 释放内存
    局部变量:函数执行完自动释放
    对象:成为垃圾对象==>垃圾回收器回收

3. 对象

3.1 什么是对象?

代表现实中的某个事物,是该事物在编程中的抽象
多个数据的集合体(封装体)
用于保存多个数据的容器

3.2 为什么要用对象?

便于对多个数据进行统一管理

3.3 对象的组成属性

代表现实事物的状态数据
属性:由属性名(字符串类型)和属性值组(任意类型)组成
方法:一种特殊属性,属性值是函数
代表现实事物的行为数据

3.4 如何访问对象内部数据?

.属性名: 编码简单,但有时不能用
[‘属性名1’]: 编码麻烦,但通用

什么时候必须使用[‘’]方式

1.属性名包含特殊字符:- 空格
2.变量名不确定(属性名是个变量)

yar propName ='myAge'
var value =18//p.propName value //不能用
p[propName]=value

4. 函数

实现具有特定功能的封装体

为什么要用函数?

提高代码复用

如何定义函数?

函数声明、表达式

如何调用函数?

1.test():直接调用
2.obj,test():通过对象调用
3.new test():new调用
4.test.call/apply(obj):临时让test成为obj的方法进行调用

回调函数

自己定义一个函数,没有自己调,系统去帮你调用,这就是回调函数

常见的回调函数:
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数

IIFE

立即调用函数表达式(匿名函数自调用)
作用:1.隐藏内部实现
2.不会污染外部(全局)命名空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【科普向】【文末附gpt升级秘笈】人工智能领域的风云变幻:从OpenAI到Anthropic的人才流动与技术走向

人工智能领域的风云变幻:从OpenAI到Anthropic的人才流动与技术走向 摘要:人工智能领域的竞争日趋激烈,技术巨头间的人才流动和团队重组成为常态。本文通过分析OpenAI前首席安全研究员Jan Leike加入Anthropic公司这一事件,探讨人工…

socks5 如何让dns不被污染

问题 发现firefox浏览器代理设置成socks5后,查看ip是成功了,但是谷歌等海外的还是无法正常访问。 原因 主要原因是socks5连接虽然是成功了,但是dns还是走国内的,国内的dns解析都被污染了导致没法正常访问 解决 把设置里的 使…

图数据集的加载

原文参考官方文档: https://pytorch-geometric.readthedocs.io/en/latest/modules/loader.html torch_geometric.loader 库中, 该库中包含了多种 图数据集的 加载方式, 这里主要介绍 DenseDataLoader and DataLoader 这两者之间的区别&#…

每日一题——力扣141. 环形链表(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方法2&#x…

概率论与数理统计,重要知识点——全部公式总结

二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计

WSDM2024推荐系统和LLM相关论文整理(二)

WSDM 2024接收的论文已经公布,全部收录的论文可前往地址 网址:https://www.wsdm-conference.org/2024/accepted-papers/ 其中推荐系统相关论文三十余篇,下文列举了部分论文的标题以及摘要,更多内容欢迎关注公众号【深度学习推荐算…

Stable Diffusion AI绘画:从创意词汇到艺术图画的魔法之旅

文章目录 一、Stable Diffusion的工作原理二、从提示词到模型出图的过程三、Stable Diffusion在艺术创作中的应用《Stable Diffusion AI绘画从提示词到模型出图》内容简介作者简介楚天 目录前言/序言本书特色特别提示 获取方式 在科技的飞速发展中,Stable Diffusion…

Java-----Comparable接口和Comparator接口

在Java中&#xff0c;我们会经常使用到自定义类&#xff0c;那我们如何进行自定义类的比较呢? 1.Comparable接口 普通数据的比较 int a10;int b91;System.out.println(a<b); 那自定义类型可不可以这样比较呢&#xff1f;看一下代码 我们发现会报错&#xff0c;因为自定义…

LNMP分布式搭建

一、准备三台主机 192.168.100.11 mysql 192.168.100.12 nginx 192.168.100.13 php 二、关闭防火墙及安全策略 systemctl stop firewalld setenforce 0 三、安装nginx&#xff08;192.168.100.11&#xff09; 1、添加nginx源 vim /etc/yum.repos.d/ng…

618必备好物选购清单有哪些?五款精品好物分享

618将近&#xff0c;很多好物都会在这段时间搞活动&#xff0c;许多朋友会在这个时候置办或者置换家居&#xff0c;那么&#xff0c;2024年的618有哪些值得入手的好物呢&#xff1f;今天&#xff0c;将与大家分享一些精选好物&#xff0c;这些好物在618入手绝对是个不错的选择。…

Unity中模拟生成正态分布的一种方式

using System; using System.Collections; using System.Collections.Generic; using Unity.Mathematics; using UnityEngine;public class MathFunction : MonoBehaviour {private void Start(){//key 范围 0-99 表示 0% 到 99%Dictionary<int,uint> m new Dictionary&…

【Linux】文件系统和软硬链接

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

redux相关源码

1、createStore 实现 2、connct实现 3、bindActionCreators实现 4、Provider实现 5. thunk

html+css web前端 多边形

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>多边形</title><style type"text/css">#pentagon_6_1 {position: absolute;top: 0px;height: 0; width: 100; border-left: 100px solid rgb(255, 255…

【记忆化搜索 】2312. 卖木头块

本文涉及知识点 记忆化搜索 LeetCode2312. 卖木头块 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每…

网络四层、七层协议

一、OSI七层模型 物理层&#xff1a;建立、维护、断开物理连接。 数据链路层&#xff1a;逻辑连接、寻找硬件地址——地址解析协议&#xff1a;ARP、PARP 反向地址转换协议 网络层&#xff1a;寻找逻辑地址&#xff0c;实现不同网络之间的路径选择——ICMP(互联网控制信息协议…

Vue前端平台的搭建

文章目录 前端平台搭建(`Vue2.6`,App:`HBulderX`)创建`Vue2.6`项目下载相应插件方便开发路由配置对连接后端进行一些配置(`main.js`文件)导入ElementUI组件[组件 | Element](https://element.eleme.cn/#/zh-CN/component/icon)同步与异步`axios`异步请求框架前端平台搭建(Vue2.…

YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…

windows 在cmd 使用cd命令无法进入指定目录解决方法

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用cmd命令想要快速进入某个目录&#xff0c;发现没有跳转&#xff0c;如下&#xff1a; 二、原因分析 cmd 切换目录跨磁盘的话&#xff0c;需要先进行磁盘的转换&#xff0c;也就是要进入到另外一…

使用pkg打包了一个使用了sqlite3的nodejs项目,启动后闪退

从截图来看&#xff0c;问题出在 sqlite3 模块上。说明在打包过程中&#xff0c;sqlite3 模块的 .node 文件没有正确加载。 紧急解决方法&#xff1a; 其实就是exe文件还需要node_modules中的sqlite3 依赖&#xff0c;我们直接在系统顶级放一个node_modules&#xff0c;且其中只…