关于JS六种数据类型的总结
程序员文章站
2022-06-04 23:17:43
...
最近刷的面试题都有关于这个问题:JS有哪几种数据类型?
答案是有六种:Undefined、Null、Boolean、Number、String、Object。
接下来让我详细的阐(zhai)述(chao)一下这几种类型。
1、Undefined类型
undefined类型只有一个值,那就是——undefined。
当使用var声明变量但没有对它进行初始化时,该变量的值为undefined。例子如下:
var a;
alert(a == undefined); //true
2、Null类型
与undefined一样,他也只有一个值:null。从逻辑角度来讲,null值表示一个空对象的指针,所以用typeof来检测null值时会返回“object”。
值得一提的是,由于undefined值是派生自null,所以在两者之间的相等操作符总是返回true值。例子如下:
alert(null == undefined); //true
另外,只要意在保存对象的变量还没有真正保存对象时,应该明确的该变量保存null值。
3、Boolean类型
该类型只有两个值:true 和 false。需要注意以下两点:
(1)true不一定等于1,false 不一定等于0;
(2)这两个值区分大小写,True和False 不是Boolean值,只是标识符。
在ECMAScript中,所有数据类型都有与boolean值等价的值,这就要用到转换函数Boolean()了。
转换规则如下:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
boolean | true | false |
string | 任意非空字符串 | 空字符串 |
number | 任何非零数字值 | NaN和0 |
object | 任何对象 | null |
undefined | n/a |
undefined
|
4、Number类型
这种类型既可以表示整数又可以表示浮点数值。为了支持各种数值类型,ECMA-262定义了不同的数值字面量格式。
(1)整数的例子如下:
var intNum = 55; //整数
var octalNum1 = 070; //八进制的56
var octalNum2 = 079; //无效的八进制,值为79
var octalNum3 = 08; //无效的八进制,值为8
var hexNum = 0xA //十六进制的10
八进制开头是0,在严格模式下,八进制字面量是无效的,会导致支持该模式的JavaScript引擎抛出错误。
十六进制开头是0x,后跟任何十六进制数字(0-9和A-F)。其中A-F不区分大小写。
另外,在算术计算时,所有八进制和十六进制标识的数值都最终将被转换为十进制数值。
(2)浮点类型
不说废话,直接上例子:
var floatNum1 = 1.1;
var floatNum2 = 2.1e7; //等于21000000
var floatNum3 = 3e-7; //等于0.0000003
另外,由于浮点数值的最高精度是17位小数。所以在进行算数计算时其精度远远不如整数。如0.1+0.2并不等于0.3,而是0.30000000000000004。所以,永远不要测试某个特定的浮点数值。
在大多数浏览器中:最小值Number.MIN_VALUE == 5e-324;最大值Number.MAX_VALUE == 1.7976931348623157e+308;如果超过范围,则这个数值将转换为正负无穷,即Infinity(-Infinity)值。
要确定一个数值是否有穷,可以用isFinite()函数。如果是有穷的,则返回true。
(3)NaN
NaN,即非数值。在ECMAScript中,0除以0会返回NaN。(正数除以0返回Infinity,负数除以0返回-Infinity)
这个值有两个特点:一、涉及任何关于NaN的操作都会返回NaN。二、NaN与任何值都不相等,包括NaN本身。
然后,ECMAScript针对以上两个特点定义了isNaN()函数。这个函数会帮我们确认参数是否为不是数值。不说废话直接上例子!
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false,10是一个数值
alert(isNaN("10")); //false,"10"可以转化为数值
alert(isNaN("blue")); //true,不能转化为数值
alert(isNaN(true)); //false,能转化为数值1
这下清晰明了了:任何不能转化为数值的值都会导致这个函数返回true。
5、String 类型
String 类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号或双引号表示,但注意不要“牛头不对马嘴”,左右引号必须匹配。
(1)字符字面量
String类型包含一些特殊的字符字面量,也叫转义序列。
字面量 | 含义 |
\n | 换行 |
\t |
制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号 |
\“ | 双引号 |
\xnn | 以十六进制代码nn表示一个字符,其中n为0-F |
\unnnn | 以十六进制代码nnnn表示一个Unicode字符,其中n为0-F |
(2)字符串的特点
在ECMAScript中,字符串是不可变的,也就是说,字符串一旦创建,他们的值就不能改变。如果要改变变量中字符串的值,先要销毁变量中原来的字符串,再用另一个包含新值的。
例子如下:
var lang = "Mrs";
lang = lang + " Rabbit";
alert(lang); //Mrs Rabbit
6、Object类型
Object其实就是一组数据和功能的集合。创建个对象看看吧!
var o = new Object();
但仅仅创建一个对象并没有什么卵用,还有很多方法和属性,需要在详细的对象中体现,后续更新再独立给它进行总结吧。这里不一一讲述了。
以上就是Js中六种数据类型,感觉自己写出来有钟更加深入的理解了。面试问到应该不怂不过这个博客的编辑器还真的不会用,创建的代码块怎么删掉呢?还有保存了草稿打开,格式都不一样了,发布出去不知道会不会又不一样
(参考书籍:Javascript高级程序设计第三版)
下一篇: 陈平是什么人?他为什么没被刘邦除掉?