细说JavaScript的数据类型(JavaScript的数据类型详解)

news2024/11/18 16:37:28

在JavaScript中有六种不同的数据类型,六种数据类型又分为5种简单数据类型(基本数据类型)和1中复杂数据类型(引用数据类型),基本数据类型分为:字符串类型(string)、数值类型(number)、布尔类型(bnoolean)、为定义类型(undefined)、空类型(null),复杂数据类型为对象类型(object)

一、如何获取数据类型

二、字符串类型(String)

1、字面量表示

2、转义字符

3、字符串的特点

4、模版字符串(ES6)

三、数值类型(number)

1、字面量表示

2、进制转换

3、浮点数

4、浮点数的运算

5、数值范围

6、NaN

四、布尔类型(boolean)

五、未定义类型(undefined)

六、空类型(null)

七、对象类型(object)

八、类型转换

1、字符串类型转换

1.1、隐式转换

 1.2、显式转换

2、数值类型转换

2.1、隐式转换

2.2、显式转换 

3、布尔类型转换

九、Symbol类型(ES6)

1、Symbol类型的创建

2、Symbol类型的特性

3、获取已创建的Symbol类型


一、如何获取数据类型

JavaScript是弱类型语言,当声明一个变量时无需设置数据类型,所以开发者无法通过一个变量名来获取其数据类型,js给我们提供了一个运算符typeof用来获取数据类型

typeof '知数SEO';  //string
typeof 100;  // number
typeof true; // boolean
typeof undefined;  // undefined;
typeof null;  // object;  将null看作是空对象
typeof {age:19}; // object
typeof function(){}; // function 派生自object

二、字符串类型(String)

string类型是使用中最广泛的一种类型,javascript将字符串类型定义为0个或者多个16位无符号整数组成的有序数列,每个字符来自Unicode字符集,字符串可以使用英文下的单引号或双引号表示

1、字面量表示

// 字面量又称直接量,在js中如果想创建一个指定值的字符串,则直接通过单引号或双引号将指定值括起来即可,这种创建字符串的方式叫做字符串字面量

'知数SEO';
"品牌推广专家";

2、转义字符

反斜线被用作转义使用

常用转义字符

转义字符含义
\oNULL字符
\b退格符
\t制表符
\n换行符
\r回车符
\v垂直制表符
\"双引号
\'单引号
\\反斜线
\xXX由2位十六进制数XX指定的Lantin-1字符
\uXXXX由4位十六进制数XXXX指定的Unicode字符

3、字符串的特点

// 1、字符串一旦创建便无法修改,有关字符串的一些方法,比如字符串替换、字符串填充等,其实是删除了原来的字符串,新建了一个字符串

// 2、字符串类型中每个字符都对应一个下标,字符串自左向右由数字0依次递增,这个下标通常被称为索引

// js提供了获取指定索引字符的方法: 变量[索引]
var str = '知数SEO_品牌推广专家';
alert(str[0])

4、模版字符串(ES6)

// 模版字符串(template String)相当于增强版的字符串,用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量

// 使用区块作用域
var str = "知数SEO";
var zs = '品牌推广专家 + str + '专注品牌营销推广';
console.log(zs);

// 使用模版字符串
var str = "知数SEO";
var zs = `品牌推广专家${str}专注品牌营销推广`;
console.log(zs);

三、数值类型(number)

数值类型用于表示数值,其格式有浮点数(小数)、整数以及多种不同进制。js没有将浮点数和整数分为不同的数据类型,这与其它编程语言有所不同。

1、字面量表示

// 在js中,如果需要使用一个数值,通常将变量直接赋值为数字,那么这个变量存储的数据就是一个数值类型的值
var num = 806331888;

// 在计算机语言中,表达一个数值其实并没有那么容易,可能设计到进制的问题,目前比较常用的有: 二进制、八进制、十进制、十六进制

2、进制转换

在声明一个普通数值时,js默认会以十进制格式进行存储,十进制的含义是数字以 0-9之间的数值表示,当数值超过9则向上一位进1,其余的进制于此一致

