JavaScript基础1之变量的var、const、let和数据类型的原始类型、对象类型、内存空间、拷贝

JavaScript基础

  • 变量
    • var关键字
      • var声明的作用域
      • var 定义多个变量
      • 变量提升
    • let关键字
        • 暂时性死区
        • let不是Windows的属性
      • const关键字
  • 数据类型
    • 原始类型
    • 对象类型
    • 内存空间
    • 拷贝
      • 拷贝原始类型
      • 拷贝引用数据类型
      • 比较

变量

ECMAScript变量:松散类型的 =>变量可以保存任何类型的数据
声明变量:var、const、let
var可以随意使用
const let是ES6新增的,es6以及更晚的版本使用

var关键字

var name;

定义了名为name的变量 如果不赋值,则默认为undefined

var name="张三"
name =10

var声明的作用域

var 定义一个变量会成为包含它的函数的局部变量
函数调用之后,其内部的局部变量随机被销毁

  • 案例一:
function test(){
    var name="张三"
}
test()
console.log(name)

请添加图片描述
以上代码,报错

  • 案例二:
function test(){
	name2="张三"
}
test()
console.log(name2)

请添加图片描述

去掉了var操作符,name2 变成了一个全局变量
全局变量很难维护,容易被篡改

var 定义多个变量

var name="张三",
    age=18,
    sex="男";

console.log(name,age,sex)

请添加图片描述

变量提升

function foo(){
    console.log(age)
    var age=18
}

foo()

请添加图片描述
结果是undefined,没有报错,由于变量提升导致的
上述代码等价于:

function foo(){
    var age;
    console.log(age)
    age=18
}

foo()

请添加图片描述
声明的变量会自动提升到函数作用域顶部

function foo(){
    var age=10
    var age=20
    var age=30
    console.log(age)
}

foo()

请添加图片描述
反复多次使用var声明同一个变量,后面的会覆盖前面的

let关键字

let 声明的作用域是块作用域,var 声明的范围是函数作用域
块作用域是函数作用域的子集,适用于var的作用域的限制,同样也限制于let

if(true){
    var name="张三"
    console.log(name)
}
console.log(name)

请添加图片描述

if(true){
    let  name="张三"
    console.log(name)
}
console.log(name)

请添加图片描述

let age=10
let age=20

console.log(age)

请添加图片描述
let 不允许同一个块作用域对同一个变量重复声明

暂时性死区

let声明的变量不会在作用域中被提升

function test(){
    // let之前的部分都叫做暂时性死区
    console.log(age)
    let  age=18
}
test()

请添加图片描述

let不是Windows的属性

let 在全局作用域定义的变量不会成为windows对象的属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
    <title>Title</title>
</head>
<body>
<script>
    var name="张三"
    let age="李四"
    console.log(window)
</script>
</body>
</html>

请添加图片描述
请添加图片描述
let是块作用域

for(let i=0;i<5;i++){
}
console.log("i",i)

请添加图片描述

for(var j=0;j<5;j++){
}

console.log("j",j)

请添加图片描述

for(var i=0;i<5;i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}

请添加图片描述

for(let i=0;i<5;i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}

请添加图片描述
循环退出的时候,我们的var定义的i每次改变的都是外层的变量的值,setTimeout为0也有400毫秒的延时,所以先执行完累加,然后执行循环;在用let设置时候,是块作用域,只对块作用域有效,只取块里的i

const关键字

const行为和let基本一致
区别:

  • 用const声明的变量必须进行初始化
  • 修改const声明的变量会报错
    const也不允许重复声明变量

错误的表示:

const name="张三"
name="李四"

console.log(name)

请添加图片描述

const age=10
const age=20

console.log(age)

请添加图片描述
const声明的作用域也是块

const name="张三"
if(true){
    const name="李四"
}
console.log(name)

请添加图片描述

数据类型

7种数据类型

  • 原始类型
  • 对象类型

