当前位置: 首页 > news >正文

js中的数据类型

JavaScript 中有以下几种常见的数据类型:

  1. 基本类型(原始类型):

    • 字符串(String):表示文本数据。
    • 数字(Number):表示数值数据。
    • 布尔(Boolean):表示真(true)或假(false)值。
    • undefined:表示未定义的值。
    • null:表示空值或没有值。
  2. 引用类型:

    • 对象(Object):表示复杂的数据结构,包括对象、数组、函数等。
    • 数组(Array):表示有序的集合。
    • 函数(Function):表示可被调用的代码块。
    • 日期(Date):表示日期和时间。
    • 正则表达式(RegExp):表示用于匹配字符串的模式。

除了以上列出的数据类型外,JavaScript 中还有一些特殊的数据类型,例如 Symbol(表示唯一的标识符)和 BigInt(表示任意精度的整数)。

需要注意的是,JavaScript 是一种动态类型语言,变量的数据类型是在运行时确定的,可以随时根据需要改变变量的类型。

另外,可以使用 typeof 运算符来检查一个值的数据类型。例如,typeof "hello" 返回 “string”,typeof 42 返回 “number”。但是需要注意 typeof null 的返回值是 “object”,这是一个历史遗留问题。

在js中定义一个数字

在 JavaScript 中,可以使用数字字面量来定义一个数字。数字字面量可以是整数或小数,并且可以使用科学计数法表示非常大或非常小的数。

以下是定义数字的几种方式:

// 整数
let a = 123;// 小数
let b = 3.14;// 科学计数法
let c = 6.02e23; // 6.02乘以10的23次方,即 6.02×10²³
let d = 1.2345e-6; // 1.2345乘以10的负6次方,即 1.2345×10⁻⁶

需要注意的是,在 JavaScript 中,数字是一种原始类型。当您使用算术运算符(+、-、*、/、% 等)对数字进行计算时,会得到一个新的数字作为结果。

另外,JavaScript 中还有一些特殊值,例如 Infinity(无穷大)、-Infinity(负无穷大)和 NaN(不是数字)。这些值也属于数字类型,但不是有效的数字值,需要注意。

let和var的区别

let 和 var 都是 JavaScript 中用于声明变量的关键词。它们之间的主要区别在于作用域和变量提升的行为上。

  1. 作用域

    var 声明的变量属于函数作用域或全局作用域,而 let 声明的变量属于块级作用域。块级作用域是一对花括号({})中的任何语句,例如 iffor 或 while 循环语句。

    示例:

    function example() {var x = 1;if (true) {var x = 2;}console.log(x); // 2
    }
    example();function example2() {let y = 1;if (true) {let y = 2;}console.log(y); // 1
    }
    example2();
    

    在第一个示例中,var 声明的 x 变量的作用域是函数作用域,其在 if 块中重复声明(该块也属于函数作用域)。所以 console.log(x) 打印的结果是 2

    在第二个示例中,let 声明的 y 变量的作用域是块级作用域(即 if 块)。所以 console.log(y) 打印的结果是 1

  2. 变量提升

    在使用 var 声明变量时,它们会被提升到它们所在作用域的顶部,在声明之前的任何地方都可以访问它们。这种行为被称为变量提升。

    示例:

    function example() {console.log(x); // undefinedvar x = 1;
    }
    example();
    

    上面的示例中,var 声明的 x 变量会被提升到函数作用域的顶部,但它没有被赋值,因此第一行打印出来的是 undefined

    在使用 let 声明变量时,变量在声明之前不会被访问,不会存在变量提升的行为。

综上所述,let 比 var 更容易控制变量的作用域,不会存在变量提升的问题。建议在使用变量时优先使用 let,避免因为变量提升问题导致的不良后果。

http://www.lryc.cn/news/280579.html

相关文章:

  • vue3+vant+cropper.js实现移动端图片裁剪功能
  • springCould中的Bus-从小白开始【11】
  • xshell和xftp
  • python for...else用法,一个实例就能让你明白
  • windows 设置ip命令bat脚本
  • Openharmony 对应Android内存查看
  • R语言【paleobioDB】——pbdb_interval():通过ID选择,返回一个地层年代段的基本信息
  • spring boot mybatis plus mapper如何自动注册到spring bean容器
  • What is `@PathVariable` does?
  • 如何利用小程序介绍公司品牌形象?
  • [C#]使用sdcb.paddleocr部署v4版本ocr识别模型
  • Echarts图表如何利用formatter自定义tooltip的内容和样式
  • Ceph源码分析-s->req_id = store->svc()->zone_utils->unique_id(req->id)
  • Unity中的异步编程【7】——在一个异步方法里播放了animation动画,取消任务时,如何停止动画播放
  • vue3中ref和reactive联系与区别以及如何选择
  • 面试宝典之spring框架常见面试题
  • 建筑垃圾处理行业分析:正在被越来越广泛的运用
  • 【DIY summaries on Linux】
  • Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)
  • ospf-gre隧道小练习
  • C++入门【29-C++ 把引用作为返回值】
  • 基于Java SSM框架实现企业车辆管理系统项目【项目源码】
  • MyBatis的配置及简单使用
  • 【UE Niagara学习笔记】07 - 火焰的热变形效果
  • 深度学习模型中 argparse 模块Python 脚本的部分参数解读
  • 在win10和Linux上配置SSH 无密码登录
  • 【VUE】无法加载文件 \node\vue.ps1,因为在此系统上禁止运行脚本。问题解决
  • C //练习 4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。
  • 【python playwright 安装及验证】
  • 极简云源码已经开源