JS-04-javaScript数据类型和变量

一、数据类型

计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在JavaScript中定义了以下几种数据类型:

 

1-1、Number

JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:

123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示,比如:0/0
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示。

Number可以直接做四则运算,规则和数学一致:

2 / 0; // Infinity
0 / 0; // NaN

 

要注意:

1、JavaScript的Number不区分整数和浮点数,也就是说,12.00 === 12,整数和浮点数能直接比较。(在大多数其他语言中,整数和浮点数不能直接比较)

2、JavaScript的整数最大范围不是±±2^{63},而是±2^{53},因此,超过2^{53}的整数就可能无法精确表示:

console.log(Number.MAX_SAFE_INTEGER);
// 9007199254740991

 

1-2、字符串

字符串是以单引号'双引号"括起来的任意文本。

1-3、布尔值

可以直接用true、false表示布尔值,也可以通过布尔运算计算出来:

true; // 这是一个true值
false; // 这是一个false值
2 > 1; // 这是一个true值
2 >= 3; // 这是一个false值

1-4、比较运算符

实际上,JavaScript允许对任意数据类型做比较

2 > 5; // false
5 >= 2; // true
7 == 7; // true

false == 0; // true
false === 0; // false

 

1-4-1、相等运算符:==和===

JavaScript在设计时,有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较!!!

1-4-2、浮点数的相等比较

1 / 3 === (1 - 2 / 3); // false

这不是JavaScript的设计缺陷。因为计算机无法精确表示无限循环小数,而浮点数在运算过程中会产生误差。

要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

 

1-4-2、NaN的比较

NaN(not a number)这个特殊的Number与所有其他值都不相等,包括它自己:

NaN === NaN; // false

唯一能判断NaN的方法是通过isNaN()函数

isNaN(NaN); // true

1-5、BigInt

要精确表示比2^{53}还大的整数,可以使用内置的BigInt类型,它的表示方法是:

1、在整数后加一个n,例如9223372036854775808n;

2、也可以使用BigInt()把Number和字符串转换成BigInt:

var a = 0x7fffffffffffffff;
console.log(a);//9223372036854776000

var bi1 = 9223372036854775807n;
var bi2 = BigInt(12345);
var bi3 = BigInt("0x7fffffffffffffff");
        
console.log(bi1 === bi3); // true
console.log(bi1 === bi2); // false

console.log(bi1 + bi2); // 9223372036854788152n
console.log(bi3 - bi1); //0n

 

使用BigInt可以正常进行加减乘除等运算,结果仍然是一个BigInt;

但不能把一个BigInt和一个Number放在一起运算!!!

console.log(1234567n + 3456789n); // OK
console.log(1234567n / 789n); // 1564, 除法运算结果仍然是BigInt
console.log(1234567n % 789n); // 571, 求余

console.log(1234567n + 3456789); // Uncaught TypeError: Cannot mix BigInt and other types

 

1-6、null和undefined

null表示一个“空”的值;

undefined表示值未定义,是变量在创建之后但在分配值之前持有的值。

var b;
console.log(b);// undefined

1-7、数组

JavaScript的数组可以包括任意数据类型

[1, 2, 3.14, 'Hello', null, true];

 

创建数组的方式:

1、直接使用[xxx, xxx, xx];(出于代码的可读性考虑,强烈建议!!!)

var arr = [1, 2, 3.14, 'Hello', null, true];

2、通过Array()函数实现:

new Array(1, 2, 3); // 创建了数组[1, 2, 3]

数组元素的访问:通过索引来访问,索引的起始值为:0!

var arr = [1, 2, 3.14, 'Hello', null, true];
arr[0]; // 返回索引为0的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[6]; // 索引超出了范围,返回undefined

1-8、对象

JavaScript的对象是一组由键-值组成的无序集合

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

JavaScript对象的都是字符串类型,可以是任意数据类型!!!

每个键又称为对象的属性,例如,person的name属性为'Bob',zipcode属性为null。

要获取一个对象的属性,我们用:对象变量.属性名 的方式:

person.name; // 'Bob'
person.zipcode; // null

 

二、变量

在计算机中,变量可以存放任意数据类型。

2-1、变量名规则

变量名是大小写英文、数字、$和_的组合,且不能用数字开头

