JS的基本数据类型、数据类型转换、运算符、条件分支语句、循环控制语句
一、JS的基本数据类型
JS 把一个变量可以存储的各种各样的数据, 做了一个区分,分成了两个大的类型。
基本数据类型(简单数据类型)和复杂数据类型(地址数据类型/引用数据类型=>Object、Function)
1.Number(数值型)
一切十进制表示的数字;
一切浮点数(小数);
其他进制表示的数字;
=> 十六进制, 以 0x 开头
=> 八进制, 以 0 开头
=> 二进制, 以 0b 开头
科学计数法;
=> 比较大的数字使用科学计数法表示
=> 2e5 2 * 10的5次方
NaN;
=> Not a Number: 非数字
2.String(字符串)
在 JS 里面一切使用引号(双引号, 单引号, 反引号) 包裹的内容都是字符串;
表示一段文本内容, 是一个字符一个字符连接起来的内容;
当你在字符串里面只写数字的时候, 也不是数值类型;
=> 也是字符串类型
在字符串里面, 空格是占位的;
var s2 = '123'//字符串
console.log(s2)
var n1 = 123//数值
console.log(n1)
3.Boolean(布尔型)
在 JS 里面, 布尔只有两个值
=> true 表示真, 再计算机存储的时候就是 1
=> false 表示假, 再计算机存储的时候就是 0
在运算过程中有什么意义
=> 主要用来做判断
=> 例子:
-> a > b 如果得到 true 表示这个表达式时 真的
-> a < b 如果得到 false, 表示这个表达式是 假的
4.Null(空值)
Undefined 空
-> undefined
-> 这里本该有一个值, 但是没有, 就是 undefined
Null 空
-> null
-> 这里有一个值, 有一个空值
5.检测数据类型
检测数据类型
+ 在运算的过程中, 有的数据不是我们自己写的
+ 有可能是通过运算得到的, 有可能是别人给的
+ 为了保证程序的正确运行, 我们需要检测数据变量
关键字 typeof
+ 两种用法
1. typeof 变量
=> 语法: typeof 要检测的变量
=> 返回值(结果): 以字符串的形式给你的变量数据类型
2. typeof(变量)
=> 语法: typeof(要检测的变量)
=> 返回值: 以字符串的形式给你变量的数据类型
+ 两种语法的区别
1. typeof 只能检测紧跟着的一个变量
2. typeof() 先运算小括号里面的结果, 然后使用 typeof 去检测结果的数据类型
+ typeof 的返回值
=> 注意: typeof 的返回值是一个字符串
=> 当两个及以上 typeof 连用的时候, 一定得到 string
=> 只能准确的检测基本数据类型
-> 数值: number
-> 字符串: string
-> 布尔: boolean
-> undefined: undefined
-> null: object
二、数据类型的转换
1.转数值
- 把其他数据类型转换为数值类型
-
Number()
+ 语法: Number(你要转换的数据)
+ 返回值: 转换好的数据
+ 特点:
=> 回把你要转化的内容当作一个整体来看代
=> 能转换成数字结果, 就是数字结果
=> 不能转换成数字结果, 就是 NaN- parseInt()
+ 语法: parseInt(你要转换的数据) + 返回值: 转换好的数据 + 特点: => 把你要转换的任何内容一位一位的看 => 如果第一位就不能转换成数字, 那么直接给 NaN => 如果第一位可以, 就看第二位, 第一位保留 => 以此类推, 直到一个不能转换成合法数字的位置为止 => 注意: 不认识小数点
- parseFloat()
+ 语法: parseFloat(你要转换的数据) + 返回值: 转换好的数据 + 特点: => 和 parseInt 的解析规则一模一样 => 只不过多认识一个小数点
- 取正负值
+ 语法: +变量 或者 -变量 + 返回值: 转换好的数据结果 + 特点: => 和 Number 的解析规则一模一样
- 非 加法 的数学运算
+ 语法: a * 1 a - 0 a / 1 + 特点: => 和 Number 方法解析规则一模一样
2.转字符串
-
把其他数据类型转换成字符串类型
1. String() + 语法: String(你要转换的数据) + 返回值: 转换好的数据 + 特点: => 任何数据类型都能转换 2. toString() + 语法: 你要转换的数据.toString() + 返回值: 转换好的数据 + 特点: => undefined 和 null 不能转换 3. 加法运算 + 再 JS 里面, 加号(+) 有两个意义 1. 进行字符串拼接 => 只要符号任意一边是字符串的时候, 就是字符串拼接 2. 进行数学运算 => 只有两边都是数字或者布尔的时候, 会进行数学运算 扩展: 报错信息 Uncaught TypeError: Cannot read property 'toString' of undefined => 你的代码里面一定有一个 xxx.yyy => 之所以报错, 因为 xxx 是 undefined Uncaught TypeError: Cannot read property 'toString' of null => 你的代码里面一定有一个 xxx.yyy => 之所以报错, 因为 xxx 是 null
3.转布尔
-
把其他数据类型转换成布尔数据类型
1. Boolean() + 语法: Boolean(你要转换的数据) + 返回值: 转换好的数据 + 特点: => 再 JS 里面只有五个内容转换成 false -> 0 -> 空字符串('') -> NaN -> undefined -> null => 其他所有内容转换完毕都是 true
三、运算符
1.数学运算符
-
进行数学运算的符号
- “+”
=> 有两个含义
=> 字符串拼接
=> 数学运算 - “-”
- “*”
- “/”
- “%”
=> 取两个数字的余数
=> 被除数 / 除数 = 商 … 余数
=> 得到不能被整除的部分
3 % 10 得到 3
10 % 3 得到 1 - 取幂
=> a ** b 就是 a 的 b次方
- “+”
2.赋值运算符
-
进行数据赋值的符号
- =
赋值: 把等于号右边的给到左边的变量 - +=
加法和赋值的合作
a += b 等价于 a = a + b
再自己的基础上进行叠加 - *=
乘法和赋值的合作
a *= b 等价于 a = a * b
再自己的基础上进行累积 - /=
- %=
- -=
- =
3.比较运算符
两个数据进行比较的符号
1. “>”
左边大于右边, 得到 true
左边不大于右边, 得到 false
2. <
左边小于右边, 得到 true
左边不小于右边, 得到 false
3. >=
左边大于或者等于右边, 得到 true
左边小于右边, 得到 false
4. <=
左边小于或者等于右边, 得到 true
左边大于右边, 得到 false
5. ==
比较两边的数据值是不是相等, 不管数据类型
6. ===
比较两边的数据是不是相等, 值和数据类型都要比较
7. !=
比较两边的数据值是不是不等, 不管数据类型
8. !==
比较两边的数据是不是不等, 值和数据类型都要比较
当数据类型不一样的时候, 就是 true
4.逻辑运算符
对数据进行逻辑运算
1. && 与(且)
运算符两侧都是 true 的时候, 得到 true
只要任意一边是 false, 得到的结果就是 false
2. || 或
运算符两侧有任意一边是 true, 得到结果就是 true
只有两边都是 false 的时候, 得到的结果才是 false
3. ! 非(取反)
本身是 true, 结果就是 false
本身是 false, 结果就是 true
双取反可以转布尔
5.自增自减运算符
是一元运算符的一种
一元: 一个符号带一个变量就能运算
=> +变量
=> -变量
=> !变量
自增 ++
=> 前置++
-> ++变量
=> 后置++
-> 变量++
=> 共同点
-> 只要执行了, 那么变量本身一定会改变(再自身的基础上 +1)
=> 区别: 在于参与运算的时候
-> 前置++ 再参与运算的时候, 先改变变量本身的值, 用改变以后的去进行运算
-> 后置++ 再参与运算的时候, 先把变量本身的值拿过来参与运算, 然后再改变变量的值
=> 当一个运算表达式出现多个 ++ 的时候
-> 按照从左到右的顺序依次一个一个的执行
自减 - -
=> 前置–
-> --变量
=> 后置–
-> 变量–
=> 共同点
-> 只要执行了, 那么变量本身的值一定会改变(在自身的基础上 -1)
=> 区别: 再参与运算的时候
-> 前置-- 再参与运算的时候, 先改变变量的值, 用改变以后的值参与运算
-> 后置-- 再参与运算的时候, 先把变量本身的值拿过来参与运算, 然后再改变变量的值
四、条件分支语句
- 根据一个条件来决定是不是执行某一段代码
+ 分成两种
1. if
2. switch
1.if语句
四种书写方式
1-1. if (条件) { 要执行的代码 }
=> 当条件满足(表达式位 true)的时候, {} 里面的代码执行
=> 当条件不满足(表达式为 false)的时候, {} 里面的代码不执行
1-2. if (条件) { 要执行的代码 } else { 要执行的代码 }
=> 当条件满足的时候, 执行 if 后面的 {}
=> 当条件不满足的时候, 执行 else 后面的 {}
=> 两个代码段必然会执行一个
1-3. if (条件1) { 条件1要执行的代码 } else if (条件2) { 条件2要执行的代码 }
=> 从第一个开始, 那一个条件满足, 执行哪一个 {} 里面的代码
=> 如果前面的满足了, 那么后面的就都不执行了
=> 若干个大括号, 最多只能执行一个
1-4. if (条件1) { 条件1要执行的代码 } else if (条件2) { 条件2要执行的代码 } else { 所有条件都不满足的时候执行的代码 }
=> 从第一个开始, 哪一个满足条件, 执行哪一个 {} 里面的代码
=> 前面的满足了, 后面的就都不执行了
=> 所有条件都不满足的时候, 执行 else 里面的代码
=> 若干个 {}, 必然会有一个执行
2.switch语句
条件分支语句的一种
+ 语法: switch (要判断的变量) {
case 情况1:
情况1执行的代码
break
case 情况2:
情况2执行的代码
break
default:
所有条件都不满足的时候执行的代码
}
+ 注意:
1. 我们的每一个 case 和判断的变量的关系必须是 === 才叫做满足
2. switch 语句, 只能判断准确的某一个字面量值, 不能判断范围
3. 每一个 case 后面的 break
=> 当你书写 break 的时候, 执行完毕这个 case 内容, 就结束了
=> 当你不写 break 的时候, 执行完毕这个 case, 不管下一个 case 是不是满足, 都会执行
=> 一直到遇到一个 break 为止, 或者到 switch 结束
4. break 的穿透, 是从第一个满足条件的 case 开始进行穿透
5. default 可以写可以不写
=> 作用类似于我们 if 语句里面的 else
=> 当所有条件都不满足的时候, 执行 default
五、循环控制语句
1.while
-
分支: 根据条件来决定是不是执行某一段代码
+ 循环: 根据条件来决定一段代码重复执行多少次循环成立的条件 1. 初始值, 作为循环的开始 2. 条件判断, 决定要不要继续循环 3. 要重复执行的代码 4. 改变初始值, 为了让循环有结束 while 循环的过程 1 234 234 234 ... 2 while 循环的语法 var n = 1 while (条件) { 重复执行的代码 n = n + 1 }
2.do…while
-
也是我们循环语句的一种
+ 语法 do { 要重复执行的代码 } while (条件) + 和 while 循环的区别 => 不管条件是不是成立, 都先执行一遍 => 只在第一次条件就不成立的时候会有区别
3.for
- 循环结构语句 - for
-
+ 第一: 将来的应用是最多的 + 第二: 书写很诡异(代码糖) => 代码糖: 用起来方便, 写起来方便, 看起来不方便 + 语法: for ( var i = 0; i < 10; i++ ) { 重复执行的代码 } + 标准语法: var i = 0 for ( ; i < 10; ) { 重复执行的代码 i++ }
4.break
循环控制语句 - break
+ 当你在一个循环里面执行到 break 关键字得时候
+ 会直接结束整个循环
5.continue
循环控制语句 - continue
+ 使用在循环里面得关键字
+ 当代码执行到 continue 关键字得时候, 会结束循环得本次, 继续下一次
6.JS标记语法
循环控制语句 - JS 标记语法
+ break 关键字可以跳出循环, 但是是跳出当前循环
+ 标记语法, 你自己做一个记号, 你向跳到哪里跳到哪里
+ 直接在循环得开始位置做一个 标记
名字:
+ 当你准备跳出得时候
break 标记
直接跳转到标记代表得循环结束位
here:
for (var i = 1; i <= 5; i++) {
for (var j = 1; j <= 3; j++) {
if (i === 3 && j === 2) {
console.log('看到半条虫子')
break here
}
console.log('吃的第 ' + i + ' 个包子得第 ' + j + ' 口')
}
console.log('=================')
}