这是【JavaScript 教程系列第 5 篇】,如果觉得有用的话,欢迎关注专栏。
- 一:JavaScript 中的数据类型
- 1:基本数据类型
- ①:数字(Number)
- ②:字符串(String)
- ③:布尔(Boolean)
- ④:未定义值(Undefined)
- ⑤:空值(Null)
- 拓展:undefined 与 null 的区别
- 2:引用数据类型
在 JavaScript 中,数据类型可以分为两种,一种是"基本数据类型",另外一种是"引用数据类型"。基本数据类型只有一个值,而引用数据类型可以含有多个值。
1:基本数据类型基本数据类型有 5 种,如下表格
基本数据类型 数据类型说明Number数字,数学运算的值String字符串,表示信息流Boolean布尔值,逻辑运算的值Undefined未定义的值,表示未赋值的初始化值Null空值,表示非对象下面针对这 5 种基本数据类型,我们分别简要说明一下。
①:数字(Number)在 JavaScript 中,数字是最基本的数据类型,所谓的数字,就是我们数学上的数字,比如 6,-8,3.1415926 等。
例 1-1 :数字不区分整数和浮点数
如下代码所示
var int = 1; // 整型数值
var float = 1.0; // 浮点型数值
如果你有其它编程语言基础,比如在 C# 中,整数一般都是 32 位数值,而浮点数一般都是 64 位数值。
但在 JavaScript 中,数字是不区分"整数(int)"和"浮点数(float)"的,所有的数字都是以 64 位 浮点数形式存储,包括整数。例如 7 与 7.0 是同一个数。
例 1-2 :浮点数的溢出
如下代码所示
var a = 0.1 + 0.2;
document.write("a = " + a);
这段代码执行后,你觉得结果会是多少呢 ?是 0.3 吗 ?让我们来看一下浏览器的运行效果 可以看到,输出的结果是 0.3 后面有很多个 0 ,而不是 0.3 ,这就是浮点数的溢出。
而造成这种情况的原因是 JavaScript 遵循二进制浮点数算术标准(IEEE 754)而导致的问题,该标准适合很多应用,但它却违背了数字的基本常识。
怎么解决这个问题呢 ?
浮点数中的整数运算是准确的,所以小数表现出来的问题可以通过指定精度来避免,比如上面的加法运算,我们可以这样来写
var a = (1+2)/10;
浏览器运行结果如下 例 1-3 :特殊的数值
JavaScript 中定义了几个特殊的数值常量,如下表格所示
特殊数值 特殊值说明Infinity无穷大。当数值超过浮点型所能够表示的范围,负无穷大为 -InfinityNaN非数值。不等于任何数值,包括自己Number.MAX_VALUE表示最大数值Number.MIN_VALUE表示最小数值,一个接近 0 的值Number.POSITIVE_INFINITY表示正无穷大的数值Number.NEGATIVE_INFINITY表示负无穷大的数值这里以 NaN 为例,让我们了解一下特殊值的用法。
NaN: 就是 Not a Number 的缩写形式,表示非数字值,是在 IEEE 754 中定义的一个特殊的数值。
数学中,除数是不能为 0 的,而如果我们强制让 0 做除数,结果会是怎样的呢 ?
如下代码
var a = b = 0;
document.write("a/b = "+a/b);
浏览器运行效果如下 可见如当 0 除以 0 时会返回 NaN 这个特殊值,而且如果表达式的运算值为 NaN,就可以推断出其中至少一个运算数是 NaN 。
JavaScript 字符串是由 0 个或多个 Unicode 字符组成的字符序列,0 个字符表示空字符串。如下代码所示
var str = "Allen Su"; // 字符串
var emptyStr=""; // 空字符串
注意事项 在使用字符串时,字符串必须包含在英文的单引号或者双引号中。
如果字符串包含在双引号中。则字符串内也可以包含单引号。反之,也可以在单引号中包含双引号,如下代码
var str1 = "我'喜欢'编程"; // 双引号包含单引号
var str2 = '我"喜欢"编程'; // 单引号包含双引号
但双引号括起来的字符串中,不能再含有双引号,因为 JavaScript 判断不出哪两个双引号是一对的。单引号同理
字符串需要学习的有很多,这里只说明一下它的基本用法,后面我会专门写一篇关于字符串的博客。
③:布尔(Boolean)布尔类型的值只有两个固定的值,true 和 false 。true 代表"真",false 代表"假"。
这里做一下拓展,为什么这种数据类型要叫"布尔值"呢 ?
其实,布尔是 bool 的音译,是以英国数学家、布尔代数的奠基人 乔治·布尔(George Boole) 来命名的。
例 3-1 :
如下代码
var a = 10;
var b = 20;
var bool = a>b
document.write(bool);
首先 10 > 20 在数学中是不成立的,所以 a>b 返回的结果是 ?浏览器运行效果如下 输出结果为 false,代表 a > b 这个是不成立的,也就是一个假事件。反之 a < b 返回的结果就是 true ,代表这是一个真事件。
undefined 是 Undefined 类型的唯一值,它表示未定义的值,指的是当声明变量未赋值时,或者定义属性未设置值时,默认值都是 undefined ,undefined 隐藏着意外的空值。
如下代码所示
var number;
document.write(number);
浏览器运行效果如下 如果我们只是声明一个变量而不对其赋初始值,结果就是 undefined 。
Null 类型只有一个值,即 null ,它表示空值,定义一个空对象指针。
比如在定义数字,字符串数据的时候,系统都会分配一定的内存空间,在 JavaScript 中,如果一个变量的值等于 null ,则表示系统没有给这个变量分配内存空间。如
var obj = null;
obj 这个变量就没有被分配内存空间。
null 隐含着意料之中的空值,因此设置一个变量、参数为空值时,建议使用 null ,而不是 undefined 。
使用 typeof 运算符检测 null 值,返回 object ,说明它属于对象类型,但 JavaScript 单独把它归为一类特殊的值。
拓展:undefined 与 null 的区别相同点 undefined 派生自 null ,undefined 和 null 都表示空缺的值,转化为布尔值时都是假值,可以相等,如下代码所示
document.write(null == undefined);
浏览器运行效果如下 不同点 null 和 undefined 属于两种不同的类型,使用全等运算法 === 或 typeof 运算符可以进行检测,如下代码所示
document.write(null === undefined);
document.write(""+typeof null);
document.write(""+typeof undefined);
注:代码中使用的 ""
仅为换行目的。
浏览器运行效果如下 可见 null 返回的是 object 类型,而 undefined 返回的是 undefined 。所以两者的类型是不相同的。
引用数据类型包含:对象(Object)、数组(Array)、函数(Function),引用数据类型比较复杂,不是几句话或者一篇博客可以写完的,后续我写好博客之后会把链接复制到这里。
你的问题得到解决了吗?欢迎在评论区留言。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
结束语 技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。 最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。