JavaScript基础知识(2)

Netscapt:javascript   Microsoft:JScript

  变量:内存中存储数据的一块空间。一切数据必须存在变量中。
  声明:var 变量名-->在内存中开辟一块空间
  赋值:变量名=值-->将值保存到左边的变量空间中备用。
  使用:使用变量名,等效于直接使用变量中的数据。

  数据类型:
  why:存储空间大小,用途
  原始类型:数据保存在变量本地
  复习:
  number string Boolean undefined null
  string:字符串内容一旦创建不能改变,要想改变只能创建新的字符串


  正课:
  数据类型间的转换:
  隐式转换:程序自动转换数据类型(坑)

  JavaScript是一种弱类型的程序语言体现在两个方面:
  1.变量声明时不必限定数据类型,今后可能保存任何类型数据
  2.数据类型间可以自动类型转换
  仅考虑+(两种情况):
  1.只要有字符串参与,一切类型都加""变为字符串
  2.如果没有字符串,都转为数字计算:其中:true-->1   false-->0

  var num1=1,num2=2;
  var str="medusa";
  var b1=true,b2=false;
  console.log(str+num1);         //"medusa1"
  console.log(str+b1);           //"medusatrue"
  console.log(num1+num2+str);    //"3medusa"
  console.log(str+num1+num2);   //"medusa12"
  console.log("b1+b2="+(b1+b2));   //" b1+b2=1"
  console.log("b1+num2="+(b1+num2));   //"b1+num2=3 "


  强制转换:程序员通过调用专门函数手动转换类型
  String: x.toString()  -->将x转为字符串类型,其中x可以为任何数据类型。
  Number: Numer(x)  -->将任意类型转为number类型

  string  --> number:
          转为整数:var num=parseInt("str")
          本质是读取字符串中的整数部分:
            1.从第一个字符向后读;
            2.如果碰到第一个数字字符,开始获取数字;
              再次碰到不是数字的字符(包括小数点),停止读取。
            3.如果开头碰到空格,忽略;
            4.如果碰到的第一个非空格字符,不是数字,说明不能转  -->NaN:Not a Number

  什么是NaN:不是数字(内容)的数字(类型)。

  console.log(parseInt("   12px"));    //12
  console.log(parseInt("true"));       //NaN
  console.log(parseInt("22.5"));       //22

  parseInt是不认小数点的,只能读小数点之前的数字

  转为浮点数:var num=parseFloat(str)
  本质是读取字符串中浮点数部分
  用法和parseInt完全相同。唯一差别:parseFloat认识小数点,仅认第一个小数点。parseFloat遇到小数时如果小数点前面没有0,会自动添加0;如果遇到小数点后面只有0,会自动输出一个整数不带小数点

  console.log(parseFloat("22.5"));       //22.5
  console.log(parseFloat("22.5.5"));     //22.5
  console.log(parseFloat(".25"));       //0.25
  console.log(parseFloat("22.0"));       //22

  prompt("提示信息"):专门用于请求用户输入数据,收集数据的对话框。
  var str=prompt("提示信息");

  *凡是从页面上获得的数据,都是字符串!必须先转换再计算*
  例:
    <script>
         var str=prompt("请输入工资");
         var salary=parseInt(str)+1000;      //此处若用var salary=str+1000; 获得到的就是输入的字符串,输出的结果就是NaN
         alert("您涨薪后工资为:"+salary);
     </script>

  只要计算结果返回NaN,就说明计算参数错了

  总结(数据类型之间的转换):
  string-->number:     Number(x)
  boolean-->number:    Number(x)
  number-->string:     x.toString()
  boolean-->string:    x.toString()
  number-->boolean:    Boolean(x)
  string-->boolean:    Boolean(x)

Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串。如“3.4.5”被转换成“3.4”, 

parseInt可以转换parseInt("-280px"),结果是-280。
这个函数返回字符串前面的数字,忽略尾部的非数字部分。
parseInt("11eleven")结果是11
parseInt("eleven")结果是NaN
parseInt("-11eleven")结果是-11

    Number是严格的,不允许任何非空格的字符。    
