原生js值之数据类型详解

news2024/11/20 1:47:39

js的数据类型

  • 数据类型分类
    • 基本数据类型
    • boolean:布尔类
    • undefined:未定义的值
    • null类型
      • 数值转换
    • Number
        • parseInt 转换整数
      • parseFloat转换浮点数
    • String类型
      • 特点
      • 如何转换成字符串
      • 模板字面量
      • 字符串插值
      • 模板字面量标签函数
    • symbol类型
      • 特性
      • 使用
    • BigInt类型
    • 复杂数据类型
      • Object类
        • 属性与方法

数据类型分类

基本数据类型

boolean:布尔类

主要值为true、false,但是两个属性值不等于标识符True,False。同时如果想把一个别的类型变量转换为boolean可以通过Boolean(变量值)。转换后的值就会变成true或false.

undefined:未定义的值

举例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			let a;let b=undefined
			console.log(a,b,a==b,a===b)
		</script>
	</body>
</html>

在这里插入图片描述
当我们定义了一个变量但没有给它赋初始值,没初始值也就不知道它的数据类型是什么,那它的数据类型就是undefinted,那么它被打印出来也是undefined,同时我们也可以定义一个变量的值为undefined,那么它的数据类型也是undefined。

null类型

空指针类型,因为undefined类型是由null类型衍生出来的,所以当一个null==undefined时候返回的是true。

number类型:数字类型,整数或者浮点数,同时也可以转换为八进制/十六进制
ob11=十进制3,0o70=十进制56,如果0o后面跟着的是小于8的数字,则按照8进制来进行计算,否则按照十进制进行计算。0xA=十六进制10。 同时也可以计算值的范围,如Number.MIN_VALUE,Number.MAX_VALUE,如果计算值超过最大最小值,则会返回Infinity(无穷值),有正负无穷之分。如果想判断一个值是不是优先大,超没超过出最大值或最小值,可用isFinite函数来实现,返回一个true或false,true则它再最大值和最小值里面。
NaN是number中特殊的值,意为不是数值,用于表示本来要返回数值的操作失败了,如0/0,-0/0等等,如果分子是非0值分母是0,则返回+Infinity或-Infinity,同时NaN也有自己的方法isNaN(),主要用来判断这个值是不是数字或能转换成数字,如true、false可以转换成1、0,字符串“10”可以转换成number10,字符串“blue”则不能转换返回true。

数值转换

parseInt、parseFloat、Number三个方法都可以实现数值转换。

Number

let num1=Number("Hello World!") //NaN
let num2=Number("") //0
let num3=Number("00010");//10
let num3=Number("0xA");//10
let num4=Number(true);//1
let num5=Number('1234blue');//NaN
parseInt 转换整数
let num1=parseInt('1234blue');//1234
let num2=parseInt(22.5);//22
let num3=parseInt("0xf");//15,解释为16进制整数

如果想设置十六进制进行转换,也可以设置parseInt的第二个参数,设置之后就不用再头部加0x了,如:parseInt(‘F’,16),可以转换成2,8,10,16进制。

parseFloat转换浮点数

parseFloat会忽略掉最开始是0的数值中的0,所以它只能转换十进制数字,如果这个数字没有小数点,它会解析成整数。有小数点,它会解析成浮点数。当它遇到十六进制的数字时,会转换成0。

String类型

String字符串类型可以用双引号、引号或反引号来定义,

特点

ES中的字符串是不可变的,一旦创建,如果要它们修改原始值,它们会先销毁原始值,然后将包含新值的另一个字符串保存到该变量。
例:

let lang="script"
lang="Java"+lang

在上述代码中,lang(简称l)初始值为script,那么当它在被赋新值的时候,首先会分配一个足够容纳10个字符的空间,把Java和Script两个字符填充上,最后销毁原始的字符串“Java”和“script”,因为这两个字符串已经没用了,这也导致浏览器早期时拼接字符串非常慢,在现代浏览器已经解决了这个问题。

如何转换成字符串

