Day2:js数据类型、运算、三目

一、数据类型转换

分类如下:

1、隐式转换:程序自动转换数据类型

(1)数字+字符串:数字转换为字符串

console.log(10+'个人的旅行'); // 10个人的旅行

(2)数字+布尔值:true转换为1,false转换0

console.log(10+true); //11

(3)字符串+布尔值:布尔值转换为字符串true或者false

 console.log("10"+true); // 10true

(4)布尔值+布尔值:布尔值转换为数值1或者0

console.log(false+true); // 1

2、强制转换:通过调用指定函数手动转换类型

(1)将任何类型转换为字符串类型:x.toString()

var str=100;
console.log(typeof(str.toString())); // string

 (2)将任何类型转换为number类型:Number(x)

var str='123312';
console.log(typeof(Number(str))); //number

(3)将字符串转换为number类型:parseInt('123213')

1、只能获取字符串中的整数部分,从一个开始获取,直到碰到不是数字的字符停止读取
var str='123312abc';
console.log(parseInt(str)); // 123321
2、如果开头碰到空格,则忽略
var str='    123312abc';
console.log(parseInt(str)); // 123321
3、如果碰到第一个非空格字符,不是数字,那么不能转,则返回NaN
    NaN:Not a Number 类型是number类型,即不是数字(内容)的数字(类型)
var str='aa123312abc';
console.log(parseInt(str)); // NaN
4、如果第一个字符是小数点,那么也返回NaN
var str='.123312abc';
console.log(parseInt(str)); //NaN
5、如果是空串,也返回NaN
var str='';
console.log(parseInt(str)); // NaN

 (4)将字符串转换为浮点型:parseFloat('123123')用法同parseInt,唯一区别是仅认识第一个小数点

parseFloat('22.5.3') // 22.5
parseFloat(22.5) // 22.5
parseFloat(22.0) // 22

(5)将任何类型转为浮点型:Boolean(x)

var str=1;
console.log(Boolean(str)); // true

3、js数据类型介绍:js属于弱类型语言

(1)声明时不用指定数据类型,今后可能保存任何类型数据

(2)数据类型间可以自动进行转换

二、运算

运算符:程序模拟人类运算的特殊符号

1、算数运算:任意类型数据做-(减法),都会被转为数字类型,如果有不能被转为数字的,则返回NaN

(1)除、减

如果除数为0:Infinity-->无穷大
console.log(5/0) // Infinity
console.log(typeof(5/0)) // number
console.log(0/0) // NaN
console.log("20"-"5") // 15
console.log("20px"-"5px") // NaN
console.log(100-"") // 100

(2)被除数 % 除数(模运算-取余):被除数/除数,取除不尽的余数

2、递增/递减运算

(1)i++、i--和++i、--i

1、++:i++ 相当于 i=i+1
2、i++单独用:++放前放后,效果一样:i++=>++i
3、i++出现在表达式内部(先赋值后+1):
var change = 10;
console.log(change++);  // 输出10
4、++i出现在表达式内部(先+1后赋值):
var change = 10;
console.log(++change); //输出11
5、--:i-- 相当于 i=i-1

3、关系运算:判断大小,条件判断中使用,结果成立返回true,反之,false,自带隐式类型转换

总结:

普通类型,先转为相同类型,再比较

undefined,就用===

NaN,就用isNaN(x)

(1)字符串参与关系运算:从第一个字符取出每个字符PK unicode编号

"Hello"    PK     "Hi"
H           ==      H
e  101             i  105
关系运算中:任何类型和数字相比较,都转为数字再进行比较,和+刚好相反。
               布尔类型参与运算,布尔类型转为数字再进行比较。 
console.log("10"==10); // true
console.log("2">true); // true
console.log(2>true); //true
注:在关系运算中,先将参与判断的数据,强转为相同的类型,再比较

(2)undefined做等值(==)比较:它是从null类型继承来的,它在比较时会被自动转换为null

undefined == null   //true
本来不应该相等,但是现在没有办法了,所以引出
===严格相等:不带自动类型转换的相等比较,要求类型和值必须都相等,才返回true
只要不确定比较的类型,又不希望自动类型转换时,就用===,严格相等如果到处使用,造成一下情况:
"25"==25  //true   "25"===25 //false

console.log(typeof(undefined)); //undefined
console.log(typeof(null)); //Object

(3)NaN做等值比较:NaN和任何数字做比较,永远返回false,NaN==NaN   返回false

