数据类型转换和运算符

(一)if else语句

if else用来表示中文里的,如果....,就....,否则....

// 条件为true, 执行if后面的括号代码, 否则执行 else 后面括号代码
if(条件) {
    // todo
}else{
    // todo
}

// 多重判断
if(条件){
    // todo
} else if(条件) {
    // todo
} else {
    // todo
}

例1:是否下雨

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>控制台输出内容</p>
    <script>
        // 条件为true时,执行if后面的内容,否则执行else后面的内容
        // 是否下雨
        var isRaining = false;
        if (isRaining){
            console.log('下雨了,带上伞');
        }else{
            console.log('今天天气真好')
        }
    </script>
</body>
</html>

例2:多重判断

根据用户的输入判断用户的性别, 输入1弹出男性, 输入2弹出女性, 输入其它, 弹出性别未知

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 根据用户的输入判断用户的性别,输入1弹出男性,输出2弹出女性,输入其它的,弹出性别未知
        // 声明一个性别的变量
        var gender = prompt('请输入数字');
        if(gender == 1){
            alert('男人');
        }else if(gender ==2){
            alert('女人');
        }else{
            alert('性别未知');
        }
    </script>
</body>
</html>

(二)数据的类型转换

2.1数据的类型转换有两种方式

  • 隐试转换(语句自动转换)
  • 显示转换(自己利用转换类型转换)

例1:隐式转换

// 隐式转换==>语句自动转换
        var a ='aa';
        var b = 'bb';
        // 此时如果执行a+b,结果为aabb,因为是字符串相加就是拼接在一起
        //此时a+b的值在if语句的条件判断例自动转换为布尔类型,aabb的值转换为布尔类型为true
        if(a+b){
            console.log('答案是正确的')
        }else{
            console.log('答案是错误的')
        }   //会打印答案是正确的;此时if语句会自动的偷偷的将()里面的值转换成布尔类型

例2:显式转换

// 显示转换==>自己手动转换
        var str = '123';
        // 转换成数字类型:调用Number()方法;首字母大写
        var num = Number(str);
        console.log(num);      //结果为123
        // 可以利用typeof来查看num的数据类型
        console.log(typeof(num));   //number

        var str2 = 'abcd';
        var num2 = Number(str2);
        console.log(num2);  //结果为NaN(不为数字的数字)
        console.log('num2的数据类型为:',typeof(num2));

        var str3='' ;   //空的字符串,空格,null的数字类型的值为0;
        //没有赋值的变量的值时undefined,再将undefined转换成数字类型就变成了NaN(不为数字的数字)
        var num3 = Number(str3);
        console.log(num3);

2.2数据的类型转换规则

例1:其它类型转数字类型

转数字类型的方法

  • Number(变量名)==>首字母大写
  • (值)*1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 布尔转数字类型
        var str1 = true;
        var str2 = false;
        var num1 = Number(str1);
        var num2 = Number(str2);
        console.log('true转数字类型的值是:',num1);     //1
        console.log('false转数字类型的值是:',num2);    //0

        // 字符串转数字类型
        var str3 = '';
        var num3 = Number(str3);
        console.log('空字符转数字类型是:',num3);   //0
        var str4 =' ';
        var num4 = Number(str4);
        console.log('空格字符串转数字类型是:',num4);   //0
        var str5 = '123';
        var num5 = Number(str5);
        console.log('数字字符串转数字类型是:',num5);   //123
        var str6='123abc';
        var num6 = Number(str6);
        console.log('数字和字符转数字类型是:',num6);   //NaN
        
        var str7;
        var num7 = Number(str7);
        console.log('undefined转数字类型是:',num7);    //NaN
        var str8=null;
        var num8 = Number(str8);
        console.log('null的转数字类型是:',num8);   //0
        var obj1 = {};
        var objnum1= Number(obj1);
        console.log('空对象的转数字类型是:',objnum1);  //NaN
        var obj2 = {a:2,b:3};
        var objnum2 = Number(obj2);
        console.log('对象转数字类型是:',objnum2);  //NaN
        var arry1 = [];
        var arrynum1 = Number(arry1);
        console.log('空数组转数字类型是:',arrynum1);   //0
        var arry2 = ['a','b','c','d'];
        var arrynum2 = Number(arry2);
        console.log('数组转数字类型是:',arrynum2);   //NaN
    </script>
</body>
</html>

例2:其它类型转布尔类型

