博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的数据类型
阅读量:5310 次
发布时间:2019-06-14

本文共 5936 字,大约阅读时间需要 19 分钟。

在ECMAScript中,变量是松散类型的。所谓松散类型就是指变量可以用来保存任何类型的数据。 

// 下面的操作是完全合法的var message = "helloWorld";message = 100;

但是在实际开发中,我并不推荐大家这样使用变量。这种操作方法是会让代码变得很不安全。为了规避这样的问题,我在变量命名的时候对变量类型做了标明。

var strMessage = "helloWorld"; // String类型var nMessage = 100; // Number类型// 如果有必要数字类型我也会进行细分var iMessage = 1; // int类型var fMessage = 0.5; // float类型var objMessage = null; // Object类型var bMessage = false; // Boolean类型

 

ECMAScript中有5种简单数据类型:Undefined、Null、Boolean、Number、String,还有1种复杂数据类型Object。

1、Undefined类型

 声明后未赋值的变量,或者未声明的变量,typeof的值都是Undefined。区别在于,未声明的变量在调用时会报错。

有鉴于此,变量声明之初初始化会十分有用。这样我们通过typeof测试变量类型,若变量为Undefined的话,则说明该变量是未赋值,而不是尚未初始化了。

2、Null类型

null值标识的是一个空指针对象,所以他的typeof值为“Object”。所以在初始化Object类型变量的时候,使用null作为初始化的值就可以了。

undefined派生自null。所以 alert(null == undefined); // true 。

3、Boolean类型

Boolean类型的true或者false,并不是单纯就指1或者0。可以说不同的数据类型,都可以转换成true或者false。

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined n/a(意思是“不适用”) undefine

 

 

 

 

 

 

4、Number类型

 Number类型数值字面量格式有三种:十进制(n)、八进制(0 + n)、十六进制(0x + n)。

var iNum = 55; // 十进制var octalNum = 070; // 八进制var hexNum = 0xA; // 十六进制

需要注意的是,八进制字面量在严格模式下是无效的,谨慎使用。

(1)浮点数

由于保存浮点数的内存空间是保存整数的两倍,所以凡是可以表示为整数的浮点数都会自动转化为整数。例如 1.、10.0 等。

对于极大或者极小的数值可以表示为浮点数,即科学计数法,例如 3.125e7 == 3.125*107 、 3e-7 == 3*10-7 等。

需要注意的是,浮点数的最高进度是17位小数,在进行计算的时候其精确度远不如整数。例如虽然 0.15 + 0.15 = 0.3 ,但是 0.1 + 0.2 = 0.30000000000000004 ,由此造成 0.1 + 0.2 == 0.3; // false 。所以不要用浮点数做比较。

1  2  3  4     
5 testDocument 6 13 14 15
16
17
22 +23
28 = 29
?30

a + b == c ?

31
32
33 49 50

效果如下:

(2)数值范围

查询浏览器数值上限使用 Number.MAX_VALUE ,下限使用 Number.MIN_VALUE 。

基本上所有浏览器的上限均为 1.7976931348623157e+308 ,下限均为 5e-324 。

超出数值范围,数值将被自动转换为特殊的Infinity(无穷)值。要想确定数值是否有穷,即是否位于数值范围内,可以使用 isFinite() 函数。

var nResult = Number.MAX_VALUE + Number.MAX_VALUE;alert(isFinite(result)); // false超出数值范围

(3)NaN(Not a Number)

首先要明确这个数值的应用。它是用于表示一个本来要返回数值的操作数未返回数值的情况。例如,任何数值除以0都会返回NaN。

NaN本身有两个特点:①任何涉及NaN的操作都会返回NaN;②NaN与任何值都不相等,包括其本身NaN,即 NaN == NaN; // false 。

ECMAScript定义了 isNaN() 函数,用来测定参数是否为NaN。这个函数会将参数自动转为数值,然后再进行测试。对于对象,该函数会自动调用对象的 valueof() 方法进行测试,如果不能,则继续调用对象的 toString() ,进行测试。

1  2  3  4     
5 testDocument 6 13 14 15
16
17

NaN == NaN?

18

10 == NaN? (10是一个数值)

19

"10" == NaN? (可以被转换成数值10)

20

"blue" == NaN? (不能转换为数值)

21

true == NaN? (可以被转换成数值1)

22

obj({"num1":1,"num2":2}) == NaN?

23
24
25
26 48 49

效果图:

(4)数值转换

有三个函数可以把非数值转换为数值: Number() 、 parseInt() 、 parseFloat() 。第一个可以用于任何数据类型,而后两个专用于字符串的转换。