变量名不能是JavaScript的关键字,如if、while等。

2-2、var声明一个变量

申明一个变量用var语句:

var a; // 申明了变量a,此时a的值为undefined
var $b = 1; // 申明了变量$b,同时给$b赋值,此时$b的值为1
var s_007 = '007'; // s_007是一个字符串
var Answer = true; // Answer是一个布尔值true
var t = null; // t的值是null

2-3、给变量赋值=

在JavaScript中,使用等号=对变量进行赋值。

1、可以把任意数据类型赋值给变量;

2、同一个变量可以反复赋值;

3、同一个变量,反复赋值可以是不同类型的变量。(但是只能用var声明一次)

var a = 123; // a的值是整数123
a = 'ABC'; // a变为字符串

要显示变量的内容,可以用console.log(x),打开Chrome的控制台就可以看到结果。 

2-4、动态语言、静态语言

变量本身类型不固定的语言称之为:动态语言;例如:javaScript。

在定义变量时必须指定变量类型的是:静态语言;如:java。静态语言在赋值的时候,如果类型不匹配,就会报错:

int a = 123; // a是整数类型变量,类型用int申明
a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活。

2-5、strict模式

javaScript设计之初,并不强制要求用var申明变量,不用var申明变量会被视为全局变量。

在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突。

为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式。

 

2-5-1、strict模式的启用(强烈建议!)

在JavaScript代码的第一行写上:

'use strict';// 这是一个字符串

不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误:

如果浏览器支持strict模式,下面的代码将报ReferenceError错误:

 

2-5-2、不启用strict模式

浏览器若是不启用strict模式,则,并不强制要求用var申明变量。不用var申明变量会被视为全局变量,会有如下后果:

//"use strict";
c = "hello"; // 全局变量

function test1(){
    console.log(c);

    c = "ccccc";
    console.log(c);

    var d = "dddddd"; // 只在test1()函数体内有效。
}

function test2(){
    console.log(d); // 报错,无法访问
}

test1();
test2();

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

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

相关文章

听 GPT 讲 client-go 源代码 (23)

分享更多精彩内容&#xff0c;欢迎关注&#xff01; File: client-go/kubernetes/scheme/register.go 在client-go项目中&#xff0c;client-go/kubernetes/scheme/register.go文件的作用是进行Kubernetes API对象的Scheme注册。 Scheme是一个用于序列化和反序列化Kubernetes A…

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面&#xff0c;我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突&#xff0c;每个哈希表节点都有一个next指针&#xff0c;多个哈希表节点可以…

官网正在被哪些产品蚕食,定制网站又被哪些建站产品挤占。

2023-12-09 16:22贝格前端工场 官网建设是一个被大多数人看衰的市场&#xff0c;本文来理性分析下&#xff0c;谁在蚕食这个市场&#xff0c;谁又在挤占这个产品生存空间&#xff0c;欢迎大家评论&#xff0c;探讨。 网站正在被以下产品形式取代&#xff1a; 1. 移动应用&…

探索数据结构:单链表的实战指南

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 在上一章节中我们讲解了数据结构中的顺序表&#xff0c;知道了顺序…

【Spring知识体系】1.1 Java 注解(Annotation)

文章目录 1.1 注解&#xff08;Annotation&#xff09;1.1.1 什么是注解1.1.2 内置注解1.1.3 元注解&#xff08;5种&#xff09;1.14 自定义注解1.15 注解使用场景介绍※ 本文小结 1.1 注解&#xff08;Annotation&#xff09; 1.1.1 什么是注解 注解的定义&#xff1a;它提…

Java中接口新增的方法(默认方法,静态方法,私有方法)

Java中接口新增的方法&#xff08;默认方法&#xff0c;静态方法&#xff0c;私有方法&#xff09;

遗传算法理解与代码实战(二)- demo(python+deap)

前文介绍了遗传算法&#xff0c;并且手动python代码进行了实践&#xff0c;但是在遇到复杂的问题时&#xff08;遗传算法理解与代码实战&#xff08;三&#xff09;会介绍&#xff09;&#xff0c;手写代码很麻烦&#xff0c;所以需要借助专门的遗传算法库来实现&#xff0c;这…

使用Python快速提取PPT中的文本内容