转换方法:

  • Boolean(变量名)
  • !!变量
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //数字转布尔
        var str1 = 100;
        var num1 = !!str1;
        console.log('整数转布尔类型是:',num1); //true
        var str2 = 88.88;
        var num2 = !!str2;
        console.log('小数转布尔类型是:',num2); //true
        var str3 = NaN;
        var num3 =!!str3;
        console.log('NaN转布尔类型是:',num3);  //false
        var str4 = 0;
        var num4 = !!str4;
        console.log('0转布尔类型是:',num4);    //false
        var str5 = Infinity;
        var num5 = !!str5;
        console.log('无限大转布尔类型是:',num5);   //true

        //字符串转布尔
        var str6 = '';
        var num6 = !!str6;
        console.log('空字符转布尔类型是:',num6);   //false
        var str7 = ' ';
        var num7 = !!str7;
        //空格字符串不为空
        console.log('空格字符串转布尔类型:',num7); //true
        var str8 = '123abs';
        var num8 =!!str8;
        //非空字符串转为true
        console.log('有内容的字符串转布尔类型:',num8); //true
        var str9;
        var num9 =!!str9;
        console.log('undefined转布尔是:',num9);    //false
        var str10 = null;
        var num10 = !!str10;
        console.log('null转布尔类型是:',num10);    //false
        var str11 = {};
        var num11=!!str11;
        console.log('对象转布尔类型是:',num11);    //true
        var str12 =[];
        var num12 = !!str12;
        console.log('数组转布尔类型是:',num12);    //true
    </script>
</body>
</html>

例3:其它类型转字符串类型

转换方法:

  • String(变量名)
  • 变量名+' '

一般规律:其它类型转字符串类型都是直接给原来的变量加上双引号即可;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var str1=123;
        var num1 = String(str1);
        console.log('数字转字符串是:',num1);
        // var str2=abc;
        // var num2 = String(str2);
        // console.log('字母转字符串是:',报错);
        var str3 = {}
        var num3 = String(str3);
        console.log('对象转字符串是:',num3);   //[object Object]
        var str4 =[];
        var num4 = String(str4);
        //空数组和空格数组转字符串都为空的,什么也没有
        console.log('空数组转字符串是:',num4);   //空的
        var str5 =['a','b','c'];
        var num5 = String(str5);
        console.log('空数组转字符串是:',num5);   //a,b,c
    </script>
</body>
</html>

类型转换规则总结

[图片上传中...(image.png-92ec1-1662271273994-0)]
[图片上传中...(image.png-622636-1662271316849-0)]

(三)运算符

3.1:算术运算符

        • / %
  1. 相加的时候,有一个数字为字符串时,则+表示字符串的拼接;

总结:从网页上输入的都是字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var a = 20;
        var b = 7;
        // 对a和b进行5中运算
        console.log(a + b); //27
        console.log(a - b); //13
        console.log(a * b); //140
        console.log(a / b); //2.857142857142857
        console.log(a % b); //6
    </script>
</body>
</html>

3.2:计算两数相加

用户从网页上输入的都是字符串

var num1 = 100;
        var num2 = prompt();
        console.log(typeof num2);   //num2的值时字符串
        var sum = num1+num2;
        console.log('sum的值:',sum);   //100100

3.3:关系运算符

也可以说时比较运算符:>, >=, ==,!= ===,!== < <=

        var a =10;
        var b = '10';
        var c= 20;
        //比较a和b是否相等
        //两个等号:等于会进行类型转换,然后比较值
        console.log(a==b);  //true
        //三个等号:全(恒)等于,会先进行比较类型,然后再进行比较值
        console.log(a===b); //false

3.4:逻辑运算符-逻辑非

逻辑非 !, 取反即可, 结果要么是true, 要么是false

如果变量不是布尔类型, 会先自动转换成布尔, 然后取反

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //说出下面变量取反后的值
        var num1 = false;   //true
        var num2 = true;    //false
        var num3 = '';  //true
        var num4 = null;    //true
        var num5;   //true

        //如果str为空,则打印111,否则打印222
        //写法1
        var str ='';
        if(str===''){
            console.log(1111);
        }else{
            console.log(2222);
        }
        //写法2
        var str ='';
        if(!str){
            console.log(1111);
        }else{
            console.log(2222);
        }

        //undefined,null
        var username;
        var obj=null;
        if(username===undefined){
            //执行操作
        }
        //写法简写
        if(!username){
            //执行操作
        }
        if(!obj){
            //执行操作
        }
    </script>