在js中可以通过字面量或者系统提供的方法来表示不同进制的数值,比如八进制和十六进制的数值,其字面量表示形式与普通数值不同,需要使用特殊前缀进行定义

// 在js数值的字面量表示方法中可以看到是有特殊格式的,如八进制字面量表示使用前导0 十六进制则使用0x

// 在ES6中提供了二进制和八进制的新的写法 分别用)0b(0B)和0o(0O)表示

var num = 017; // 八进制
var num = 17; // 十进制
var num = 0x17; // 十六进制

3、浮点数

// 所谓浮点数,在形式上与数学的小数一样,浮点数包含整数部分、小数点、小数部分,其整数部分可以省略
0.01; // 浮点数0.01
.01; // 省略整数部分的浮点数,与0.01一致
 
// 对于极大的浮点数或整数,可以使用科学记数法表示(用e 或 E表示)
1.23e-7;  // 1.23乘以10的-7次方     0.000000123

// 注意:声明一个浮点数,在内存中占用的空间为整数的两倍。因此js的机制中会自动将浮点数转换为整数,这种情况发生在浮点数本身就是整数的情况下,如1.0 1

4、浮点数的运算

浮点数存在精度差,最高精度为17位小数,所以在运算中使用浮点数进行计算时可能会导致无法预知的错误

5、数值范围

由于内存的限制,js中的数值类型不能保存世界上所有的数值,数值类型有两个边界值:最大值MAX_VALUE 和最小值 MIN_VALUE,这两个值分别通过Number.MAX_VALUENumber.MIN_VALUE方式获取

如果超出了这个范围就会显示为Infinity(正无穷)或者-Infinity(负无穷),我们可以使用isFinity()函数来确定一个数是否在最大值和最小值之间,如果在允许的范围内则返回true 否则返回 false

6、NaN

NaN(Not a Number)这个数值用于表示一个本来要返回数值的操作但未返回数值的情况,例如在数学中除数不能为0,在js中0除以0会返回NaN 

NaN作为一个特殊的值,它有两个规则:

1、它与任何值都不想等,包括其本身

2、任何设计NaN的运算均会返回NaN值

针对NaN这个特殊的值,js特地定义了isNaN()函数,这个函数接收一个参数,起作用就是判断这个 参数是否时NaN值,如果是就返回true

四、布尔类型(boolean)

布尔类型是js中使用最多的数据类型,该值只有true和false两个值,分别代表真和假,通常情况下开发者不会自己定一个布尔值,而是通过一个表达式或者多个表达式返回一个布尔值,这些表达式通常会作为条件出现在流程控制的逻辑判断中。

var num = 1;
if(num ==1){
    alert('二者相等');
}else {
    alert('二者不相等');
}

五、未定义类型(undefined)

underfined(未定义)是一种特殊的数据类型,该类型中仅有一个值就是其本身,当变量未被初始化赋值的时候会默认为undefined,当没有声明变量num同时使typeof测试时,会提示undefined,需要注意的是直接在语句中使用未声明的变量时会报错

六、空类型(null)

null类型和undefined类型有共同之处,null类型仅有一个值就是其本身,从逻辑上看null表示一个空对象的指针,这也就是为什么使用typeof检测null为object类型的原因

在项目开发中,如果定义的变量准备用来保存对象,那么最好将其赋值为null,这样一来从语义上就能很清楚的知道该变量是准备用来存储对象的

七、对象类型(object)

对象类型又称为引用数据类型、复杂数据类型,先对于之前提及的五种基本数据类型,它显得复杂和重要,对象其实就是一组相关联的数据和功能的集合,可以通过字面量的形式创建对象,在创建时可以为其赋多个数据值

// 语法:{属性名:属性值,属性名:属性值,...}

var obj = {name,"知数SEO"};  // 定义对象

obj.name; // 知数SEO  获取属性名

八、类型转换

在实际开发中,经常会遇到不同的数据类型相互转换的问题

