目录
[一、数值型 Number](#一、数值型 Number)
[5、typeof 来检查一个变量的类型,并输出](#5、typeof 来检查一个变量的类型,并输出)
[三、布尔值 Boolean](#三、布尔值 Boolean)
[四、未定义 Undefined](#四、未定义 Undefined)
[两次取反 !!双非 隐式转换](#两次取反 !!双非 隐式转换)
前言:
为什么需要数据类型?
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间 ,于是定义了不同的数据类型。简单来说,数据类型就是数据的类别型号
变量的数据类型:
JS是一种弱类型或者动态语言。这就意味着不用提前声明变量的类型,在程序运行过程中,变量的数据类型是根据等号右边的值来自动确定的。
JS拥有动态类型,同时也意味着相同的变量可用作不同的类型
数据类型的分类:
简单(一般)数据类型(Number、String、Boolean、Udefined、Null、Symbol、binInt)
复杂(引用)数据类型(Object,Function、Array、Date、RegExp、Math,Number,String,Boolean·····)
简单数据类型:
|-----------|-----------------------------|------------|
| 简单数据类型 | 解释说明 | 默认值 |
| Number | 数值型,包含整数值和浮点型,如12,1.2 | 0 |
| Boolean | 布尔值类型,true、false,等价于1、0 | false |
| String | 字符串类型,如'王二麻',字符串都带引号 | '',"",`` |
| Undefined | 未定义,例如: var a;此时a=undefined | undefined |
| Null | 空值;例如 :var a=null | null |
一、数值型 Number
1、数字型进制
常见的进制有二进制、八进制、十进制、十六进制,在JS中,八进制前面加0,十六进制前面加0x
2、数字型范围(JS中数值的最大值和最小值)
Number.MAX_VALUE //1.7976931348623157e+308
如果使用Number表示的数字超过了最大值,则会返回一个Infinity 表示正无穷
使用typeof 检查infinity也会返回number
Number.MIN_VALUE 大于0的最小值 //5e-324
NaN 是一个特殊的数值,表示Not A Number, 非数值
使用typeof 检查NaN也会返回number
var a = 123;
a = 456.789; //下面的数值会覆盖上面的
var b = 123; //这是数字123
console.log(typeof a); //number
a = Number.MAX_VALUE; //最大值
// console.log(a)
a = Number.MIN_VALUE; //最小值
// console.log(a)
a = "abc" * "bcd";
//console.log(a); //NaN
3、数值型计算
在Js中整数的运算基本可以保证精确
如果使用JS进行浮点数的运算,可能得到一个不精确的结果
javascript
var c = 1 + 2;
console.log(c);//3
var d = 0.1 + 0.2; //如果使用JS进行浮点元素,可能得到一个不精确的结果
console.log(d);//0.30000000000000004
4、isNaN
用来判断NaN,并返回一个布尔值,如果判断的是NaN,则返回true,
如果判断的不是NaN,则返回false
判断一个值能否被 Number() 合法地转化成数字**。**
javascript
console.log(isNaN(123));//false
console.log(isNaN(NaN));//true
5、typeof 来检查一个变量的类型,并输出
语法:typeof 变量
检查字符串时,会返回string; 检查数值时,会返回number·····
返回的string、number、boolean等值,这些返回值的类型是string
二、字符串string
1、基本语法:
字符串型可以是引号中的任意文本,其语法为双引号""和单引号''、反引号``,一般js中建议用双引号"",js可以用单引号嵌套双引号,或者用双引号嵌套单引号
2、字符转义符:
转义符都是\开头的,,写在当单双引号里面的,常用的转义符及其说明如下
|------|-------------------|
| 转义符 | 解释说明 |
| \n | 换行符,n表示newline的意思 |
| \\ | 斜杠\ |
| \' | '单引号 |
| \" | "双引号 |
| \t | tab缩进 |
| \b | 空格,b是blank的意思. |
3、字符串长度
字符串是由若干字符组成的,这些字符的数量就是字符串的长度。length属性可以获取整个字符串的长度
4、字符串拼接
多个字符串之间可以使用+进行拼接,其拼接方式为字符串+任意类型=拼接新字符串 ;
拼接前会把字符串相加的任意类型转成字符串,再拼接成一个新的字符串;
5、字符串拼接变量
字符串和变量拼接,变量不能写在引号里面,需要用 + 拼接变量
分 单引、双引、反引(反引可以识别换行)
javascript
let age=20
let res1 = "我今年"+age+"岁了";
console.log(res1);
let res2='我今年'+age+'岁了'
console.log(res2);
let res3=`我今年`+age+`岁了`
res3=`我今年${age}岁了`
三、布尔值 Boolean
布尔值只有两个值,用来做逻辑判断
true -表示真 false -表示假
使用typeof检查一个布尔值时,会返回boolean
当进行数值运算的时候,true为1,false为0
四、未定义 Undefined
Undefined类型的值只有一个,就是undefined
当声明了一个变量,但是并不给变量赋值时,它的值就是undefined
使用typeof检查一个undefined时也会返回undefined
当进行数值运算时,结果为NaN,除了和字符串做拼接
五、空值Null
null这个值专门用来表示空
使用typeof检查一个null值时,会返回object
当进行数值运算时,null为0
使用场景:1、不知道是什么对象先占位
2、释放内存
面试题:用typeof去检测null得到的是什么,为什么?
Javascript在存储数据的时候,不同的数据在底层存储都使用二进制的方式存储,在Javascript中如果二进制的前三位都为0的话,就会被判断为object,null是js后期添加的数据类型,它的二进制存储表示形式为全是0,自然前三位也是0,因此执行typeof时会返回"object",这本身也是这门语言的BUG。
可以使用Object.prototype.toString.call()方法来解决这个问题
javascript
let n = null;
let res = Object.prototype.toString.call(n);//通用的数据类型检测方式
console.log(res);
数据类型转换
使用表单、prompt获取过来的数据默认是字符串类型的,此时就不能直接进行数值运算,需要将字符串转为数值类型
强制类型转换:指将一个数据类型强制转换为其他的数据类型
通常三种转换
1、转换为字符串类型
2、转换为数字型
3、转换为布尔型
1、转换为字符串类型
.toString()方法
调用被转换数据类型的toString()方法 语法:变量.toString()
该方法不会影响到原变量,它会将转换的结果返回 语法:str=变量.toString()
注意:null和undefined这两个值没有toString的方法,如果调用他们会报错
javascript
// 简单(一般、基本)数据类型:Number,String,Boolean,Undefined,Null
// 数据类型的相互转换
// 将数据转成string类型 Number Boolean,Undefined,Null
let data = 1
data = true
data = undefined
data = null
// 方式一:toString() 变量名.toString()
//null, undefined无法通过.toString()方式转换为string类型
// let res = data.toString()
console.log('data转换前', data, typeof data);
console.log('data转换后', res, typeof res);
String()方法
调用String()函数,并将被转换的数据作为参数传递给函数, 语法:String(变量)
使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString的方法
但对于null和undefined,就不会调用toString()方法, 它会将null直接转换为"null", 将undefined 直接转换为"undefined"
拼接字符串(隐式转换)
和字符串拼接的结果都是新字符串,语法:变量 + ' '
2、转换为数值型
方式一
使用Number()函数
字符串-->数字
1:如果是纯数字的字符串,则直接将其转换为数字
2:如果字符串中有非法的数字的内容,则转换为NaN
3:如果字符串是一个空串,或者全是空格的字符串,则转换为0
布尔值--->数字
true--1 false--0
Null --->数字 0
Undefined --->数字 NaN
方式二
parseInt() 取有效整数
parseFloat() 取有效浮点数
可以将一个字符串中的有效的数取出来,转换为Number,
如果对非String使用parseFloat()跟parseInt(),它会先将其转换为String,然后再操作
方式三
算术运算 -0 *1 /1 隐式转换(+ 会拼串)
javascript
a = "123";
a = a - 0;//123
a = a / 1;//123
a = a * 1;//123
console.log(a, typeof a);
方式四
正号 隐式转换
注意和加号的区别,这是写在字符串前面的
javascript
let data = '123'
data = '123abc^%w'
data = ''
data = true
data = false
data = undefined
data = null
let strData = +data
console.log(data, typeof data, '旧值');
console.log(strData, typeof strData, '新值');
3、转换为布尔型
Boolean()函数
将其他类型转成布尔值
数字-->布尔 除了0跟NaN是false,其他的都是true
字符串-->布尔 除了空串是false,其余都是true
null和undefined都会转换为false
对象会转换为true
两次取反 !!双非 隐式转换
javascript
let s1 = "";
s1 = "abc";
s1 = undefined;
s1 = null;
s1 = 123;
s1 = 0;
console.log("原值:", s1);
console.log("原值类型:", typeof s1);
let res = !!s1;
console.log("转换之后值:", res);
console.log("转换之后值类型:", typeof res);
面试题:数据转成为false的几种情况?(6种)
0, ' ', false, undefined, null, NaN