1. 五种字符串基本类型
1.1. 字符串string
字符串,一切以 单引号'' 双引号"" 反引号``包起来的内容,三种引号都可以,建议统一只写一种,反引号可以用来解析变量
作用 : 用于展示文本
console.log('我是')
console.log("双引号")
console.log(`反引号`)
// 字符串嵌套(可以用转义字符\输出引号)
console.log("我'喜欢'你")
console.log('我"喜欢"你')
// 组合类型
console.log('教室401');
// 只写张三不加引号控制台会报错
反引号支持文本内容换行,同时支持写${变量名}读取变量的值
1.2. 数字number
数值,即一切数学中的数字
作用:用于数学计算
console.log(123)//123
// 正无穷 首字母要大写 仍然是数字类型
console.log(Infinity)//Infinity
// 负数小数都可以
console.log(-2)//-2
1.3. 布尔型bool/boolean
布尔,只有两个值 : true(真)false(假)
作用 : 用于条件判断:true:条件成立 ,false:条件不成立
console.log(true)
console.log(false)
1.4. 未定义undefined
未定义 ,只有一个值 undefined
console.log(undefined)
- 只声明变量,不赋值的情况下,变量的默认值为 undefined
- 三元表达式,判断条件后。代码1或者代码2没有结果时,为undefined
1.5. 空值null
空值 只有一个值 null,null值只有自己手动赋值才会出来,其他未出现的值都是编译器都解析为undefined
console.log(null)
控制台字符串是黑色,数字是蓝色。布尔型是蓝色,undefined和null是灰色
1.6. undefined与null区别
定义:
- undefined : 未定义,本来该有值,但是还没给。 当变量只声明,但是没有赋值。此时默认值是undefined 通俗地讲 : undefined相当于期房。 买了房,但是房子还没建出来。未定义
- null : 有定义为空值,可能为空对象。 变量有赋值但是为空。 通俗地讲 : null相当于毛坯房。买了房,但是房子没住人,里面是空的。
相同点:值相等,转布尔类型都是false
console.log(undefined == null) //true
console.log(Boolean(undefined)) //false
console.log(Boolean(null)) //false
不同点:数据类型不同,转number类型值不同
console.log(undefined === null) //false
console.log(Number(undefined)) //NaN
console.log(Number(null)) //0
2. typeof检测数据类型
语法:typeof 数据 或者 typeof (数据)
结果:得到一个字符串来告诉你这个数据是什么类型
console.log(typeof 123) //number
console.log(typeof '123') //string
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
/* object数据类型,可以认为JavaScript中顶级数据类型.在JavaScript绝大多数高级类型对象都是object类型 */
console.log(typeof null) //object
3. 数据类型转换
数据类型不一致,在进行运算时得不到预期计算结果,需要先进行转换
3.1. 显式转换
显式转换:程序员主动使用语法去转换类型(代码阅读性更高 一看就知道在干什么)
3.1.1. 转number类型
很少使用number转换,常用是前面加一个+号
- 字符串类型转number
| 类型 | 代码 | 备注 |
|---|---|---|
| 转整数 | parseInt(数据) | 不是整数只得到整数部分的数字部分(字符串和数字类型都可以) |
| 转小数 | parseFloat(数据) | 不是小数只得到小数点前面的整数部分(字符串) |
一般在字符串前面加一个+号就会自动转换成number类型
+prompt('请输入年龄')
- 非字符串类型转number 错误:console.log(number(true)) 记住首写字母N要大写!
console.log(Number(true)) // 1
console.log(Number(false)) // 0
console.log(Number(undefined)) // NaN
console.log(Number(null)) // 0
NaN是number类型中一个特殊值,有以下特点
- NaN表示错误的运算。 产生的原因一般是代码出bug
- 不能参与任何运算,结果一律是NaN(关系表达式中一律为false)
console.log('张三' - '李四') // NaN console.log(Number('张三')) // NaN console.log(NaN + 1) //NaN console.log(NaN > 0) //false console.log(NaN && 1 > 0) //NaN
3.1.2. 转string类型
很少使用转string类型
- String(数据) 首写字母S要大写!
console.log(String(123)) //'123'
console.log(String(true)) //'true'
console.log(String(undefined)) //'undefined'
console.log(String(null)) //'null'
-
变量名.toString() 只能转数字和布尔,并且前面只能是变量名
- 如果是undefined与null,这种方式会报错
- 这种方式可以支持进制转换。 例如把 十进制转十六进制,仍然是字符串类型
let num = 10
// 括号类不加任何内容
console.log(num.toString()) //'10'
// 括号类加上进制类型
console.log(num.toString(16)) //'a'
${num}在反引号中使用变量名来转换为字符串其实更方便
3.1.3. 转boolean类型(重点)
最重要的一种数据转换,用的最多的
-
false:有7种数据会得到false (需要记住)
- '' 空字符串
- 0 -0 NaN 数字正负0 NaN
- null undefined 两种数据类型
- false 本身
-
true:除false 7种之外的一切数据
3.2. 隐式转换
隐式转换 :当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算
布尔隐式转换是用的最多的
3.2.1. 转换字符串
连接符+ +号两边只要有一边是字符串,此时+就是连接符
console.log('1' + true) //1true '1'+String(true)
3.2.2. 转换数字算术运算符
算书运算符+ - * / %两边的左右值自动转换成number
console.log('10' - 1) //9 Number('10')-1
console.log(1 + true) //2 1+number(true)
console.log(+'10') //10 数学正号
3.2.3. 转换布尔
逻辑非 !,if的条件和while的条件都会实现自动转换
console.log(!1) //false !Boolean(1)
console.log(!null) //true !Boolean(null)