JavaScript8种数据类型

一、开门见山
在ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。
- ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
- 谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。
所以:准确来说目前JS数据类型总共有8种!
- Number
- String
- Boolean
- Null
- Undefined
- Object
- Symbol
- BigInt
按照类型来分有基本数据类型和引用数据类型:
基本数据类型:String、Number、Boolean、Null、Undefined、Symbol
引用数据类型:Object【Object是个大类,function函数、array数组、date日期...等都归属于Object】
二、动态数据类型
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型
JavaScript中变量似乎很简单,因为它声明变量只需要一个“var”就可以,不像其他编程语言严格区分了数据类型(int/double/char/boolean...)。这样做也是有好处的,变量可以被赋予任何类型的值,同样也可以给这个变量重新赋予不同类型的值。并不是“一定终身”
var x = 1; //number类型
var x = 0.1; //number类型,JS不区分整数值和浮点数值 //现在x由number变成string
var x = "hello world"; //由双引号内文本构成字符串
var x = 'javascript'; //单引号内文本同样可以构成字符串 //现在x由string变成boolean
var x = true; //true和false作为布尔值 var x = null;
var x = undefined; //null和undefined很相似,是特殊的类型
(1)字符串string
字符串是存储字符(比如 "Bill Gates")的变量
字符串可以是引号中的任意文本。可以使用单引号或双引号
- 使用单引号或者双引号,没有区别
- 单引号不要嵌套单引号。双引号同理,非要嵌套需要对引号进行转义
\'\"
var str = '孙悟空'; //单引号字符串
var str2 = '猪八戒'; //双引号字符串
其他转义字符:
\n 表示换行符\r 表示回车符\t 水平制表符 tab\' 单引号\" 双引号\\ 反斜杠\uXXXX 四位十六进制表示unicode字符串\xXX 两位十六进制表示拉丁字符
字符串拼接:
var str1 = "hello";
var str2 = "world";
var str = str1 + str2
console.log(str); //helloworld
(2)数值number
JavaScript 只有一种数字类型。数字可以带小数点,也可以不带
var num1=5.02; //使用小数点来写
var num2=520; //不使用小数点来写 //极大或极小的数字可以通过科学(指数)计数法来书写
var y=123e5; // 12300000
var z=123e-5; // 0.00123
数值范围:
- 5e324 ~ 1.7976931348623157e+308
- 如果超过范围,会表示为 Infinity 或者 -Infinity
特殊的数值NaN:
- NaN是number类型,是一个数值
- 特点1:NaN与任何数进行任何运算结果都是NaN
- 特点2:NaN与任何数都不相等,包括自己
相关函数:
isNaN() 判断数据是否是NaN, 是返回true,否则返回falseisFinite() 判断数据是否在范围内,在范围内返回true,否则false
//NaN是一个特殊的number,与其他所有值都不相等,包括它自身
console.log(NaN === NaN ); //false //唯一识别NaN的方法
console.log(isNaN(NaN) ); //true // 范围:5e324 ~ 1.7976931348623157e+308
var min = 5e324;
var max = 1.7976931348623157e+308;
var a = 1.7976931348623157e+309; console.log(min); //Infinity
console.log(max); //1.7976931348623157e+308
console.log(a); //Infinity
console.log(isFinite(a)); //false(超出范围,不在数值范围内)
(3)布尔boolean
布尔(逻辑)只能有两个值:true 或 false
var x=true;
var y=false;
(4)null和undefined
null 表示没有对象,此处无值
undefined 表示缺少值,本来应该有值但没定义
var x = null;
var y = undefined
(5)symbol
Symbol 函数可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分
let name = Symbol();
let name2 = Symbol("bb");
console.log(name); // Symbol()
console.log(typeof name); // "symbol"
console.log(name,name2); //Symbol() Symbol(bb)
console.log( name === name2); // false
(6)对象object
对象由花括号分隔。在括号内部,对象的属性以键值对的形式 (name : value) 来定义。属性由逗号分隔
//空格和折行无关紧要。声明可横跨多行
var obj = {
"name":"张三",
"age":18
}
(这里键名也可以不用加引号)
读取对象中属性:
name = obj.name
//或
name = obj['name']
三、基本数据类型与引用数据类型区别
3.1 声明变量时不同的内存分配
- 基本数据类型由于占据的空间大小固定且较小,会被存储在栈当中,也就是变量访问的位置
- 引用数据类型存储在堆当中,变量访问的其实是一个指针,它指向存储对象的内存地址
3.2 正是因为内存分配不同,在复制变量时结果也不一样
- 基本数据类型复制后2个变量是独立的,因为是把值拷贝了一份
- 引用数据类型则是复制了一个指针,2个变量指向的值是该指针所指向的内容,一旦一方修改,另一方也会受到影响
<script type="text/javascript">
var x = 3;
var y = x;
console.log(x,y); //3 3
// 基本数据类型复制后2个变量是独立的
x = 5; //修改一方,另一个不受影响
console.log(x,y); //5 3 var a = [0,1,2,3];
var b = a;
console.log(a, b); //(4) [0, 1, 2, 3] (4) [0, 1, 2, 3]
a[0] = 9
console.log(a, b); //(4) [9, 1, 2, 3] (4) [9, 1, 2, 3]
</script>
结果:

