JS的基本内容

JS中的六中数据类型字符型,数值型,布尔型,Null,undefined和对象Object:符合数据类型,对象是属性和方法的集合甚至是另一种类型的对象。

基本数据类型数值、字符串、null、undefined、布尔(es6:BigInt ,Symbol)

(对于基本数据类型参与运算它的值本身是不能被修改的)

引用数据类型对象、数组、函数 (object,array,function,data,regExp规则)

基本数据类型和引用数据类型的区别:

声明变量时的存储分配【

原始值存储在栈中的简单数据段,它们的值直接存储在变量访问的位置;(将原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量但是完全独立的拥有相同的值

引用值存储在堆中对象存储在变量处的值是一个指针,指向存储对象的内存地址。(将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是这两个变量都指向了堆内存中同一个对象,它们中任何一个做的改变都会反映在另一个变量)

不同的内存分配机制也带来了不同的访问机制:js中不允许直接访问保存在堆内存中的对象,所以我们访问一个对象时,首先得到是这个对象在的内存地址,然后按照这个地址获取这个对象的值,这个也就是所说的按引用访问,而原始类型的值可以直接访问到的

JS变量的定义统一使用var声明,会在需要的时候自动转型,可以先声明然后赋值通常以;号结尾这是个好习惯。

作用域:执行环境中变量或函数的作用范围分为三类:

全局作用域页面打开时创建关闭时销毁

编写在Script标签中的变量和函数在页面的任何位置都可以访问

全局作用域可以被认为是window,因为所有的全集变量和函数都是作为window对象的属性和方法创建的。

局部(函数)作用域:调用时创建,执行完毕销毁,每调用一次创建一个新的,它们之间互不干扰。函数可以访问上层定义的内容但是相邻函数作用域是相互独立的。

ES6之前没有块级作用域是指:定义的对象是全局的windows可查

eg: if (ture){var a =1}console.log(a)能在检测到a的值为1

但是ES6中的话 if(true){let x=1}console.log(x)这种情况是全局访问不了x的值的。

作用域链带scope用途是保证对着执行环境有权访问的所有变量和函数的有序访问。

关于作用域链主要就是进行标识符的查询(变量和函数)标识符的解析就是沿着作用域一级一级的搜索标识符的过程。如果自身作用域中声明该变量就不用使用作用域链

JS的预编译:

预编译是在上下文创建之后js代码执行前的一段时期,在这个时期,会对Js代码进行预处理。全局创建之后会生成会生成变量对象VO,首先寻找变量说明,将var声明的变量作为VO的对象的属性名,值为undefined.然后找函数声明,属性值为函数本身,如果函数名与变量名冲突,函数声明会将变量声明覆盖。

函数预编译(五部曲):

函数上下文创建后,会生成**变量对象AO**

- 寻找变量声明, 变量名作为AO对象的属性名, 属性值置为 undefined

- **寻找形参, 形参名作为AO对象的属性名, 属性值置为 undefined**

- **将实参的值赋予形参, 即替换 AO对象中形参的属性值**

- 寻找函数声明, 函数名作为AO对象的属性名, 属性值为函数本身

- 如果函数名与变量名冲突, 函数声明会将变量声明覆盖

浅拷贝与深拷贝:

浅拷贝是其属性与拷贝源对象的属性共享相同引用,当更改源或副本时,也可能导致其他对象发生改变。(相当于只是一个指向该地址的拷贝一改全改)对于引用数据类型它是一个浅拷贝。

Object.create()方法会把里面传入的对象拷贝到它的原型上浅拷贝。

Object.assign({}, obj)方法相当于创建一个新的接受器{},再将obj合并入当是深拷贝。

引用型拷贝的是地址所以传递一改俱该,基本拷贝属性。

扩展运算符:var obj1 = { ...obj }

深拷贝:指其属性与其拷贝的源对象的属性不共享相同的引用,当更改源或副本时可以确保不会导致其他对象发行改变。

var ob2 =  JOSN.parse(JSON.stringify( ob1)) 原生方法:stringify把obj转换为一个字符串序列然后parse还原为对象属性。注:当拷贝对象中含有函数、symbol、正则和undefined类型时会出现拷贝错误。

对此lodash组件库针对不同类型的拷贝实现。

深拷贝的使用场景:
数据类型的划分、递归处理、循环引用的处理

本质上自己实现的是条件加递归结合的方法

不需要递归的类型直接返回:null 非对象 函数类 Data RegExp正则;

构造函数的原型是否在当前函数的原型链上if ( obj instanceof Map){} 对Map数据结构的处理。先创建const newObj = new Map(),对于map数据结构添加元素是调用它的set方法。对与往数组array中添加时调用push。

!自己跟着实现一遍深克隆和浅克隆的函数

闭包:能够访问到其他函数作用域中的对象的函数,成为闭包。(两个函数之间的关系

匿名函数由作用域链可向外发访问而外部是不可以向内的,存在的内存泄漏的机制现在由于回收解决。

this的基本概念:不能在执行期间被赋值。JS中的this并不是固定不变的它随着执行环境的变化而改变。

js对象和JSON格式的区别:【

JSON的属性一定要加双引号,对象可以加,也不可以不加

JSON不可以进行赋值,不可以属性的形式取值,对象可以

使用JSON.stringify()将js对象转换为json 字符串,以js对象为参数

使用JSON.parse()将json字符串转换为js对象,以json字符串为参数

this指向问题:

在一般函数调用时,this指向的windows

在构造函数中,this指向实例化出来的对象

作为对象的方法调用,this指向调用对象

call和apply调用,this指向第一个调用的对象(传入的参数)没给为空的话就是window

call方法:语法:function.call(thisArg,arg1,arg2,...),其中thisArg是要设置为函数执行上下文的对象,也就是this要指向的对象,从第二个参数开始,arg1,arg2,...是传递给函数参数,通过使用call方法,可以将一个对象的方法应用到另一个对象上

apply

前端里面amd还有cmd怎么区别。

基本数据类型:

number数字类型:可以带小数点,也可以不带,可以用科学计数法

字符串类型String:存储字符的变量,可以是引用类中的任意文本,字符串的变量内容一旦创建就不可以再改变,如果要改变,只能创建新的字符串,抛弃旧的字符串。

字符串模版 `字符串${变量}字符串`

null空,返回的类型是Object原理:在js中二进制前三位都为零就被判断为object类型,null的二进制表示全部都为0.用途:通过将变量的值设置为null来清空变量。

声明变量然后通过console.log(typeof  变量名)查看类型

undefined:表示一个变量只有声明没有赋值,他与Null的值相等但是类型并不同,null缺失值,此处有一个值但是还没有定义。

数组Array:用方括号书写,由逗号隔开,索引了(下标)基于零第一个项目就是[0]以此类推。

对象Object用花括号来书写,对象属性:属性值,用逗号隔开。取值,对象名属性名

函数function:是被设计为特定任务的代码块,会在某个代码调用它的时候执行

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

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

相关文章

基于Raspi的Opencv-Python开发笔记

本文所有未强调 “windows终端” 的 “终端”字眼,都是默认树莓派的终端 系统版本 系统版本有必要强调一下,因为不同版本很多操作需要修改 在终端输入uname -a Release就是版本号,Codename是版本名 以下操作仅在此版本验证可行 使能摄像…

WalleWeb简化你的DevOps部署流程

walle-web:简化部署流程,提升开发效率,Walle Web让DevOps触手可及 - 精选真开源,释放新价值。 概览 Walle Web是一个功能强大且免费开源的DevOps平台,旨在简化和自动化代码部署流程。它支持多种编程语言,包…

短剧系统源码:构建互动娱乐的新平台

随着数字媒体的兴起,短剧成为了一种新兴的娱乐形式,它以紧凑的叙事和快速的节奏迎合了现代观众的观看习惯。短剧系统源码的开发,为短剧内容的创作、传播和消费提供了一个全面的技术解决方案。本文将探讨短剧系统源码的关键组成部分及其功能。…

智慧园区整理技术方案(ppt,软件全套建设方案)

智慧园区管控平台整体技术方案 1.平台概述 2.公共安全 3.物业管理 4.综合管理 5.企业服务 平台规划,整理技术架构搭建,统一门户,lot物联平台,视频云管理平台,GIS服务平台,服务器架构,统一身份认…

23.Labview中的数值类型讨论 ---- 位(bit)、字节(byte)、I8、U8、单双精度、复数

hello,大家好,本篇向大家介绍一个最常用但最容易让人忽略和最容易犯错的知识:数值。 “数值” 这个概念在Labview中被涉及的还是很多的,几乎任何一个程序都无可避免的会用到,但我相信大家绝大多数人对数值这个概念应用…

简要分析学习spring内存马,劫持马

简要分析学习spring内存马,劫持马 本文主要是通过SpringMemShell这个工程,来对spring内存马进行演示,利用。 写在前面: 参考的是大佬给的流程以及思路,其中的解释与分析非常详细 ----->>大佬的链接 这里的内存马文件取自gi…

第100+9步 ChatGPT文献复现:ARIMA预测百日咳

基于WIN10的64位系统演示 一、写在前面 我们来继续换一篇文章来学习学习: 《BMC Public Health》杂志的2022年一篇题目为《ARIMA and ARIMA-ERNN models for prediction of pertussis incidence in mainland China from 2004 to 2021》文章的模拟数据做案例。 这…

hadoop(1)--hdfs部署(亲测可用)

一、准备: 1、三台集群部署,配置hosts #cat /etc/hosts 192.168.46.128 node1 #nameNode dataNode secondaryNameNode 192.168.46.129 node2 #datanode 192.168.46.130 node3 #datanode说明: NameNode: 主节点管理者 DataNode&…

LNMP部署及应用

目录 1.LNMP概述 Nginx 特点 Nginx 作用 2.分布式部署LNMP操练 Nginx主机:CentOS 7-1 PHP主机: CentOS 7-2 1.LNMP概述 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行&…

Kotlin 对象

文章目录 对象表达式(匿名对象)对象的声明 对象表达式(匿名对象) 在 Kotlin 中可以使用object {}声明一个匿名的对象,我们无需声明这个对象的类: fun main() {val any object {fun greet() print("…

C - Job Interview

思路: 先不考虑溢出,将nm1按照分配的工作分类 会发现,有且仅有一种工作的人数是溢出的,即超过了上限,记作工作1;且另一种工作的人数没有溢出,记作工作2 工作2因为没有溢出,不管没…

CPU/GPU/FPSGO,负载调试/设置命令开关

CPU/GPU/FPSGO,负载调试/设置命令开关 首先,进入: adb shell cat sys/kernel/ged/hal/gpu_utilization 查看GPU的负载情况。输出三个数字,第1个表示使用率,第3个表示空闲率。 echo 0 /sys/kernel/fpsgo/common/force…

Java中的网络编程:构建稳健的分布式应用

网络编程是Java开发中至关重要的一部分,特别是在构建分布式系统和网络应用程序时。Java提供了丰富的网络编程API和库,使开发者能够轻松创建各种网络应用。本文将介绍Java中的网络编程基础、常用的网络通信协议、以及如何利用Java构建稳健的分布式应用。 …

redis教程介绍以及要点和难点

Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。以下是关于Redis的详细概述: 定义 Redis,全称Remote Dictionary Server,是一个高性能的key-value数据库。 它支持多种数据结构,如string(字符串)、list(链表)、set(集合)、zset(…

Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译

文章目录 Tcp协议Tcp协议常见API接口1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. int listen(int socket, int backlog);4. int accept(int socket, struct socka…

计算机网络——如何保证 TCP 传输的可靠性

TCP 是传输层上的协议,它是可靠的,面向连接的。 概括 1. 设置传输格式,包括分为 TCP 段、使用校验和、使用序列号 2. 数据丢失之后的重传,超时重传、快速重传、SACK 选择确认、D-SACK 重复选择确认 3. 流量控制,控…

关于auto-coder的一次辩经

"其实是这样的,助手只要能给出正确的代码,粘贴一下,不是主要工作量" 这种思路还是把大模型当成一个信息获取工具来用,那么注定难以变革生产力,他和搜索引擎没有任何区别,那么把搜索引擎换成大模型…

spring 事务方式和事务传播

spring 事务方式和事务传播 Spring框架提供了多种方式来处理事务,以确保在应用程序中数据的一致性和完整性。在Spring中,事务可以通过注解、XML配置或编程方式来管理,而事务传播机制定义了事务在多个方法之间的传递和交互方式。 以下是Sprin…

字符串-至多包含K种字符的子串中最长子串(mid)

一、题目描述 二、解题思路 借鉴以下题目思想,使用双指针,外层循环右侧指针移动,内存循环左侧指针移动 字符串-最长不含重复字符的子字符串(mid)-CSDN博客文章浏览阅读622次,点赞17次,收藏4次。java刷题:…

探索第三方美颜SDK:美颜插件的技术原理

本篇文章,我们将深入了解第三方美颜SDK,主要探讨关于美颜插件的工作机制与算法。 一、第三方美颜SDK的概述 第三方美颜SDK是由专业团队开发的一套用于实现美颜功能的软件开发工具包。它通常包括了各种美颜算法、滤镜效果、人脸识别等核心技术&#xff…