1、字符串类型转换

字符串类型转换分为隐式转换(自动转换)和显式转换(强制转换)

1.1、隐式转换
// 隐式转换就是当程序运行时期望值为一个字符串时就会讲非字符串类型自动转换为字符串类型
// 字符串连接使用“+”符号,该符号在js中同时扮演着算数运算符和字符串连接符的角色

var str = "知数SEO" + 8 + "年专品牌推广";
document.write('<h2>',typeof str,'</h2>');

 1.2、显式转换
// 显式转换也称为强制转换,这种转换是可控的,js给我们提供了几个方法来实现字符串的类型转换
// 全局函数String()
var num =1;
var bool = true;
String(bool);
String(num);

// toString()对象方法,除了undefined和null外每种数据类型都有
bool.toString();
num.toString();

// 除了上面的两种方式还有一种取巧方式转换字符串,即使用“+”连接一个空字符串
var name = "shishu";
console.log(typeof name+"");

2、数值类型转换

数值类型转换与字符串相同,具有隐式转换和显式转换之分

2.1、隐式转换
var num1 = 1;
var num2 = 2;
document.write('<h2>',num1 + num2,'</h2>');
2.2、显式转换 
// 除了隐式转换js提供了三个函数用于非数值类型转换为数值类型

// Number()

// parseInt()  支持第二参数,如果第二参数为进制数,则会讲第一个参数解析为指定进制的数值

// parseFloat()

Number()函数的转换规则

参数类型参数值转换
booleantrue/false1/0
number返回相同的值
nullnull0
undefinedundefinedNaN
string只包含数字返回对应的值
string包含有效的浮点数返回对应的浮点数
string包含有效的十六进制数将十六进制转换为十进制并返回
string包含有效的八进制数讲八进制转换为十进制并返回
string字符串为空0
string除以上格式外NaN
object首先调用valueOf()方法,如果为NaN则调用toString()方法一般为NaN

3、布尔类型转换

布尔值同样存在两种类型转换方式,隐式转换在逻辑判断中对表达式的处理等会用到

显式转换用到Boolean() 

Boolean()函数的转换规则

数据类型转换为true转换为false
string非空字符串空字符串
number非零数字0和NaN
booleantruefalse
null永远转换为false
undefined永远转换为false
object任何对象(包括空对象)null

九、Symbol类型(ES6)

ES6中引入了Symbol类型,这是因为在ES6之前,对象属性名称都是字符串,比如你使用别人提供的对象,又想为这个对象添加新方法,新方法的名字就很有可能与现有的对象属性存在冲突,于是Symbol就应运而生了

1、Symbol类型的创建

// 语法 Symbol();

// 在使用Symbol()函数生成一个Symbol类型的值的同时,可以传入一个参数用于进行对该值进行描述,但对于值本身是没有任何影响的

Symbol('知数SEO');

2、Symbol类型的特性

// 特性1: Symbol()函数每次使用都会生成一个独一无二的值,因此尽管变量使用的生成函数是相同的,但是其值时不同的
var num1 = Symbol();
var num2 = Symbol();
console.log(num1 == num2);  // false


// 特性2: Symbol()函数生成的Symbol类型的值无法隐式转换成字符串

// 特性3: Symbol()函数接收一个参数,但该参数对结果不产生影响,仅作为描述信息

3、获取已创建的Symbol类型

// Symbol()函数每次使用都会生成一个独一无二的值,不过有时我们会用到之前生成的Symbol值

// Symbol.for()方法用来实现这种效果
Symbol.for(key);

//该方法接收一个参数,当使用该方法时会自动寻找是否有以该字符串为参数的Symbol值,如果有则返回该Symbol值,否则创建一个Symbol值
var num1 = Symbol.for('zhishu');
var num2 = Symbol.for('zhishu');
console.log(num1 == num2);  // true

注意:只有使用Symbol.for()生成的Symbol值才能被用于此方法,当使用Symbol()函数生成一个Symbol值时不具备这个特点

