Unit02: 数据类型转换 、 运算符和表达式

程序的变量   vs   数据库

 内存中           硬盘上的文件

 临时的数据       持久存贮的数据

 客户端           服务器只存一份

 

1.数据类型转换;

js是弱类型语言:体现在3方面;

       - 申明变量时,不用规定变量存贮的数据类型;

       - 赋值时,动态决定变量的数据类型;

         同一变量,先后可保存不同类型的数据;

       - 运算时,js会根据需要,动态转换变量的数据类型;

 

js的数据类型转换:2大类;

1.隐式转换:无需程序员干预,js自动完成类型的转换;

       - “+”运算中的隐式转换:                    *****************************

              “算数计算中”:一切类型都隐式转为Number类型,再计算;如:true、flase-->1、0;********

              特殊:在“+”运算中,只要"有一方是字符串",俩数据都转为字符串,字符串连接;

 

       表达式:由数据,变量和运算符组成的一个公式;

              每个表达式默认都是从左向右,两两运算;

              每个表达式有且仅有一个运算结果(值);

 

       NaN:not a number-->说明运算中包含了无法转为数字的值;

              不是数字 的 数字(数据类型是number类型)

              NaN和任何数据计算:永远返回NaN;

 

       typeof(x):判断数据类型;返回数据类型名;

       typeof(NaN):number;

 

       - 隐式转换;仅影响表达式运算结果,不影响变量中贮存的实际值;

 

2.强制转换:程序员通过“主动”调用专门函数,执行转换;

       - 任意类型"转string类型":2种;

              1.var str=x.toString();

                x.toString()转不了null和undefined--没有对应的包装类型;

 

x.toString() VS valueof()

        x.toString() 返回的一定是字符串;专门用于显示;如:alert()

valueof()  

取出对象内部封装的值,这个对象的值原来是什么类型就是什么类型;

如果是自定义对象或数组,和toString()一样;

如果是正则,则返回对象中封装的正则表达式;也相当与调toString();

专门用于计算;

 

2.var str=String(x);-->隐式转换的原型,一切数据都能转;

String(x)  vs  new String(x)

String(x):返回的是原始类型的值;

new String(x):返回的是包装类型的对象;

      

       - 任意类型"转Number类型":

              1.var n=Number(x);-->隐式转换的原型;

                Number():只能将“纯数字字符串”转为数字;

                Number(""):将“空字符串”转为数字0;

               Number(null) ->0;

  Number(undefined) ->NAN;

 

 

              2.string类型 转 Number类型:2种;

                - var n=parseInt(str);  

                  *********** str 应该是字符串,如果不是,会发生隐式转换为“字符串”;**********

                  原理:从str开始位置逐个读取每个字符;

                       直到碰到第一个不是数字的字符,停止读取;自动忽略开头碰到的空格;

                       如:

                            parseInt("$400"); NaN

                            parseInt("34.56"); 34

                - var n=parseFloat(str);

                  原理和parseInt一致,但是parseFloat认第一个小数点;

                       如:

                            parseFloat("$400"); NaN

                            parseFloat("34.56"); 34.56

                            parseFloat("34.56.78"); 34.56

                Number(x) VS parseInt(str);***********************************

                  字符串“转数字”时用parseInt(str);

                  非字符串“转数字”时用Number(x);

 

       - 任意类型"转boolean类型";1种;

                var bool=Boolean(x);

                只有5个值会转为false;

                     - 空字符串

                     - NaN

                     - undefined

                     - null

                     - 0

************凡是从页面上获取的一切数据,都是字符串;

输入框:var input=window.prompt("请输入薪资:");//得到的是文本框里面的内容;window.可省略;

 

2.运算符和表达式;

 

       程序:让计算机按照人的想法去执行任务;思想;

 

       运算符:程序中模拟人的思维运算或判断的“符号”;

              - 算数运算符:

计算的时候调用的valueof();

alert([]+{})