Number("-280px")结果是NaN       
      Number("-280")结果是280    


  什么是运算符:程序模拟人类运算的特殊符号
  算术运算符:+ - * / % ++ --
  + 可以表示加法,也可以用于字符串的连接
  - 可以表示减号,也可以表示负号(任意类型数据做减号,都会被转为数字类型;如果有参数,不能自动转为数字,则返回NaN)

  除法运算:如果除数为0:Infinity(无穷大)

  console.log(5/0);               //Infinity
  console.log(0/0);               //NaN   
  console.log(type0f(5/0);        //number

  type0f(x):判断任意数据的类型
  %:取余数,也叫模运算,取得是除不尽的余数。限制一个数不能超过某个最大范围时,就可以用模运算。

  递增/递减运算:
  ++: i++ ==> i=i+1;只要遇到对变量+1,就用i++
  i++单独用:++放前放后,效果一样:i++ ==> ++i
  i++出现在表达式内部:前++是先+1,再参与表达式;后++,先用旧值参与表达式,表达式之后再+1

  关系运算:>
  什么是关系运算:判断关系大小!一般在条件判断中使用。
  结果只有两个:成立:true;不成立:false
  注意:关系运算自带隐式类型转换
  字符串参与关系运算:从第一个字符开始,依次取出每个字符,PK Unicode编号
  在关系运算中:任何类型(包括字符串)和数字比较,都转为数字,再比较;布尔类型参与关系运算,始终转为数字比较。

  在关系运算中,等于要用==,不能用=


  console.log(3>10);          //false
  console.log('3'>'10');          //true
  console.log('3'>10);          //false
  console.log('10'==10);          //true
  console.log('2'>true);          //true
  console.log(2>true);          //true

  在关系运算中:先将参与判断的数据,强转为相同类型,再比较。

  undefined类型,是从null类型继承来的。但是undefined值在比较时会被自动转为null。即undefined做==比较时:即:undefined==null  ==>true
  ===严格相等:不带自动类型转换的相等比较!既会比较类型,也会比较值,只要任何一个不相等都会返回false。
  只要不确定比较的类型,又不希望自动类型转换时,就用===
  console.log(undefined==null);      //true

  console.log(typeof(undefined));      //undefined
  console.log(typeof(null));      //object
  console.log(undefined===null);      //false

  NaN做等值比较==:NaN和任何数字作比较,永远返回false,即使和自己比较也返回false,即 NaN==NaN ==>false
  isNaN(x):专门用来判断一个数据是否是NaN。如果是NaN返回true;如果不是NaN返回false。是数字返回false,如果不是数字返回true。只要不能自动转换为数字的,都返回true;只要能自动转为数字的,都返回false

  console.log(isNaN(""));       //false 
  注:关系运算中"",可以自动转为0
  console.log(isNaN(22.5));       //false 
  console.log(isNaN("10"));       //false 
  注:关系运算中,"10"可以自动转为10
  console.log(isNaN("12px"));       //true
  console.log(isNaN(true));       //false
  console.log(isNaN("true"));       //true
  注:关系运算中,true可以自动转为1,"true"不可以.字符串是不能自动转换为true的,但是布尔类型可以自动转换为数字
  console.log(isNaN(NaN));       //true
  console.log(isNaN("NaN"));       //true
  注:上面这两个是有着本质区别的

  关系运算总结:
  1.普通数据,先转为相同类型,再比较
  2.undefined,就用===
  3.NaN,就用isNaN(x)

  var temper=0;
  var weather="雨";
  var money=45;
  var jacket=temper<-3;   //false
  var umbrella=weather=="雨";  //true
  var taxi=money>=45;   //true
  console.log(jacket+" "+umbrella+" "+taxi);   //false true true
  console.log(jacket+umbrella"+taxi);   //false true true



  逻辑运算:基于多组关系运算,得出1个结论

  &&:与运算,所有条件为true,才返回true;只有一个为false就返回false

  ||:或运算,只要任意一个为true,就返回true;只有所有条件都为false时,才返回false

  !:非运算,颠倒true和false,今后只要颠倒判断结果,就用!

  var c=prompt("请输入一个字符:");
  var isNumber=c>="0"&&c<="9";
  var isAlphabet=(c>="A"&&c<="Z")||(c>="a"&&c<="z");
  var isChiense=c>="\u4E00"&&c<="\u9FA5";    //注意,以后只要是验证字符是不是汉字就用这个来验证
  console.log(isNumber+","+isAlphabet+","+isChiense);

  var year=prompt("请输入年份:");
  year=parseInt(year);
  var isLeapYear=(year%4==0&&year%100!=0)||(year%400==0); //闰年的判断公式记下
  console.log("是闰年吗"+isLeapYear); 


  关于“短路逻辑”的问题:只要前一个判断足以得出最终结论,则后续条件不执行!
  例一:
  var i=10;
  var j=10;
  var k=i--<0&&j++>0;   
  console.log("k="+k+","+"i="+i+","+"j="+j);   //k=false,i=9,j=10

  例二:
  var i=10;
  var j=10;
  var k=i-->0||j++>0;   
  console.log("k="+k+","+"i="+i+","+"j="+j);     //k=true,i=9,j=10


  位运算:将数字以二进制形式进行计算
  位移:
  左移:n<<m  ==>n*(2的m次方)
  例3<<1 ==>3*(2的1次方)
  3<<2 ==>3*(2的2次方)
  3<<3 ==>3*(2的3次方)
  右移:n>>m  ==>n/(2的m次方)
  例64>>1 ==>64/(2的1次方)
  64>>2 ==>64/(2的2次方)
  64>>3 ==>64/(2的3次方)
  总结:左移几位就乘几个2,右移几位就除以几个2


  赋值运算:=用于为变量赋值。赋值运算的结果就是等号右边表达式的结果。
  var x=y=z=10;    //赋值的结果就是右边表达式的值10,这种写法不推荐使用
  扩展赋值表达式:(+=  -=  *=  /=  %=)一般是对已有数据计算同时,将结果再存回变量。一般在修改原变量值时使用。
  += :  i+=5;等效于i=i+5;同理其他几个


  字符连接运算:+ 运算


  三目运算:根据不同条件,动态返回不同结果!三目运算返回的结果是一个值。
  为什么是三目:至少需要三个表达式。console.log(变量=="条件"?"执行1":"执行2");
  语法:条件?当条件满足时返回的值:当条件不满足时返回的值

  例:
  var ts="人";
  var bgj="妖";
  var who=ts;
  console.log(who=="人" ?"放过":"杀掉");

  例2:
  var who=bgj;
  var r=who=="人"?"放过":   
        who=="妖"?"杀掉":
              "送到泰国";    //上述条件不满足,则送到泰国
  console.log(r);

  三目运算中,多个条件时,即多选一,语法如下:
  条件1?条件1满足时的值:
  条件2?条件2满足时的值:
  条件n?条件n满足时的值:
                 默认值;


  三目运算应用:
  需求1:2个数中取最大的
  var score1=100;
  var score2=80;
  var result=score1>score2?score1:score2;

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

  例:
  var salary=parseInt(prompt("请输入工资"));
  var c= salary>=20000?"土豪":
         salary>=8000?"小资":
                       "屌丝";
  console.log(c);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值