Symbol.for()与Symbol()这两种写法都会生成新的Symbol值,它们的区别在于前者被登记在全局环境中供搜索,后者不会,Symbol.for()方法不会每次被调用就返回一个新的Symbol类型的值,而是会先检查给定的key是否已经存在,如果不存在则会创建一个新值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习周刊第六期:哈佛大学机器学习课、Chatbot Ul 2.0 、LangChain v0.1.0、Mixtral 8x7B

— date: 2024/01/08 — 吴恩达和Langchain合作开发了JavaScript 生成式 AI 短期课程&#xff1a;《使用 LangChain.js 构建 LLM 应用程序》 大家好&#xff0c;欢迎收看第六期机器学习周刊 本期介绍10个内容&#xff0c;涉及Python、机器学习、大模型等,目录如下&#xff…

SpringCloud Aliba-Nacos集群配置-从入门到学废【3】

&#x1f95a;今日鸡汤&#x1f95a; 修行之路&#xff0c;唯有不断超越自我&#xff0c;方能登上巅峰。 ——《武庚纪》 目录 &#x1f32d;1.Linu服务器上配置mysql &#x1f953;2.application.properties配置 &#x1f9c8;3.修改集群配置cluster.conf &#x1f9c2…

【复现】金和OA协同管理平台 任意文件上传漏洞_20

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 金和C6协同管理平台包括协同办公管理,人力资源管理,项目管理,客户关系管理,企业目标管理,费用管理,移动办公,微信办公等多个业务范…

python的装饰器详解

目录 一&#xff1a;介绍 二&#xff1a;在方法中使用 三&#xff1a;在类中使用 四&#xff1a;python自带的装饰器 一&#xff1a;介绍 Python的装饰器是一种高阶函数&#xff0c;它允许你在不改变函数内部逻辑的情况下&#xff0c;给函数添加额外的功能。装饰器本质上是…

Python 错误 Valueerror: Expected 2d Array Got 1d Array Instead

如您所知&#xff0c;每种编程语言都会遇到很多错误&#xff0c;有些是在运行时&#xff0c;有些是在编译时。 Python 在使用 numpy 库时有时会遇到数组错误。 当我们在 numpy 中传递一维数组而不是二维数组时&#xff0c;会发生错误 ValueError: Expected 2D array, got 1D a…

机器学习周刊第五期:一个离谱的数据可视化Python库、可交互式动画学概率统计、机器学习最全文档、快速部署机器学习应用的开源项目、Redis 之父的最新文章

date: 2024/01/08 这个网站用可视化的方式讲解概率和统计基础知识,很多内容还是可交互的,非常生动形象。 大家好,欢迎收看第五期机器学习周刊 本期介绍7个内容,涉及Python、概率统计、机器学习、大模型等,目录如下: 一个离谱的Python库看见概率,看见统计2024机器学习最…

前端面试题集合五(css)

CSS 面试知识点总结 本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记&#xff0c;如果出现错误&#xff0c;希望大家指出&#xff01; 目录 1.介绍一下标准的 CSS 的盒子模型&#xff1f;低版本 IE 的盒子模型有什么不同的&#xff1f;2.CSS 选择符有哪些…

【代码随想录06】454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和

目录 454. 四数相加 II题目描述做题思路参考代码 383. 赎金信题目描述做题思路参考代码 15. 三数之和题目描述参考代码 18. 四数之和题目描述参考代码 454. 四数相加 II 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你…

LaTeX系列1——主结构

初学&#xff0c;可交流&#xff0c;轻喷 \documentclass{book} \begin{document} \title{Book Title} \author{Author Name} \date{\today} \maketitle\chapter{Introduction} This is the introduction chapter of the book.\section{First Section} The first section of t…

人工智能 | 生成式 AI 如何重塑开发流程和开发工具?

生成式 AI 如何重塑开发流程和开发工具&#xff1f; 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff0c;GAI&#xff09;是一种基于大规模数据训练学习&#xff0c;从而生成新的原创内容的人工智能。生成式人工智能可以生成各种形式的数据&#xff0c…