alert([].valueof()+{}.valueof())           // [object object]

    “ “         [object object]

 

 

                     + - * /;

                     %:

                            模;取余数;

                            when:判断奇数和偶数;

                                   确保一个运算的结果,不超过某个最大值(除数);

                     ++:

                            将当前变量中的值递增1;

                            when:只要对变量中的值递增1,还存回变量中;

                            3种情况:

                                -- ++如果单独使用,n++和++n都一样;“结果都递增1;”***************

                                -- ++参与到表达式:

                                   前++(++n):将n的值+1,然后返回"新值";

                                   后++(n++):将n的值+1,然后返回"旧值";

 

                                   (demo3)

                                   var n=5;

                                   console.log(n++);//5

                                   console.log(n);  //6

 

                                   var n=5;

                                   console.log(n);  //5

                                   console.log(n++);//5

 

                                   var n=5;

                                   console.log(n);  //5

                                   console.log(++n);//6

 

                                   var n=5;

                                   n++;             //6

 

                                   var n=2;

                                   /*

                                   var r=n++ + ++n + n++;

                                    返回:2     :4     :4

                                        n=3    n=4   n=5

                                   document.write(r+"<br />");// 10

                                   document.write(n+"<br />");// 5

                                   */

 

                                   var m=++n + n++ + ++n;

                                    //返回:3     :3     :5

                                   //     n=3    n=4   n=5

                                   document.write(m+"<br />");// 11

                                   document.write(n+"<br />");// 5

 

                     --:将当前变量中的值递减1;

 

              - 关系运算:比较数据之间的大小关系;

                     <  >  <=  >=  ==  !=

                     只能返回两个值:true / false;

                     隐式转换:

                            (demo4)

                            *****“关系运算中”:将所有类型都转为Number类型,再比较!

                                   特殊:3种;

                                        -- 两个字符串作比较:依次PK每一位字符的"unicode编号";

                                                        只要有一位字符,分出大小,就不在比较;

                                          例:"3">"10"         //true  3的"unicode编号">1的"unicode编号"

                                             "smith">"scott"  //true  m的"unicode编号">c的"unicode编号"

 

                                                                                         

                                      -- NaN :NaN和任何数据作大小或等于比较,永远返回false;

                                             NaN和任何数据不等于,比较永远返回true;

                                         isNaN(num);判断num是不是NaN;

                                                 是NaN返回true,不是NaN返回false;

                                                when:今后只要判断一个数值是不是数字或能否被转为数字;是数字返回false;不是数字返回true;

                                         ****** !isNaN(num) :是数字返回true;不是数字返回false;

                                              "!":非;

                                              如:

                                              isNaN("")   //false;

                                              isNaN(null)   //false;

                                              isNaN("true") //true;

                                              isNaN(true)   //false;

 

                                     -- undefined VS null

                                        undefined == null    //true

                                        Number(undefined)    //NaN

                                        Number(null)         //0

 

                                        ===:首先数据类型相同;其次值相同;

                                            不带隐式转换;

                                            when:只要不希望关系运算中自动隐式转换时,就用===;

 

              - 逻辑运算:综合多个关系运算的结果最终得出结论;

                        隐式转换:转为布尔值进行比较;

                        返回值:true / false;

                        -- &&:且

                             ***********

                             短路逻辑:如果前一个条件已经可以的出结论,则后续条件不在执行;

                             (demo5);

                             利用&&的短路逻辑:false;

                              关系运算&&的操作:只有满足前一个条件,才执行后一个操作;

 

                                   例子:demo5

                                   // 用户的 总价 超过500 打8折;

                                   // 利用&&短路逻辑

                                   var total=parseFloat(prompt("输入总价:"));

                                   total>=500&&(total=total*0.8);

                                   document.write(total);

 

 

                        -- ||:或

                            ***********

                             利用||的短路逻辑:true

                              关系运算||的操作:如果前一个条件不满足,才执行后一个操作;

 

 

                        -- !:非

 

 

                     短路逻辑例子

                     console.log(5&&4) //4

                     console.log(4&&5) //5

                     console.log(5||4) //5

                     console.log(4||5) //4

 

 

              - 位运算

                     左移<<:n<<m n的二进制左移m位,n*2的m次方;乘

                             1<<3  //8

                     右移>>:n>>m n的二进制右移m位,n/2的m次方;除

                            64>>4 //4

n>>>0 : 抹掉n的小数部分,相当于Math.floor();

 

              - 扩展赋值运算 :作计算,赋值;

赋值运算的值是等号右边表达式的值

所有表达式默认从左向右读取,只要读到变量就用值替换变量

读取和替换完毕后才按照优先级顺序执行计算;

Demo:

Var a=90,b=80;

 

Var r=a%b;

a=b;

b=r

 ||

b=a%(a=b);

 

                     +=  n+=2-->n=n+2,将n的值加2后,再保存n中;累加;

                     -=

                     *=

                     /=

                     %=

 

              - 三目(元:参与运算的数值个数)运算:根据不同的条件,多选“一”,返回不同的结果;

                     条件1 ? 值1 :

                     条件2 ? 值2 :

                     条件3 ? 值3 :

                           默认值(不能省);

 

 

转载于:https://www.cnblogs.com/mbyund/p/6406671.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值