这里明显可以看出b复制了a,改变a数组的值,b数组也跟着改变了。这就是因为当引用数据类型复制的是同一个指针而不是同一个值,指针指向的地址都是相同的,一方修改另一方也会受影响!
(这里涉及了JS的深拷贝和浅拷贝,这里就不再详细赘述,后面会有单独文章进行讲解)
3.3 参数传递不同
- 基本数据类型把变量里的值传递给参数,之后参数和这个变量互不影响
- 引用数据类型(这里拿函数举例):虽然函数的参数都是按值传递的,但是引用值传递的值是一个内存地址,实参和形参指向的是同一个对象,所以函数内部对这个参数的修改会体现在外部
数据类型的转换以及检测数据类型的方法会在其他文章单独讲解,为了方便阅读这里就不再详细赘述~
参考链接:
https://www.html.cn/qa/javascript/11619.html
https://www.cnblogs.com/nangezi/p/9049025.html
https://blog.csdn.net/u013592575/article/details/95087953
JavaScript8种数据类型的更多相关文章
- redis 五种数据类型的使用场景
String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...
- redis五种数据类型的使用(zz)
redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...
- Python中的几种数据类型
大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello" ...
- [转]redis 五种数据类型的使用场景
FROM : http://blog.csdn.net/gaogaoshan/article/details/41039581#t5 String 1.String 常用命令: 除了get.set.i ...
- Redis学习笔记--五种数据类型的使用场景
String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...
- Python学习笔记——几种数据类型
1. 列表list: Python内置的一种数据类型是列表:list,用中括号[]表示.list是一种有序的集合,可以随时添加和删除其中的元素,而且元素的类型不必相同.list可以通过下标来访问,范围 ...
- Redis 的几种数据结构&五种数据类型对象
先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...
- redis五种数据类型的使用
redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...
- Redis学习笔记(三)Redis支持的5种数据类型的总结
继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...
随机推荐
- 我好像发现了一个Go的Bug?
从一次重构说起 这事儿还得从一次重构优化说起. 最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码. 用责任链 ...
- 如何通过 User-Agent 识别百度蜘蛛
如果有大量的百度蜘蛛抓取网站就需要注意了:有可能是其他爬虫伪造百度蜘蛛恶意抓取网站. 如果遇到这种情况,这时候就需要查看日志来确定是不是真正的百度蜘蛛(baidu spider).搜索引擎蜘蛛.用户访 ...
- Docker学习(三)——Docker镜像使用
Docker镜像使用 当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载. 1.镜像使用 (1)列 ...
- 01 nodejs MVC gulp 项目搭建
文本内容 使用generator-express创建nodejs MVC DEMO 使用gulp实时编译项目 npm安装二进制包,无须再编译wget https://nodejs.org/dist/v ...
- nexus 私服 拉不了 jar 包,报 Not authorized
问题: 无法下载导入jar包,idea reload 时 报: Could not transfer artifact com.xxx:parent:pom:1.0-SNAPSHOT from/to ...
- 【Linux】【Services】【Package】rpm包制作
1. 概念 1.1. BUILD:源代码解压之后存放的位置 1.2. RPMS:制作完成之后的RPM包的存放位置,包括架构的子目录,比如x86,x86_64 1.3. SOURCES:所有的原材料都应 ...
- spring的不同事务传播行为和用途。
1.PROPAGATION_REQUIRED:如果当前没有事务,就创建一个事务,如果当前存在事务,就加入该事务,该设置是最常用的设置. 2.PROPAGATION_SUPPORTS:支持当前事务,如果 ...
- SpringSecurity Oauth2.0
1.用户认证分析 上面流程图描述了用户要操作的各个微服务,用户查看个人信息需要访问客户微服务,下单需要访问订单微服务,秒杀抢购商品需要访问秒杀微服务.每个服务都需要认证用户的身份,身份认证成功后,需要 ...
- Salesforce LWC学习(三十七) Promise解决progress-indicator的小问题
本篇参考:https://developer.salesforce.com/docs/component-library/bundle/lightning-progress-indicator/exa ...
- collection库更新1.4.0版本
collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...