原始类型

  • null
  • undefined
  • Boolean:true\false
  • Number:整数或者浮点数、Infinity,-Infinity,NaN
  • String:一串表示文本值的字符序列
  • Symbol:唯一且不可改变的数据类型
  • BigInt

对象类型

  • Object:Array,Function

内存空间

栈内存 和 堆内存

基本数据类型存储在栈中
栈内存:

var a=1;
var b=2;
var c=3;

请添加图片描述
引用数据类型存储在堆中

var obj1={name:"印客"}
var obj2 ={age:18}
var obj3 function (){}
var obj4=[1,2,3,4,5]

请添加图片描述

拷贝

拷贝原始类型

var name="张三"
var name1=name
name1="李四"
console.log(name)

请添加图片描述
请添加图片描述

拷贝引用数据类型

var obj={name:"张三"}
var obj1=obj
obj1.name="李四"
console.log(obj)

请添加图片描述
请添加图片描述

比较

两个变量比较,不同类型的变量表现不同
对于原始数据,直接比较他们的值,如果相等则为true

对于引用类型,比较时候会比较他们的引用地址,虽然他们在堆中存储的对象具有相同属性,但是他们被存储在了不同的空间

var name="张三"
var name1="张三"
console.log(name===name1)

var obj={name:"张三"}
var obj1={name:"张三"}
console.log(obj===obj1)

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EdgeX Foundry 安装部署

文章目录 一、概述1.官方文档2.Docker Compose 生成器3.创建 docker-compose 文件 二、安装准备1. 克隆服务器2.安装 Docker3.安装 docker-compose 三、非安全模式部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Fou…

AI:144-通过机器学习预测股票市场趋势

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

IO 与 NIO

优质博文&#xff1a;IT-BLOG-CN 一、阻塞IO / 非阻塞NIO 阻塞IO&#xff1a;当一条线程执行read()或者write()方法时&#xff0c;这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出&#xff0c;在这期间这条线程不能做任何其他的事情。 非阻塞NIO&…

大数据技术(一)

大数据技术概述 大数据技术层面及其功能 数据采集与预处理 利用ETL(extract-transform-load)工具将分布的、异构数据源中的数据&#xff0c;如关系数据、平面数据文件等&#xff0c;抽取到临时中间层后进行清洗、转换、集成&#xff0c;最后加载到数据仓库或数据集市中&…

单例模式及应用场景

如果希望自己的代码更优雅、可维护性更高以及更简洁&#xff0c;往往离不开设计模式这一解决方案。 在JS设计模式中&#xff0c;最核心的思想&#xff1a;封装变化&#xff08;将变与不变分离&#xff0c;确保变化的部分灵活&#xff0c;不变的部分稳定&#xff09;。 那么来…

RISC-V特权架构 - CSR寄存器

RV32/64 特权架构 - CSR寄存器 1 CSR地址空间2 CSR定义2.1 用户级2.2 监管级2.3 超级监管级2.4 机器级 3 CSR访问3.1 CSRRW3.2 CSRRS3.3 CSRRC3.4 CSRRWI3.5 CSRRSI3.6 CSRRCI 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 CSR地址空间 RISC&…

[笔记] 使用 Java Swing 实现一个简单的窗口

Java Swing 是一个用于构建图形用户界面&#xff08;GUI&#xff09;的Java库&#xff0c;它提供了丰富的组件和工具&#xff0c;用于创建交互式的桌面应用程序。Swing 是 Java Foundation Classes&#xff08;JFC&#xff09;的一部分&#xff0c;它是 Java 平台的一种标准用户…

超全面!Linux学习资料大合集,21套从入门到进阶,看这篇就够了

本文将为那些渴望学习Linux&#xff0c;但又缺乏相应资料和方向的朋友&#xff0c;提供21套Linux优质资料&#xff0c;包含入门到进阶&#xff0c;希望能对大家有所帮助。 此合集内容及其丰富&#xff0c;涉及方面颇多&#xff0c;不仅适合Linux入门学习的朋友&#xff0c;运维…

麻省理工最新开发AI模型,让机器人实现自主规划路线

