06.JavaScript的8种类型——Number、BigInt、String、Boolean、null、undefined、object、symbol

数据类型


章节目录
上一篇:《变量》
下一篇:《弹窗》


JavaScript中总共有8中基本的数据类型,所有的变量都属于其中之一,例如前文遇到的数字、字符串。

动态类型

动态类型是JavaScript的特性之一,所谓动态类型,就是同一个变量能存储不同类型的数据,可能上一刻还是字符串,下一刻就是数字了。

let temp = 996;
temp = "996";

Number

正如其名,Number代表的是数字类型,包括整数和浮点数。

let intNum = 12345;   //整数
let realNum = 1.2345; //浮点数

Number类型的数据可以参与运算,如加+、减-、乘*、除/

特殊的数字类型

JavaScript拥有两个特殊的数值类型:InfinityNaN

  • Infinity代表数学中的无穷大
let infi = 996/0; //通过除以0得到无穷大
    infi = Infinity; //直接使用Infinity关键字表示无穷大

无穷大分为正无穷和负无穷:

-1/0; //-Infinity
-Infinity;

以上代码可以直接在控制台执行。

  • NaN代表计算错误,他是错误表达式的计算结果。
let nan = "str" / 2; // 字符串和数字运算

NaN具有传递性,所有和Nan一起计算的表达式都会返回Nan;

NaN + 1; //NaN
NaN * 3; //NaN
NaN + Infinity; //Nan

特殊值的存在使得计算在JavaScript中的计算永远都是安全的。
最坏的结果就是返回一个错误值:NaN

BigInt

BigInt的存在是为了弥补Number表示的缺陷,Number只能表示位于[ 2 5 ^5 5 3 ^3 3-1 , -(2 5 ^5 5 3 ^3 3-1) ]区间的整数。

常规情况下,使用Number就能满足我们所有的需求,但如果是处理超高精度的计算,或者加密、时间戳等任务就需要使用BigInt类型。

定义BigInt类型的数据需要在整数后面添加一个字母n,虽然看起来有点奇怪:

//尾部加n表示为BigInit类型
const bigInt = 999999999999999999999999999999999999999999999n;

BigInt类型使用机会较少,此处不做过多解释。

肯定就有童鞋问了,为啥只有BigInt,没有BigFloat之类的类型呢?
这是因为,BigInt类型不限制数字的长度,也就是说不论小数点后多少位,都能够通过调整单位使小数变成整数计算
比如在计算钱的时候,通常不使用“元”为单位,记作9.345元,而是记作9345厘。
只要单位足够小,总是有整数的…

String

字符串类型表示的是一系列字符组成的序列,必须被包含在引号里,引号有三种:

let str1 = "hello world";
let str2 = '单引号字符串';
let str3 = `反引号字符串用作特殊用途`

单引号和双引号就是普通的字符串,而且二者在使用中没有区别。

反引号字符串属于特殊功能的字符串,通常用于字符串拼接:

let age = 36;
let name = "特朗普";
let line = `${name} is ${age} years old.`
alert(line);

以上功能是反引号特殊的功能,不能在单双引号中使用。

通过 ${...}可以将外部值插入到反引号字符串中,这是非常有用的一个功能。

如果我们不使用这种方法,只能使用一种非常不优雅的方式:

let age = 36;
let name = "特朗普";
let line = name + " is "+ age +" years old.";
alert(line);

Boolean

布尔类型主要用于判断,常常结合if语句使用,仅包含两个值:truefalsetrue表示正确、是、存在,false表示否、错误、不存在、未定义。

定义布尔值:

let isTrue = true; 
let isOpen = false;
let notNull = true;

布尔值是比较运算符的结果:

let isBigger = 4 > 3;
alert(isBigger); // true 是的4大于3

null

null表示空、不存在,是一个独立的类型,只有null一个值。

例如,我们定义一个变量,但是并不知道给它赋一个什么值,可以赋值null,表示空值。

let age = null;

如果我们在一个集合中查找一个值,如果没有查到就可以返回一个null,表示没有找到。

undefined

null一样,undefined同样自成一类,表示未定义

例如,我们定义一个变量,但是不做赋值操作,那么这个变量就具有一个undefined值:

let num ;
alert(num); // 弹出 "undefined"

object

object类型表示的是对象类型,这在面向对象编程(OOP)中非常重要。

object类型属于复杂类型,或者说是特殊类型。

通常的Number类型、String类型都是单一类型,基础类型。

object类型则是复合类型,内部可以包含各种类型。

例如,任何一种基础类型都不能修饰“人”这个“变量”,这是因为“人”具有很多属性,例如身高、年龄、体重、姓名等。

但是这些属性都是基础类型,所以我们就可以用object类型,将这些基础类型聚集起来,用于修饰“人”这个变量。

后面,面向对象章节会详细讲解object知识。

symbol

symbol类型也是一种特殊类型,它可以用来表示唯一标识符,也就是说所有symbol类型的变量都是不相同的。

此处不做深入讲解,在面向对象章节后,会详细解释symbol知识。

typeof

如果我们有一个变量,怎么知道它是什么类型的数据呢?

此时就需要typeof运算符,使用案例如下:


typeof 0     // "number"

typeof 9999n // "bigint"

typeof "str" // "string"

typeof false // "boolean"

typeof undefined     // "undefined"
 
typeof {}            // "object"

typeof Symbol("id")  // "symbol"

typeof null          // "object" 

typeof alert         // "function"

这里有一个需要注意的地方,typeof null竟然返回了'object',这不是我们的错,这是typeof的一个bug(官方承认)。

typeof alert 返回 'function'表示alert是一个函数。

typeof 是一个运算符,而不是一个函数。
当然,如果我们像typeof(x)这样使用也绝不会错。
这样只会让我们把typeof错认为函数。
实际上引擎会把(x)理解为一个整体,()作为运算符存在:typeof (x)

课后作业

以下代码会弹出什么?


let name = "Trump";
let age  = 78;

alert(`${name} is ${age} years old.`);
alert("${name} is ${age} years old.");
alert(`${'name'} is ${age} years old.`);
alert(`${'name'} is ${9+1} years old.`);

章节目录
上一篇:《变量》
下一篇:《弹窗》


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@魏大大

我们都没有打赏的习惯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值