目录
数据类型转化(续Day 2)
转Boolean类型
// 1. 自动转换
// 在非boolean类型数据的运算中,&& 和 || 具有短路符的特性
// => 短路符:以&&为例 => 当左侧表达式为false,整个&&运算结果必然是false
// 以||为例 => 当左侧表达式为true,整个||运算结果必然是true
// => 短路符:&& || 运算时如果使用的是非boolean变量,运算结果会直接返回造成最终结果的变量
var flag1 = false && 100;
var flag2 = true && 100;
console.log( flag1 );
console.log( flag2 );
var str1 = "abc";
// var str1 = ""; // "" 空字符串转换结果为 false
var num1 = 100;
// 非boolean类型变量,遇到逻辑运算时,程序计算过程中会进行类型转换
var flag = str1 && num1;
console.log(flag)
var str2 = "abc";
var num2 = 100; // 0 转换的结果为 false
var flag3 = num2 && str2;
console.log(flag3);
// 转换规则
// 1. "" 空字符串转换结果为 false
// 2. 0 转换的结果为 false
// 3. null 转换的结果为 false
// 4. undefined 转换的结果为 false
// 2. 强制转换
var flag4 = Boolean( "aaa" );
console.log(flag4)
var flag5 = Boolean( "" );
console.log(flag5)
var flag6 = Boolean( 100 );
console.log(flag6)
var flag7 = Boolean( 0 );
console.log(flag7)
var flag8 = Boolean( null );
console.log(flag8)
var flag9 = Boolean( undefined );
console.log(flag9)
自动转换和比较运算符
// == < > <= >= != 只与值相关的比较运算符的转换规则
// 1. 比较符 左右 两侧数据是同类型数据,直接比较不转换
// 2. 比较符 左右 两侧数据类型不同,一定会触发数据类型转换
// 字符串 和 数值的比较
// => 字符串会先转换为数值,再进行比较
console.log( "10" == 10 ); // true
console.log( "10" > 10 ); // false
console.log( "abc" == 10 ); // false
// false => 先将"abc"转换为 NaN,再进行比较,返回false是因为NaN的比较不能使用==
console.log( "abc" == NaN );
// NaN 是一个特殊的标识值,存储的数据每次都是不同的
console.log( NaN == NaN ); // false
// NaN 的比较只能使用 JS 内置的 工具功能 isNaN()
console.log( isNaN( NaN ) ); // true
console.log( isNaN( "abc" ) ); // true
// booolean 和 数值的比较
// ==> boolean 类型值转换为 数值后进行比较
// true => 1
// false => 0
console.log( true == 1 ); // true
console.log( true == 100 ); // false
console.log( true >= 2 ); // false
console.log( true <= 0 ); // false
console.log( false == 0 ); // true
// 字符串和boolean
console.log( "false" == false ); // false
console.log( "100" == true ); // false
console.log( "1" == true ); // true
// null undefined 不做转换
// => 和其它任意值进行等值比较都是 false
// => 只有 null 和 undefined 相互或自身等值比较为 true
console.log( "" == null ); // false
console.log( false == null ); // false
console.log( null == null ); // true
console.log( null == undefined ); // true
// 总结
// 等值比较中,如果比较的数据类型一致,直接比较值,不做类型转换;
// 等值比较中,如果比较的数据类型不一致,统一转换为 数值 再进行比较;
// 其中 NaN 只能使用 isNaN 进行等值比较;
// null 和 undefined 只有和自身或相互比较时返回 true;
// 没有进行类型转化
console.log( "abc" == "abc" ); // true
顺序结构 : 再不介入其它代码的情况下,代码的定义顺序就是执行顺序
分支结构
// JS一条语句的结束,通过 ; 或者 换行 描述
// console.log(1) console.log(2)
// if 分支 => 条件和执行体之间不能出现;
// => 单分支: if(条件){ true-分支代码执行体 }
// => 二分支: if(条件){ true-分支代码执行体 }else{ false-分支代码执行体 }
// => 多分支:
// if(条件1){ 条件1-true-分支代码执行体 }
// else if(条件2){ 条件2-true-分支代码执行体 }
// ……
// => 多分支:
// if(条件1){ 条件1-true-分支代码执行体 }
// else if(条件2){ 条件2-true-分支代码执行体 }
// ……
// else{ 条件1和条件2和……都不成立-false-分支代码执行体 }
console.log("1.起床");
console.log("2.洗漱");
console.log("3.去车站");
console.log("4.验票");
var info = "带了身份证";
// var info = "身份证丢失";
// var info = "身份证在家";
if( info=="身份证丢失" ){
// 条件是 true 执行,条件是false 跳过
console.log("4.1.补办临时身份证");
console.log("4.2.重新验票");
console.log("5.候车");
console.log("6.检票");
console.log("7.进站");
} else if (info=="身份证在家"){
console.log("4.1. 改签");
console.log("4.2. 回家");
} else {
console.log("5.候车");
console.log("6.检票");
console.log("7.进站");
}
分支嵌套
// if(){
// if(){ …… }
// if(){ …… } else { …… }
// if(){ …… } else if(){ …… } else{ …… }
// }else{
// ……
// }
// 有一个num值,当该值是偶数时,输出“偶数”否则输出“奇数”
// 当为奇数时继续判断 ,是否是3的倍数,如果是输出“是3的倍数”否则输出“不是3倍数”
var num = 11;
if( num%2==0 ){
console.log("偶数");
}else{
console.log("奇数");
if(num%3==0){
console.log("3的倍数");
}else{
console.log("不是3的倍数");
}
}
if 分支 : 自定义判断条件的
// 判断年份对应的月份的天数是多少?
var year = prompt("输入年份");
var moth = prompt("输入月份");
// prompt 提供的是String数据
// 省略数据合法的判断
// if(moth==="2"){
// if( year%4==0&&year%100!=0 || year%400==0 ){
// console.log(29);
// }else{
// console.log(28);
// }
// }else if(moth==="1" || moth==="3" || moth ==="5" || moth ==="7" || moth ==="8" || moth ==="10" || moth === "12" ){
// console.log(31);
// }else{
// console.log(30);
// }
switch case 分支 :自定义判断用于恒等于条件
// 1. case不增加 break; 结束符时,是顺序执行
// 当某个case的条件成立后,后续没有遇到break的所有case的内容都会执行
// switch(用于恒等于比较的变量){
// case 等于的比较值:
// 执行代码;
// break;
//
// }
switch( moth ){
case "2":
// console.log("二月");
if( year%4==0&&year%100!=0 || year%400==0 ){
console.log(29);
}else{
console.log(28);
}
break;
case "1":
case "3":
case "5":
case "7":
case "8":
case "10":
case "12":
console.log("31");
break;
default:
console.log("30");
break;
}
// 总结:
// 1. 根据需要完成的页面可能存在的不同的执行代码进行拆分
// 2. 基于条件的定义,使用分支语句选择分支代码的执行