文 | BFT机器人 麻省理工学院的研究人员独具匠心地应用了人工智能来解决仓库中的机器人路径规划问题&#xff0c;以此缓解交通拥堵的难题。据该学院介绍&#xff0c;他们的团队开发了一种深度学习模型&#xff0c;其效率比传统的强随机搜索方法高出近四倍&#xff0c;极大地提…

彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战

自主导航是机器人与自动驾驶的核心功能&#xff0c;而SLAM技术是实现自主导航的前提与关键。现有的机器人与自动驾驶车辆往往会安装激光雷达&#xff0c;相机&#xff0c;IMU&#xff0c;GPS等多种模态的传感器&#xff0c;而且已有许多优秀的激光SLAM与视觉SLAM算法。但是每种…

nginx主动检测后端健康模块

一、前言 nginx也有自带的后端检测模块ngx_http_upstream_module&#xff0c;该模块可以做到基本的健康检查&#xff0c;因为该健康检查是被动的&#xff0c;当nginx有请求后&#xff0c;才会对后端服务进行健康检测&#xff0c;当检测到有故障时会将这个请求转发到正常的后端服…

云计算市场,从追求“规模制胜”到走向“用户分化”

文|智能相对论 作者|叶远风 通常来说&#xff0c;价格战放到任何行业&#xff0c;都不是什么好事。 如今&#xff0c;作为曾经的前沿技术创新&#xff0c;云计算行业正在被迫走入价格战的阴霾当中&#xff0c;引发业界担忧。 ECS&#xff08;云服务器&#xff09;最高降36%…

数据库之间数据迁移工具datax

简介 DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databe…

2024.3.1 网络编程

1.思维导图 2.TCP机械臂测试 程序代码&#xff1a; #include <myhead.h> #define SER_IP "192.168.125.254" //服务器端IP #define SER_PORT 8888 //服务器端端口号#define CLI_IP "192.168.199.131" //客户端IP …

C++_数据类型_字符串型

作用 用于表示一串字符 两种风格 C风格字符串&#xff1a;char 变量名[] "字符串值” 示例 注意 C风格的字符串要用双括号括起来 C风格字符串&#xff1a;string 变量名 "字符串值” 注意 用C风格字符串的时候&#xff0c;要包含这个头文件#include <st…

基于React低代码平台开发:构建高效、灵活的应用新范式

文章目录 一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者简介目录前言为什么要写这本书 读者对象如何阅读本书 随着数字化转型的深入&…

GraphView实时图像刷新

代码&#xff1a; GraphViewTest::GraphViewTest(QWidget *parent): QWidget(parent) {ui.setupUi(this);m_bll BllData::getInstance();connect(m_bll, &BllData::returnImgDataSignal, this, &GraphViewTest::returnImgDataSlot);ui.graphicsView->setHorizonta…

RabbitMQ分享

RabbitMQ遵循AMQP协议&#xff0c;自身采用Erlang RabbitMQ工作模式 生产者发消息&#xff0c;启动多个消费者实例来消费消息&#xff0c;每个消费者仅消费部分信息&#xff0c;可达到负载均衡的效果。 RabbitMQ三种常用交换机类型&#xff1a; 交换机主要起调度分发作用。 …

正弦波生成的傅里叶级数展开法

目录&#xff1a; 一、积分法 二、傅里叶级数展开法 附录、常见波形的傅里叶级数 一、积分法 通过对三角波进行积分&#xff0c;即可得到正弦波。有关内容移步&#xff1a;运算放大器应用汇总1之六、积分电路。 下面对傅里叶级数展开法进行描述。 二、傅里叶级数展开法 三…

高通QNX基线编译原理

下面代码以高通智驾平台为例。 1 QNX应用程序编译原理 在高通提供的qnx开发包中,qnx的内核已经由qnx所提供,所以qnx的编译,其实就是大量应用程序的编译,以及最后利用buildfile文件,把内核,库文件以及应用程序打包在一起的过程。 1.1 qnx的工程目录 应用程序的编译,可…