</body>
</html>

3.5:取反再取反

  • 取反!
  • 取反再取反!!(和布尔类型一样)
<script>
   var num = 100;
   if (num) {
       console.log(111);
   } else {
       console.log(222);
   }

   // 以上代码可以写成
   if (!!num) {
       console.log(111);
   } else {
       console.log(222);
   } 
</script>

3.6:逻辑运算符-逻辑与

  • 逻辑与 &&:中文里面并且的意思
  • 规律:前者为true取后者,前者为false取前者
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //参与运算都是布尔类型
        console.log(true && true); // true
        console.log(true && false); // false
        console.log(false && true); // false
        console.log(false && false); // false
        //其它类型
        var num1 = 100;
        var num2 = 0;
        //num1为true取后者num2的值
        console.log(num1 && num2);  //0
        //num2为false取前者num1的值
        console.log(num2 && num1);  //0
        //实际运用
        var a = 'wed';
        var b;
        //前者为true取后者,后者c是没有声明的变量,所以报错
        console.log(a&&c);  //报错
        //前者为false取前者,此时前者的值为undefined,前者为false时,代码不会向后执行
        console.log(b&&c);  //undefined
    </script>
</body>
</html>

3.7:逻辑运算符-逻辑或

  • 逻辑或||:中文里面或者的意思
  • 规律:前者为true取前者,前者为false取后者(与逻辑与的规律相反)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //前者为true取前者,前者为false取后者
        console.log(true||true);    //true
        console.log(true||false);   //true
        console.log(false||false);  //false
        console.log(false||true);   //true
        var num1 = 100;
        var num2 = 0;
        console.log(num1||num2);    //100
        console.log(num2||num1);    //100
        var a = 'wed';
        var b;
        console.log(a||c);  //wed
        console.log(b||c);  //报错
    </script>
</body>
</html>

(四)一元运算符(自加和自减)

  1. 一元运算符是指参与运算的变量只有一个
  2. 一元运算符有自加,自减,赋值,取反等。
  • i++(i先运算,运算结束后i自加)

实际上:i++也是先自加1,但是计算的时候使用原来的值;

  • ++i(i先自己加1,再跟其它的数相加)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //自加
        var i = 10;
        var j = 20;
        var num1 = 10 + i++;
        //i运算完成后是11
        console.log(num1);   //20
        var num2 = 10 + ++i;
        //此时的i是12,因为上一个式子中有一个i++,第一个i++时,值为10 ,运算完成后自加了1,所以是11
        //num2中的++i,在运算之前会自加1,所以在11的i的基础上加1,就是12
        console.log(num2);   //22
        var num3 = 20 + j++;
        console.log(num3);  //40
        var num4 = 20 + ++j;
        console.log(num4);  //42

        //自减
        var a = 10;
        var b = 20;
        var a1 = 10 + a--; 
        console.log(a1);    //20
        var a2 = 10 + --a;
        console.log(a2);    //18
        var b1 = 10 + b--;
        console.log(b1);    //30
        var b2 = 10 + --b;
        console.log(b2);    //28

        //自加和自减法
        var s = 10;
        var c=20;
        //10+12+20+18=60
        var sum = s++ + ++s +c-- + --c;
        console.log('自加和自减的值是:',sum);
    </script>
</body>
</html>

4.1:复合赋值运算符

var a= 10;
        //a=a+10;
        a+=10;
        a-=10;
        a*=10;
        a/=10;
        a%=10;
        //+=,-=,*=,/=,%=这些符号是简写

(五)运算符优先级

() > 自加(自减) > 算术 > 关系 > 逻辑 > 赋值

  • 逻辑与:前者为true取后者,前者false取前者
  • 逻辑非:前者为true取前者,前者false取后者
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- () > 自加(自减) > 算术 > 关系 > 逻辑 > 赋值 -->
    <script>
        //前者为true取后者,前者为false取前者
        var a = 10;
        var b = 10;
        // 计算式子的值
        //此时的a是11
        var num1 = 20 + 'abc' && 21 - ++a == 10;
        console.log(num1);  //true
        var num2 = 20 + ('abc' && 21) - ++b;
        console.log(num2);  //30
        //此时的a是12
        var num3 = 20 + ('abc' && 21) - ++a;
        console.log(num3);  //29
    </script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容