目录
一、javascript数据类型
数据类型指的是字面量的类型,在js中一共有六种数据类型
基本数据类型 | String | 字符串 |
---|---|---|
Number | 数值 | |
Boolean | 布尔值 | |
Null | 空值 | |
Undefined | 未定义 | |
引用数据类型 | Object | 对象 |
String字符串
- 在js中字符串需要使用引号引起来,使用双引号单引号都可以,但是不能混着用
- 同种类型引号不能嵌套,双引号不能嵌套双引号,单引号不能嵌套单引号
- 可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义
\" 表示 "
\' 表示 '
\n 表示换行
\t 表示制表符
\\ 表示 \
Number数值
- 在js中所有的数值都是Number类型,包括整数和浮点数(小数)。
- 可以使用一个运算符typeof来检查一个变量的类型。 语法:typeof 变量
检查字符串时,返回string
检查数值时,返回number
MAX_VALUE
js中可以表示的数字最大值 Number.MAX_VALUE=1.7976931348623157e+308
如果使用Number表示的数字超过了最大值,则会返回一个Infinity
Infinity
Infinity 表示正无穷
-Infinity表示负无穷
使用typeof检查Infinity会返回number
MIN_VALUE
js中可以表示大于0的最小值 Number.MIN_VALUE=5e-324
NaN
NaN是一个特殊的数字,表示Not a Number
使用typeof检查NaN也会返回number
浮点数运算
如果使用js进行浮点运算,可能得到一个不精确的结果
所以千万不要使用js进行对精确度要求比较高的运算
Boolean 布尔值
布尔值只有两个
- true 表示真
- false表示假
- 使用typeof检查一个布尔值时,会返回boolean
注意引号的作用
Null空值
- Null类型的值只有一个,就是null
- null值专门用来表示一个空的对象
- 使用typeof检查一个null值时,会返回object
Undefined未定义
- Undefined类型的值只有一个,就是 undefined
- 当声明一个变量,但是并不给变量赋值时,它的值就是undefined
- 使用typeof检查一个undefined值时,会返回undefined
Object对象
以上五种类型属于基本数据类型,基本数据类型都是单一的值,值和值之间没有任何的联系。
如果使用基本数据类型的数据,我们所创建的变量都是独立的,不能成为一个整体。
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
补充
基本数据类型和引用数据类型
js中的变量都是保存到栈内存中的,
基本数据类型的值直接在栈内存中存储,
值与值之间是独立存在,修改一个变量不会影响其他的变量
对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的空间,
而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,
当一个通过变量修改属性值时,另一个也会随着改变。
如果两个变量保存的是同一个对象引用,一个设置为null,不会影响另一个变量。
当比较两个基本数据类型的值时,就是比较值。
而当比较两个引用数据类型时,它比较的是对象的内存地址,
就算两个对象是一模一样的,地址不同也会返回false。
二、强制类型转换
将一个数据类型强制转换为其他的数据类型
类型转换主要指,将其他的数据类型,转换为String Number Boolean
1、其他数据类型转换为String
方式一:
调用被转换数据类型的toString()方法
该方法不会影响到原变量,它会将转换的结果返回
注意:null和undefined这两个值没有toString()方法,如果调用他们的方法,会报错。
方式二:
调用String()函数,并将被转换的数据作为参数传递给函数
使用String()函数做强制类型转换时,
对于Number和Boolean实际上就是调用toString()方法
但是对于null和undefined,就不会调用toString()方法
它会将null直接转换"null"
将undefined直接转换为"undefined"
方式三(隐式转换):
任何值和字符串相加都会先转换成字符串,再进行拼接。
利用此将一个任意数据类型转换为String
为任意的数据类型 + 一个空串""即可进行转换
这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String()函数
一元运算符
2、其他数据类型转换为Number
方式一:
使用Number()函数
- 字符串-->数字
- 如果是纯数字的字符串,则直接将其转换为数字
- 如果字符串中有非数字的内容,则转换为NaN
- 如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
- 布尔值-->数字
- true-->1
- false-->0
- Null-->数字 0
- Undefined-->数字 NaN
方式二:
使用parseInt()或parseFloat()函数
这种方式专门用来对付字符串
- parseInt()可以将一个字符串中的有效整数内容取出来,然后转换为Number
- parseFloat()获得有效的小数
- 如果对非String使用parseInt()或parseFloat(),它会将其转换为String然后再操作
注:可以利用parseInt()对小数取整。
方式三(隐式转换):
任何值做- * / 运算时都会自动转换为Number,利用此特点做隐式的类型转换,通过为一个值- 0 *1 /1来将其转换为Number,实际上它也是调用Number()函数,但是更方便。
对非Number类型的值进行一元运算时,同样会将这些值转换为Number然后再运算。(任何值做运算时都会自动转换为Number,利用此特点,为一个值使用+,来将其转换Number)
3、其他数据类型转换为Boolean
方式一:
调用Boolean()函数
- 数字-->布尔
除了0和NaN,其余都是true
- 字符串-->布尔
除了空串,其余都是true
- null和undefined都会转换为false
- 对象也会转换为true
方式二(隐式运算):
对非Boolean类型的值进行!取反运算时,会将数据类型转换为Boolean然后再运算。利用此特性,两次取反,将任意数据类型转换为布尔值。原理同Boolean()函数一样。
补充
其他进制的数字
- 在js中,如果需要表示16进制的数字,需要以0x开头
- 2进制以0b开头,但不是所有浏览器都支持
- 8进制以0开头
使用parseInt()将字符串转为Number时,对于"0xx"这种以0开头的字符串,有些浏览器会当成8进制解析,有些会当成10进制解析。
解决方法: 在parseInt()中传递第二个参数,来指定数字的进制(a = parseInt(a,8);)