JavaScript 乱讲 第一讲(数值类型一)

数据类型

JavaScript中有几种数据类型,包括:

  1. 数字类型(Number):表示数字,可以是整数或浮点数。
  2. 字符串类型(String):表示文本,用引号包裹,可以是单引号或双引号。
  3. 布尔类型(Boolean):表示真或假。
  4. 空类型(Null):表示没有值。
  5. 未定义类型(Undefined):表示变量未定义或未赋值。
  6. 对象类型(Object):表示复杂的数据结构。
  7. 数组类型(Array):表示一组有序的数据。
  8. Symbol类型:表示独一无二的值,通常用于对象属性的键值。
  9. BigInt类型:表示任意精度整数,可以用来表示超过JavaScript普通数字类型(Number)所能表示的最大值。BigInt类型的值以N结尾,例如:10N。这是ES2020(也称ESBigInt)中新增的数据类型。

数值类型

众所周知JavaScript在数值的类型表现上只有数值类型这一种,其中既包括了整数也包括了浮点数。

JavaScript的数值类型实际上借用了IEEE 754标准,该标准规定了如何处理浮点数,定义了两种浮点数,即单精度浮点数和双精度浮点数(也就是我们常说的float和double)。在JavaScript中,整数和浮点数都是双精度浮点数,因此没有区分这两种数值。双精度浮点数由符号位、指数位和有效位数组成,有效位数决定了浮点数的精度,指数位决定了浮点数的大小,举个例子,111.43749832479832的二进制表示是0 10000000011 1101111011011100111101110000100110111111001111100110011001000,其中符号位为0表示正数,指数位为10000000011,对应十进制为1026,有效位为1101111011011100111101110000100110111111001111100110011001000,将其按照指数位指定的位置插入小数点后,得到数值为1.1143749832479832 × 2^1026。此外,浮点数算法还有一个优势,即在进行大小比较时,可以将浮点数看作64位整数进行比较,从而提高比较的效率。

第一个falsy值

Falsy 值是指在 JavaScript 中被认为是“假”的值,即布尔上下文中被视为 false 的值。有六个,但是今天只讲一个0

在 IEEE 754 标准中,有正零和负零两种表示方法,它们都是0,但具有不同的符号。在 JavaScript 中,通常使用正零,因此在大多数情况下,0 和 -0 的行为是相同的。但是在一些特殊情况下,它们的行为会有所不同,比如除以 0 和取反操作(-0 取反后仍为 -0)。为了让使用者更方便地处理这些特殊情况,JavaScript 实现了一些规则来抹平 0 和 -0 的不同,例如当需要把 -0 转换为布尔值时,会被认为是 false,而当需要把 -0 转换为字符串时,会被转换为字符串 "-0"。需要注意这些特殊情况,以避免潜在的错误。

数值字面量

数值字面量是指在代码中直接写出来的数值,例如整数、浮点数等。在 JavaScript 中,数值字面量可以按照以下方式来写:

const a = 1
const b = -1
const c = 1.0
const d = -1.0

//其他进制的展示形式
const 0b13 = 0b1101 //二进制 
const 0o13 = 0o10   //十进制
const Of255 = 0xFF //十六进制

除了这些还有其他的比如NAN,Infinity等也可以作为字面量来使用。

Number类型

Number是JavaScript中用于处理数字值和执行数学计算的内置对象。它可以表示整数或浮点数,并提供了许多方法和属性,例如toFixed()、toPrecision()、toString()等等,用于数字的格式化、精度设置、字符串转换等操作。需要注意的是,由于JavaScript采用的是IEEE 754标准表示浮点数,因此在浮点数计算时可能会存在精度问题。此外,Number对象还包含了许多常量,例如Number.EPSILON(最小正整数)和Number.MAX_SAFE_INTEGER(最大安全整数),具体的方法和属性可以在后续的内置对象中进行学习。

彩蛋

有些了解JavaScript的同学,知道JavaScript的一个很哲学的问题0.1+0.2 != 0.3这是为什么呢。我用废话文学说一下原因。

这是因为在JavaScript中,0.1和0.2都不能被精确地表示为二进制小数。当它们进行加法运算时,会产生一个非常微小的舍入误差,这个误差会导致0.1 + 0.2的结果略微大于0.3。虽然这个误差很小,但是由于JavaScript默认只保留一定位数的小数,因此在输出时就会被截断,导致看起来不等于0.3。这个问题在其他语言中也存在,不仅限于JavaScript。为了避免这个问题,可以使用特定的方法进行浮点数运算,例如使用toFixed()方法将结果转化为字符串时指定保留的小数位数。

总结起来就是因为0.1和 0.2 这种转换为二进制会变成类似于10进制的1/3这种循环小数。所以导致无法精确的表示。

剩下的部分

运算符

位运算

高精度整数、浮点数

如果有不对的地方或者写的不好的地方大佬们也可以指出来,我来修改,谢谢大家。

本文的内容来自于:JavaScript悟道

封面图片由Steve BuissinnePixabay上发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值