isNaN(x):专门用来判断一个数据是否是NaN,如果是NaN返回true,如果不是NaN返回false,如果x是个数字返回false;
isNaN("") // false  因为关系运算中""可以自动转换为0
isNaN(22.5) //false
isNaN("10") //false 因为关系运算中"10"可以自动转为10
isNaN("12px") //true 因为12px不能自动转换为数字,只能强制转换
isNaN(true) // false
isNaN("true") //true
isNaN(NaN) // true

4、逻辑运算:基于多组关系运算得出一个结论

(1)&&:而且(所有条件为true,才返回true,只有一个为false就返回false)

(2)||:或者(只要有一个条件为true,就返回true,所有条件为false才返回false)

(3)!:颠倒true和false(如果结果为false,则返回true)

 5、短路逻辑:只要前一个判断足以得出最终结论,则后续条件不执行!

1var i = 10;
var j = 10;
var k = i-- < 0 && j++ > 0

i=9 j=10 k=false

2var i = 10;
var j = 10;
var k = i-- > 0 || j++ >0

i=9 j=10 k=true

 6、位运算:

左移:n <<m 相当于 n*(2的m次方)
3<<1   相当于 3*2的1次方   等于   6
3<<2   相当于3*2*2           等于   12

右移:n>>m 相当于 n/(2的m次方)
64>>1   相当于64/2=32
64>>3   相当于64/(2*2*2)=8

7、赋值运算:=用于变量赋值,赋值运算的结果就是等号右边表达式的结果

1、var x=y=z=10; //不推荐这样使用
2、console.log(x=y=z=10); //10

8、扩展赋值表达式:+=、-=、*=、/=、%=、对已有数据计算同时,将结果再存回变量

+=:i+=5  相当于 i=i+5
何时使用:修改原变量值的时候用这些

三、条件(三目)运算

三目运算:根据不同条件,动态返回不同结果,至少需要三个表达式

1var ts="人";
var bgj="妖";
var who=ts;
who=="人" ? "放过" : "杀掉";
语法:条件?当满足条件时返回的值:当条件不满足时返回的值

2var r=who=="人?"放过":
          who=="妖"?"杀掉""送到泰国";
语法:条件1?条件1满足时的值:
         条件2?条件1满足时的值:
         条件n?条件1满足时的值:
                                  默认值;

 

拓展知识:

1、字符串在+运算当中,只要有字符串参与,一切类型都加“”变为字符串,如果没有字符串都转为数字计算

2、prompt("提示信息"):获取用户输入数据,收集数据的对话框,切记,只要从页面上获得的一切都是字符串,必须先转换再计算

3、今后只要计算结果是NaN,证明其中一个参数错了 eg:parseInt("true")+1000 -> NaN

4、typeof():函数可用于查询变量的当前类型

综合练习:

1、判断页面输入字符是否为数字、字母、还是汉字,通过控制台输出出来

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var c = prompt("请输入一个字符:");
        var isNumber = c>="0" && c<="9";
        var isAlphabet = (c>="A" && c<="Z") || (c>="a" && c<="z");
        var isChinese = c>="\u4E00" && c<="\u9FA5";
        console.log(isNumber+","+isAlphabet+","+isChinese);
    </script>
</body>
</html>
View Code

2、页面中输入一个数字年份,判断是否为闰年

注:闰年的判断公式为:

年份能被4整除,且不能被100整除的是闰年

年份能被400整除的事闰年

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var year = parseInt(prompt("请输入一个年份:"));
        var isLeapYear = (year%4==0 && year%100!=0)||(year%400==0);
        console.log(isLeapYear);
    </script>
</body>
</html>
View Code

3、2个数中取最大的

var score1=100;
var score2=80;
var result=score1>score2?score1:score2;
View Code

4、页面输入工资,按以下规则在控制台显示出工资的级别

注:后一个条件中不用包含否定前一个条件的关系判断,因为,进入后一个条件隐含的条件就是前一个条件不满足。

(1)大于等于20000,显示“高工资”

(2)小于20000大于等于8000,显示“中高工资”

(3)小于8000,显示“普通工资”

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            var salary=parseInt(prompt("请输入工资:"));
            var x=salary>=20000?'高工资':
                  salary>8000?'中高工资':
                                '普通工资';
            console.log(x);
        </script>
    </head>
</html>
View Code

 

posted @ 2017-07-05 10:22  licy_python  阅读(276)  评论(0编辑  收藏  举报