博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaScript学习之隐式转换
阅读量:7172 次
发布时间:2019-06-29

本文共 1993 字,大约阅读时间需要 6 分钟。

搬家篇三

开胃菜

[] == ![]                  //true  ==> "" == false123 ^ []                   //123   ==> 123 ^ 0~{}                        //-1    ==> ~0{} >= {1,2}                //true  ==>因为大于等于的比较,不是相等的比较,所以[object Object] >=[object Object][null] == ""               //true  ==> [""] == ""

值得注意的操作符:

  • 一元操作符:通过Number()进行转换;其中包括*号运算符,/号运算符,都是经Number()转换
+undefined   //NaN
  • 逻辑运算符:!等价于Boolean(),将操作数进行布尔值类型转换
  • 位操作:~, |, &, ^;当一边操作数为NaN时,可等价于操作数为0;
//由以下变化可以证得:NaN ^ NaN ^ NaN = 0
  • 加号运算符,比较复杂

优先级最高的是字符串,任何操作数与字符串相加都将其String(x)成字符串,再进行字符串拼接

console.log("a" + 1);           //"a1"console.log("a" + "1");         //"a1"console.log("a" + false);       //"afalse"console.log("a" + undefined);   //"aundefined"console.log("a" + NaN);         //"aNaN"console.log("a" + null);        //"anull"console.log("a" + {});          //"a[object Object]"

其次number,而object在正常情况下输出的就是string类型

//console.log(1 + "1");     //"11"console.log(1 + 1);         //2console.log(1 + true);      //2 console.log(1 + undefined); //NaNconsole.log(1 + NaN);       //NaNconsole.log(1 + null);      //1console.log(1 + {});        //"1[object,Object]"

当一方为Boolean,或者两方都是Boolean时,都将其进行Number处理,同理undefined与null也一样

console.log(true + true);      //2 console.log(true + undefined); //NaNconsole.log(true + NaN);       //NaNconsole.log(true + null);      //1console.log((true + [NaN]));   //"trueNaN"
  • 减号,则将两边都进行Number()处理
  • 比较运算:==, >, <, >=, >=, != 遵循规则(摘自高程3):
1.null和undefined是相等的
2.要比较相等之前,不能将null和undfined转换成其他任何值
3.如有一个操作数为NaN,相等操作符返回fasle,不相等操作符返回true, NaN不等于NaN
4.两个对象之间的比较,两者指向同一个对象(地址相同),相等操作符返回true,否则返回false

值得注意的是:对象间的>=与==(!=)比较方式是不同的,前者是toString()返回值的比较,后者是引用地址的比较

当都是两边都是字符串时,按字符编码大小进行比较
当一方操作数为boolean,string,object,转成number类型的数值再进行比较;

console.log("NaN" == NaN);         //falseconsole.log(undefined == null);    //trueconsole.log({} >= {1:2});          //trueconsole.log({1:2} != {});          //trueconsole.log({} == {1:2});          //falseconsole.log([1] == [1]);           //falseconsole.log(null == 0);            //false

转载地址:http://zwdzm.baihongyu.com/

你可能感兴趣的文章
【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析...
查看>>
EMF介绍系列(八、模型的验证)
查看>>
listener.ora
查看>>
Execl to HTML
查看>>
Android udev /dev 设备节点权限
查看>>
PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
查看>>
[LeetCode] Spiral Matrix
查看>>
剑桥大学在文明5游戏中设定AI毁灭世界,AI突破即时策略游戏防线?
查看>>
Oracle的sys和system默认密码
查看>>
liux vim命令
查看>>
QuartZ Cron表达式在java定时框架中的应用
查看>>
[Everyday Mathematics]20150104
查看>>
操作系统之进程互斥的经典问题的分析
查看>>
[Everyday Mathematics]20150119
查看>>
【云计算的1024种玩法】轻松将服务器文件备份至 OSS
查看>>
TV-B-Gone Kit - Universal v1.2
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.27
查看>>
不存数据库生成验证码(totp算法)
查看>>
Mac下使用XLD转换无损音乐Ape
查看>>
用python写的模拟系统登录三次验证简单程序
查看>>