使用一元加操作符也可以实现与 Number() 同样的效果: +value 。

1 
2 3 4 5
6 testDocument 7 14 15 16
17
18

"Hello World!" ==

19

"" ==

20

"hello123" ==

21

null ==

22

undefined ==

23

true ==

24

10 ==

25

10.5 ==

26

0xf ==

27

010 ==

28

"000010" ==

29

" 10" ==

30

" 123blue" ==

31

obj ==

32
33
34 59 60

显示效果:

1 
2 3 4 5
6 testDocument 7 14 15 16
17
18

"Hello World!" ==

19

"" ==

20

"hello123" ==

21

null ==

22

undefined ==

23

true ==

24

10 ==

25

10.5 ==

26

0xf ==

27

010 ==

28

"000010" ==

29

"10.5.23" ==

30

" 10" ==

31

" 123.23blue" ==

32

obj ==

33
34
35 61 62

显示效果:

注: parseInt() 和 parseFloat() 都是由两个参数的,第一个参数是需要转换的值,第二个参数是转换使用的基数(即多少进制),为了防止转换出现问题,使用多进制转换的时候可以制定基数,避免不必要的错误。

 5、String类型

在ECMAScript中字符串用双引号(")或者单引号(')都是可以的,但是为了做一个全方面发展的好程序员,还是区分对待比较好。就目前我学过的语言来说,双引号(“)多用于合法的字符串符号。

(1)字符字面量

这个就是String类型所说的转义字符的,对照表网上一搜一大堆,我就不特别列举了。需要注意的是一个转义字符就表示1个字符。

(2)字符串的特点

字符串是不可变的,也就是说一旦创建不可改变。这就使得修改字符串成为了一个先破后立的过程。

(3)转换为字符串

数值转换字符串都会转换成十进制,然后输出字符串。

转换字符串除了以下两个传统方法以外,使用 value + "" 也能达到转换字符串的效果。

 ① toString() 方法

null和undefined没有 toString() 方法,如果使用会报错。

1 
2 3 4 5
6 testDocument 7 14 15 16
17
18

null ==

19

undefined ==

20

true ==

21

255 ==

22

255 == (二进制)

23

255 == (八进制)

24

255 == (十六进制)

25

10.5 ==

26

0xf ==

27

010 ==

28

obj ==

29
30
31 57 58

 显示效果:

 

 ② String() 方法

1 
2 3 4 5
6 testDocument 7 14 15 16
17
18
26
27 59             
60
61
62 63

 显示效果:

 

6、Object类型

对象其实就是一组数据和功能的集合。

var obj = new Object(); // 可以创建一个对象

Object的每个实例都具有一下属性和方法:

① constructor :构造函数;

② hasOwnProperty :用以检查给定属性是否存在于当前对象实例中;

③ isPrototypeOf :用以检查传入的对象是否是传入对象的原型;

④ propertyIsEnumerable :用以检查给定的属性是否能够用for-in语句来枚举;

⑤ toLocaleString() :返回对象的字符串表示,该字符串与执行环境的地区相对应;

⑥ toString() :返回对象的字符串表示;

⑦ valueOf() :返回对象的字符串、数值或布尔值表示。通常与 toString() 方法的返回值一致。

 


本文内容包含学习过程中的认识和实际应用时的经验,会不断补充更新。最新更新时间(2018-02-01 16:43:26)。

转载于:https://www.cnblogs.com/tinyTea/p/8378333.html

你可能感兴趣的文章
python学习 第一天
查看>>
JS使用模板快速填充HTML控件数据
查看>>
EF项目中应用出现问题???
查看>>
在Xcode中编辑运行 Python 脚本
查看>>
bzoj1015:[JSOI2008]星球大战starwar
查看>>
Java HashMap和Hashtable的区别
查看>>
开机不登陆系统自动启动Vmware虚拟机(系统服务)
查看>>
线程相关函数(4)-pthread_mutex_lock(), pthread_mutex_unlock() 互斥锁
查看>>
学习新技术的 10 个建议
查看>>
浅谈Web网站架构演变过程
查看>>
css实现下拉菜单
查看>>
Spark Streaming事务处理彻底掌握
查看>>
数据的重要性
查看>>
解决合并检验反写收料通知单有小数的问题
查看>>
poj 2823单调队列模板题
查看>>
Linux内核配置浅析
查看>>
day 37 数据库MySQL的进一步认识
查看>>
python doc格式转文本格式
查看>>
SQL之经典SQL语句大全
查看>>
Autowired注解
查看>>