Linux:网络文件共享服务和内网搭建yum仓库

目录 一、网络文件共享服务 1.储存类型 2.FTP文本传输协议 二、内网搭建yum仓库 1.通过ftp服务搭建内网yum仓库服务器 2.通过httpd协议搭建内网yum仓库服务器 一、网络文件共享服务 1.储存类型 分为三种&#xff1a; 直连式存储: Direct-Attached Storage&#xff0c;简…

大模型背景下计算机视觉年终思考小结(二)

1. 引言 尽管在过去的一年里大模型在计算机视觉领域取得了令人瞩目的快速发展&#xff0c;但是考虑到大模型的训练成本和对算力的依赖&#xff0c;更多切实的思考是如果在我们特定的小规模落地场景下的来辅助我们提升开发和落地效率。本文从相关数据集构造&#xff0c;预刷和生…

【干货】忘记设备IP咋整?查找设备IP地址这几种手段请收藏好~

前言&#xff1a; 拿到了设备但找不到设备IP地址的情况想必很多人都遇到过&#xff0c;又不想重置&#xff0c;怎么办嘞&#xff1f; 别急&#xff0c;可以通过机身标签上的唯一标识MAC地址查到IP&#xff0c;小云君给你支几招&#xff1a; 手段1 通过查询PC的ARP表项查询局…

Halcon提取彩色多通道图像的亚像素边缘edges_color_sub_pix算子

Halcon提取彩色多通道图像的亚像素边缘edges_color_sub_pix算子 如要要提取彩色多通道图像的亚像素边缘&#xff0c;可以使用edges_color sub pix算子。该算子与edges_sub_pix 算子的参数十分相似&#xff0c;但又有所区别。首先从名称上看&#xff0c;edges color sub pix 算…

Rust-析构函数

所谓“析构函数”(destructor),是与“构造函数”(constructor)相对应的概念。 “构造函数”是对象被创建的时候调用的函数&#xff0c;“析构函数”是对象被销毁的时候调用的函数。 Rust中没有统一的“构造函数”这个语法&#xff0c;对象的构造是直接对每个成员进行初始化完…

软件测试要学习的基础知识——白盒测试

白盒测试是通过检查软件内部的逻辑结构&#xff0c;对软件中的逻辑路径进行覆盖测试&#xff0c;以确定实际运行状态与预期状态是否一致。 白盒测试又被称为&#xff1a; 透明盒测试 结构化测试 逻辑驱动测试 基于代码的测试 白盒测试的常用技术分类 一、静态分析&#x…

GEE:机器学习分类中每个类别的概率图像可视化

作者:CSDN @ _养乐多_ 在 Google Earth Engine(GEE) 中应用机器学习分类器进行多分类时,有一个需求是想知道每个像素对于每个类别的分类概率。 比如在进行随机森林分类时,每个决策树会生成一个类别,通过投票选择票数最多的类别作为最终分类。除了最终分类结果,其他类别…

【Leetcode】82. 删除排序链表中的重复元素 II

文章目录 题目思路代码 题目 82. 删除排序链表中的重复元素 II 题目&#xff1a;给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,…

Docker容器(二)安装与初体验wordpress

一、安装 1.1关闭SeLinux SeLinux&#xff08;Security-Enhanced Linux&#xff09;是一种基于Linux内核的安全模块&#xff0c;旨在提供更严格的访问控制和安全策略。它通过强制实施安全策略来限制系统资源的访问&#xff0c;从而保护系统免受恶意软件和未经授权的访问。 在…

用Photoshop来制作GIF动画

录了个GIF格式的录屏文件&#xff0c;领导让再剪辑下&#xff0c;于是用Photoshop2023进行剪辑&#xff0c;录屏文件有约1400帧&#xff0c;PS保存为GIF格式时&#xff0c;还是挺耗时的&#xff0c;平时少用PS来进行GIF剪辑&#xff0c;编辑后的GIF不能动&#xff0c;网上搜索的…