直接提取PPT中的文本内容可以方便我们进行进一步处理或分析&#xff0c;也可以直接用于其他文档的编撰。通过使用Python程序&#xff0c;我们可以快速批量提取PPT中的文本内容&#xff0c;从而实现高效的信息收集或对其中的数据进行分析。本文将介绍如何使用Python程序提取Powe…

Vue | 基于 vue-admin-template 项目的跨域问题解决方法

目录 一、现存问题 二、解决方法 2.1 修改的第一个地方 2.2 修改的第二个地方 2.3 修改的第三个地方 自存 一、现存问题 报错截图如下&#xff1a; 二、解决方法 2.1 修改的第一个地方 在 .env.development 文件中&#xff1a; # base api # VUE_APP_BASE_API /d…

阿里云服务器地域和可用区选择及关系说明

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

如何使用Python的Open3D 库LAS对点云进行重建

在 Python 中对点云进行重建也可以使用 PCL 库&#xff0c;不过更为常见的是使用 Open3D 库。Open3D 是一个开源的现代化 3D 数据处理库&#xff0c;提供了许多用于点云和三维几何数据处理的功能&#xff0c;包括点云重建。 下面是一个简单的示例代码&#xff0c;演示了如何使…

人工智能|机器学习——k-近邻算法(KNN分类算法)

1.简介 k-最近邻算法&#xff0c;也称为 kNN 或 k-NN&#xff0c;是一种非参数、有监督的学习分类器&#xff0c;它使用邻近度对单个数据点的分组进行分类或预测。虽然它可以用于回归问题&#xff0c;但它通常用作分类算法&#xff0c;假设可以在彼此附近找到相似点。 对于分类…

灵魂指针,教给(二)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组…

Go语言物联网开发安科瑞ADW300/4G电能表数据上传mqtt平台-电表接线到传输数据完整流程

电能表功能说明 ADW300是方便用户进行用电监测、集抄和管理&#xff0c;可灵活安装在配电箱中&#xff0c;可用于电力运维、环保监管等在线监测类平台中。我们本案例是用于工业售电公司对出售电的管理&#xff0c;设备可以监控用电情况、故障监控及警报&#xff0c;售电公司可…

LeetCode的使用方法

LeetCode的使用方法 一、LeetCode是什么&#xff1f;1.LeetCode简介2.LeetCode官网 二、LeetCode的使用方法1.注册账号2.力扣社区力扣编辑器 2.1 讨论发起讨论参与讨论关注讨论 2.2 文章撰写文章关注文章 3.力扣面试官版测评面试招聘竞赛 4.力扣学习LeetBook 书架我的阅读猜您喜…

使用Opencv库直接进行人脸检测

import cv2abs_path cv2.__file__ xml_path abs_path.rsplit("/",1)[0] "/data/haarcascade_frontalface_default.xml"# 加载人脸检测器 face_cascade cv2.CascadeClassifier(xml_path)# 加载图像 img cv2.imread(/media/datasets/face/liuyigei_duo.…

C++vector的使用方法

文章目录 一、vector的介绍1. 文档链接2. 简要介绍 二、vector的使用1.vector的定义&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;拷贝构造函数&#xff08;2&#xff09;赋值重载 2. vector 增删查改&#xff08;1&#xff09;operator []&#xff08;2&#x…

地址分词 | EXCEL批量进行地址分词,标准化为十一级地址

一 需求 物流需要对用户输入地址进行检查&#xff0c;受用户录入习惯地址可能存在多种问题。 地址标准化是基于地址引擎和地址大数据模型&#xff0c;自动将地址信息标准化为省、市、区市县、街镇、小区、楼栋、单元、楼层、房屋、房间等元素&#xff0c;补充层级缺失数据、构建…

C语言从入门到精通 第十一章(文件操作)

写在前面&#xff1a; 本系列专栏主要介绍C语言的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C语言教材&#xff0c;笔者认为重要的部分大多都会用粗体标注&#xf…

【学习笔记】微信运营工具

办公工具 在线 http://uzer.meMindMaster即刻&#xff08;APP&#xff09;收趣&#xff08;APP&#xff09;MindMaster&#xff08;app&#xff09; 安装 文字工具 Mega Emoji 文字云 石墨文档 giftools 音频工具 变声实验室&#xff08;APP&#xff09; 录音APP&am…