两种方法:toString、String。
toString方法可见于数值、布尔、对象和字符串,但是null和undefined值没有这个方法。
语法格式:变量名.toString(进制转换(可选))
toString有个参数,可以选择,比如我们有个十进制数字10,把10赋给变量a,我们想把a转换成2进制后再转换成字符串,那么可以通过a.toString(2)实现,同理也可以转换成2,8,16等进制。输入数字就可以。
当我们无法确定一个值是不是null或者undefined时可以通过String来判断,
语法格式:String(变量名)
举例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			let value1=null
			let value2=undefined
			let value3=NaN
			console.log(String(null),String(undefined),String(NaN));
		</script>
	</body>
</html>

在这里插入图片描述
String的语法格式是,当这个变量类型有toString变量那么返回这个变量名的String格式,如果变量类型和null或undefined,则返回null或undefined,因为它俩没有toString方法,所以只能返回它们的字面量文本。

模板字面量

``反引号(模板字面量)支持字符串之间的换行,而单引号和双引号不支持,如:

let a=`dddd
eeee`

在这里插入图片描述

字符串插值

模板字面量的主要场景是封装HTML模板,同时字符串插值也是模板字面量的一个重要属性之一。语法格式:${变量名}
它可以插入到js生成的HTML语句当中。同时在${}中也可以调用js方法。
例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="test"></div>
		<script>
			let a='a'
			let b=document.getElementById('test').insertAdjacentHTML('afterbegin',`${a.toUpperCase()}`)
		</script>
	</body>
</html>

在这里插入图片描述

模板字面量标签函数

通俗讲就是可以把${}中的变量,变成由几个变量和运算符组成的表达式,或者在一个自定义的函数当中输入想要的参数,把这个参数进行函数转换后生成,插入到HTML当中,比如

document.getElementById('test').insertAdjacentHTML('afterbegin',`${a.toUpperCase()+b}`)

