关系运算~比较运算
<script>
// 关系运算:值比较
// 所有的比较运算得到的结果都是布尔类型:true和false
let res = 1 > 2
console.log(1 > 2)
console.log(2 > 1)
console.log(2 > 2)
console.log(2 >= 2)
console.log(1 == '1') // true
// 本质:系统将字符串“1”变成了数字1(类型转换)
console.log(1 == true) // true(true在系统内部是用1来存储)
console.log(0 == false) // true
// 值比较:不在乎类型
</script>
关系符运算~全等
<script>
// 全等:比值 也要比 类型
console.log(5 === '5') // false
console.log(5 !== '5') // true
// 用户输入
let u = prompt('请输入一个数字')
console.log(u === 5) // false
// 值比较和全等比较选择
// 1. 如果要求严格:一定是用全等
// 2. 不严格:值比较
// 只能值比较:大于 小于
</script>
注意:
◆ ===:全等,左边的值和类型与右边相同,得到true,反之false ◆ !==:不全等,左边的值和类型只要有一个与右边不同,得到true,反之false//
逻辑运算~与&& 或|| 非!
<script>
// 逻辑运算:与&& 或|| 非!
// &&:同真则真,其他为假
console.log(50 > 18 && 50 > 20) // true
console.log(50 > 18 && 50 > 50) // false
// 未来:if(50 > 18 && 50 > 20)
// ||:同假为假,其他为真
// 什么情况下能成为迪丽热巴的男朋友
// 要么真爱 要么 世界上只有我一个男人
// let love = prompt('迪丽热巴喜欢我吗?请输入是或者否')
let man = 1
// console.log(love == '是' || man == 1) // true
man = 3000000000
// console.log(love == '是' || man == 1) // 不确定:true 或者 false
// !:取反
console.log(!true) // false
console.log(!false) // true
注意:
◆ &&:同真则真,其他为假/ ◆ ||:同假则假,其他为真// ◆ !:真假假真
逻辑运算~短路运算
<script>
// 逻辑与 短路运算
let a = 1;
let b = 2;
//第一个值为假 则 直接中断运算
a > 1 && (b += 2);
console.log(b);// 值为 2
//第一个值为真 则 返回第二个值
a > 0 && (b += 2);
console.log(b);// 值为 4
//逻辑或 短路运算
let c = 1;
let d = 3;
//第一个值为真 则 直接中断运算
c > 0 || (d += 2);
console.log(d);// 值为 3
//第一个值为假 则 返回第二个值
c > 2 || (d += 2);
console.log(d);// 值为 5
// 总结:逻辑与 和 逻辑或的结果,不一定是布尔值。要看他两个左右两边的值结果到底是什么、
</script>
特殊数字-NaN和isNaN判定NaN
<script>
// NaN:Not a Number,不是一个数字
// 凡是不是数字的东西转成数字最终结果:NaN
console.log('1' - 1) // 0
console.log('a' - 1) // NaN
// NaN的特性
// 1. 不能参与运算:都是NaN
console.log(NaN + 1) // NaN
// 2. 不能参与比较:都是false
console.log(NaN < NaN + 1) // false
console.log(NaN == NaN) // false
// 第一个NaN : ‘a’ - 1
// 第二个NaN : ‘a’ - 2
// 3. 系统提供了一个函数:isNaN(内容)
// 不是数字:true
// 是数字:false
console.log(isNaN('a')) // true
console.log(isNaN(1)) // false
console.log(isNaN('1')) // false
// 在程序里面:绝大部分时候是不区分数字是否带引号:但是在 + 号面前
// 如和判定用户输入的是不是数字?用户输入prompt()一定是字符串:只能用isNaN()判定
</script>
注意:
◆ NaN代表一切不是数字的数字
◆ NaN与任何数据的运行结果都是NaN
◆ NaN与任何数据的判定结果都是false
◆ isNaN()才能判定NaN
字符串比较规则
<script>
// 字符串:不比长度
console.log('z' < 'abcdefg')
// 1. 字符串与长度无关
console.log('a' == 'A')
// 2. 字符串比较区分大小写(ASCII值不相同)
// A == 65 a == 97
console.log('abc' < 'abd')
// 3. 一个一个的位置进行比较:直到有一个位置比出结果就结束
// ? 中 和 国 谁大?
console.log('中' > '国')
console.log('中' < '国')
console.log('罪' < '过');
// 中国不存在比较关系
// 1. 有的逻辑是:比拼音 中 应该 大于 国
// 2. 中文有自己的编码规则:\u 涉及到编码顺序
</script>
如何交换两个变量的值
<script>
var temp;
var apple1 ='红苹果';
var apple2 ='烂苹果';
temp = apple1;
apple1 = apple2;
apple2 = temp;
console.log(apple1);
console.log(apple2);
</script>
转换数字类型
<script>
//1parselnt (变量) 可以把 字符型的转换为数字型 得到的是整数
// console.log(parselnt(age));
console.log(parseInt('3.14'));//3取整
console.log(parseInt('120px'));//120 会去掉px 这个单位
console.log(parseInt('rem120px'));// NaN
//2.parseFloat(变量) 可以把 字符型的转换为数字型 得到的是小数点 浮点数。
console.log(parseFloat('3.14'));// 3.14
console.log(parseFloat('120px'));// 120 会去掉px 这个单位
console.log(parseFloat('rem120px'));// NaN
</script>
数据类型转换~布尔
<script>
// Boolean()
// 只有7种转false,其他都是true
console.log(Boolean(0))
console.log(Boolean(0.0))
console.log(Boolean(NaN))
console.log(Boolean(''))
console.log(Boolean(undefined))
console.log(Boolean(null))
console.log(Boolean(-0))
console.log(Boolean(-1))
console.log(Boolean(Infinity))
// 转布尔使用较多的:系统内部
// if() for() while() do-while() !
</script>
隐式转换
<script>
// 隐式转换场景
// 1. 转数字
console.log('1' - 1) // 算术运算符:+除外
console.log(true > 0) // 有数字参与的比较
// 在数据前面使用 + 号
// let u = +prompt('请输入数字')
// console.log(u, typeof u)
// 2. 转字符串:有字符串参与的 + 运算
console.log('1' + 1)
// 3. 转布尔:! 逻辑非
console.log(!1)
// 转布尔隐式转换挺多:if() while() for()...
// 应该是让系统转好还是主动写代码转
// 主动转:把控代码的安全(建议),让代码的可读性增加
// JS中,可以让系统自动转
// 补充:类型转换不会改变数据本身
let s1 = '123'
console.log(Number(s1))
console.log(s1) // 不会改变数据本身
// 如果要改变数据本身?改完之后重新赋值
s1 = Number(s1)
console.log(s1);
</script>