在这里插入图片描述
标签函数格式
参数:第一个参数为传入的参数格式,如a+b,参数打印为:’’+’’.后续的参数则为模板字面量传入的值
语法格式
函数名``参数1,参数2`//第一个形参不需要传入,传入的第一个实参默认为第二个形参。

例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="test"></div>
		<script>
			function insert(strings,sum1,sum2){
				let sum=sum1+','+sum2;
				console.log(strings)
				return sum
			}
			let a='a'
			let b='b'
			let Func=insert`${a.toUpperCase()}+${b}`
			document.getElementById('test').insertAdjacentHTML('afterbegin',Func)
		</script>
	</body>
</html>

在这里插入图片描述
在上述代码中,我们定义了一个标签函数,作用就是拼接,在这个标签函数中,我们在两个参数中间放了一个,作为改变。并且在页面中看到已经改变成功了。

symbol类型

symbol类型是es6新增的数据类型,它是为了让对象属性名称多次被使用而设置的一种标识符。在设置后,其他人就无法使用这个属性名来作为对象的属性。

特性

唯一性:即使是用同一个变量生成的值也不相等。
隐藏性:用for in、Object.keys不能访问。只能通过Object.getOwnPropertySymbols方法访问对象中的symbol属性值。

使用

不能通过new Symbol方式进行创建使用,首先我们了解一点:基本数据类型用new创建可以得到包装对象,而非再是字面量,所以说不能new的原因可以是因为官方不想让Symbol变量成为一个包装对象.
可以用Symbol()的方式,如 let a=Symbol(‘id’),但这会出现一个问题,就是可以多次使用同一个Symbol值且开辟新空间,let b=Symbol(‘id’)
例:

	let a=Symbol('id')
	let b=Symbol('id')
	console.log(a===b)//false
	let c=Symbol.for('user')
	let d=Symbol.for('user')
	console.log(c===d)//true

为了防止多次开辟新空间,导致symbol使用异常情况,官方出了一个创建的方法叫,symbol.for,这个方法主要是用于判断该Symbol名是否被创建,如果被创建则直接调用,没有创建则创建.
如何根据Symbol对象获取到这个Symbol的值,可以用Symbol.keyfor,

	console.log(Symbol.keyFor(c),Symbol.keyFor(d))//user user

BigInt类型

BigInt是JavaScript中的一种新的原始数据类型,可以用来表示更大的整数值,解决了使用双精度浮点数计算及显示的问题。后缀加n。

复杂数据类型

Object类

ES中的对象类型,本质是一组数据和方法的集合,对象通过new操作符创建.

let 对象名=new Object()

如果这个对象的构造函数中没有参数也可以删除()但不推荐.

属性与方法

constructor:用于创建当前对象函数,又称构造函数.
hasOwnProperty:用于判断当前对象实例上是否存在给定的属性
语法格式:

对象名.hasOwnProperty(属性名)

isPrototypeOf:用于判断当前对象是否为另一个对象的原型.
propertyIsEnumerable:用于判断给定的属性是否可以使用.
toLocaleString():返回对象的字符串表示.(日期对象转换成字符串)
toString:返回对象的字符串表示.
valueOf:返回对象对应的字符串、数值或布尔值表示。通常与toString的返回值相同。
对象中还包含一种特殊的function对象,这里就不赘述了。

最后有两道面试题,与君共勉。

parseInt('');//NaN
Number('');//0
isNaN('');//false

parseInt(null);//NaN
Number(null);//0
isNaN(null);//false

parseInt('1px');//1
Number('1px');//NaN
isNaN('1px');//true

parseInt('1.1px') + parseFloat('1.1px') + typeof parseInt(null); //2.1number
isNaN(Number(!!Number(parseInt('1.8'))));
typeof !parseInf(null) + !isNaN(null);

1 + false + undefined + [] + 'Tencent' + null + true + {};//NaNTencentnulltrue{}
let arr = [1,2,3,4];
arr = arr.map(parseInt);
console.log(arr);//1 NaN NaN NaN

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

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

相关文章

卡奥斯第二届1024程序员节正式启动!

代码改变世界&#xff0c;开源创造未来&#xff0c;卡奥斯第二届1024程序员节开始啦&#xff01; 本次活动设置4个线上活动分会场: 低代码分会场、开源分会场、知识分会场和产品分会场&#xff0c;共12个奖项&#xff0c;1100多个奖品&#xff0c;雷神911X猎荒者游戏本&#x…

一文搞定Postman(菜鸟必看)

什么是Postman&#xff1f; Postman是一个可扩展的 API 测试工具&#xff0c;可以快速集成到 CI/CD 管道中。它于 2012 年作为 Abhinav Asthana 的一个副项目启动&#xff0c;旨在简化测试和开发中的 API 工作流程。API 代表应用程序编程接口&#xff0c;它允许软件应用程序通…

【JVM】类加载器

类与类加载器 类加载器虽然只用于实现类的加载动作&#xff0c;但它在Java程序中起到的作用却远超类加载阶段。对于任意一个类&#xff0c;都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性&#xff0c;每 一个类加载器&#xff0c;都拥有一个独立的…

k8s 中master 与node的通信

一、Master 节点与 Node 节点通讯原理 Master 节点启动时&#xff0c;会运行一个 kube-apiserver 进程&#xff0c;它提供了集群管理的 API 接口&#xff0c;是集群内各个功能模块之间数据交互和通信的中心枢纽&#xff0c;并且它页提供了完备的集群安全机制。在 Node 节点上&a…

【新品发布】洛微科技全新工业级高性能 D系列 TOF相机D3重磅上线!

近日&#xff0c;洛微科技对外发布新款高性能D系列 TOF相机D3&#xff0c;这是一款专为工业环境中高性能操作设计的3D TOF智能相机。 D3基于行业领先的Sony DepthSense像素技术开发&#xff0c;具有毫米级测量精度、VGA深度分辨率、抗环境光能力强、软/硬件多触发方式、HDR适配…

夸克扫描王识别精度领跑行业 愿携手各方伙伴探索AIGC应用新范式

日前&#xff0c;在“AIGC与场景化应用创新”主题研讨会上&#xff0c;阿里智能信息事业群夸克视觉技术负责人黄锐华分享了AI技术应用于扫描场景的最新成果。他表示&#xff0c;AIGC给手机扫描产品打开了创新空间&#xff0c;搭载大模型技术的夸克扫描王对识别手写字体、复杂公…

【验证码逆向专栏】螺丝帽人机验证逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

Maven 查看项目中的依赖

文章目录 通过 Maven 命令查看依赖dependency:listdependency:tree将命令结果输出到文档 视图化查看依赖Maven HelperIDEA 自带工具 想查看项目中使用的依赖列表时&#xff0c;可以参考下面几种方式 通过 Maven 命令查看依赖 在有 pom.xml 的路径下&#xff0c;通过命令行工…

人工智能(pytorch)搭建模型19-手把手利用pytorch框架搭建目标检测DarkNet模型,并展现网络结构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型19-手把手利用pytorch框架搭建目标检测DarkNet模型&#xff0c;并展现网络结构。随着深度学习技术的不断发展&#xff0c;各种卷积神经网络模型层出不穷&#xff0c;其中DarkNet作为一种快…

CMD脚本实战教程

要在 Windows 11 上编写一个自定义关机的 CMD 脚本文件&#xff0c;你可以创建一个扩展名为 .bat 或 .cmd 的文本文件&#xff0c;并在其中编写脚本。 一、常用语法 rem&#xff1a;注释 pause&#xff1a;暂停正在执行的批处理文件&#xff0c;并提示用户按键之后继续执行 r…

VisualStudio2017社区版安装完毕后,找不到stdio.h等头文件的解决方案

安装完VisualStudio2017社区版后&#xff0c;创建一个C的测试项目&#xff0c;好使&#xff0c;一时心血来潮创建了纯C的项目&#xff0c;结果死活提示找不到头文件“stdio.h”&#xff0c;测试代码如下&#xff1a; #include<stdio.h>int main() {printf("Hello w…

超详细 | CISP-信息安全专业认证考前攻略

近年来&#xff0c;中央关于信息安全的政策不断加码&#xff0c;网络安全已上升到国家战略&#xff0c;安全专业人才缺口以每年1.5万人的速度递增。作为信息安全从业人员&#xff0c;持证上岗已是大势所趋。今天&#xff0c;重点聊一下信息安全国内第一认证CISP&#xff01; 注…

关于表单快速开发低代码技术平台的内容介绍

运用什么样的表单快速开发软件平台可以实现高效率创收&#xff1f;随着科技的进步和飞速发展&#xff0c;专业的低代码技术平台已经走入了很多企业的办公职场中&#xff0c;它们灵活、轻量级、优质、高效、易维护等优势特点&#xff0c;可以高效助力广大企业提质增效&#xff0…

php代码审计篇bluecms代码审计

文章目录 Seay自动审计源码分析/ad_js.php文件sql注入分析/include/common.fun.php注入分析/admin/login.php存在宽字节注入分析/admin/nav.php SQL注入分析前台注册界面存在存储型xss Seay自动审计 使用seay进行自动代码审计 源码分析 /ad_js.php文件sql注入分析 查看执行…

k8s-部署

1.k8s 集群与部署 更改所有主机名字和解析 k8s1 192.168.25.11 reg.westos.org,habbor 仓库 k8s2 192.168.25.12 master&#xff0c;k8s 集群控制节点 k8s3 192.168.25.13 node&#xff0c;k8s 集群工作节点 k8s4 192.168.25.14 node&#xff0c;k8s 集群工作节点 所有节…

不再跳票Fedora 26 正式发布!

经过延期和跳票&#xff0c;Fedora 26终于和大家见面了&#xff0c;下面是Fedora 项目负责人Matthew Miller感谢信 大家好&#xff0c;我很高兴地宣布&#xff0c;从即刻起 Fedora 26 正式可用了。你可以从下面了解到具体信息&#xff0c;也可以马上开始下载&#xff1a; •下载…

漫画工厂ai-comic-factory 文字2漫画

demo入口https://huggingface.co/spaces/jbilcke-hf/ai-comic-factory 最终展示 大概流程&#xff1a; 选漫画分格输入需要将啥故事X X 通过Llama2 70B 生成具体的每个分割图的描述YY 通过SDXL 生成图 LLM: llama-2 is used to generate the captions of 4 comic panels (pro…

【从0学习Solidity】 6. 引用类型, array, struct

【从0学习Solidity】 6. 引用类型, array, struct 博主简介&#xff1a;不写代码没饭吃&#xff0c;一名全栈领域的创作者&#xff0c;专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构&#xff0c;分享一些项目实战经验以及前沿技术的见解。关注我们的主页&…

软考证书可以评职称吗?怎么评?

软考是可以帮助评职称的&#xff0c;取得软考证书&#xff0c;就具备评职称的相应资格。 通过软考获得证书的人员&#xff0c;表明其已具备从事相应专业岗位工作的水平和能力&#xff0c;用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务&#xff08;技术员…

Python函数绘图与高等代数互融实例(三):设置X|Y轴文本标签|网格线

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 一: 设置X|Y轴文本标签 import num…