js隐式转换的知识实例讲解


Posted in Javascript onSeptember 28, 2018

开胃菜

[] == ![]         //true ==> "" == false
123 ^ []          //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);     //2
console.log(1 + true);   //2 
console.log(1 + undefined); //NaN
console.log(1 + NaN);    //NaN
console.log(1 + null);   //1
console.log(1 + {});    //"1[object,Object]"

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

console.log(true + true);   //2 
console.log(true + undefined); //NaN
console.log(true + NaN);    //NaN
console.log(true + null);   //1
console.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);     //false
console.log(undefined == null);  //true
console.log({} >= {1:2});     //true
console.log({1:2} != {});     //true
console.log({} == {1:2});     //false
console.log([1] == [1]);      //false
console.log(null == 0);      //false
Javascript 相关文章推荐
Javascript注入技巧
Jun 22 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
js实现点击切换TAB标签实例
Aug 21 Javascript
你不知道的高性能JAVASCRIPT
Jan 18 Javascript
js获取所有checkbox的值的简单实例
May 30 Javascript
jQuery自适应轮播图插件Swiper用法示例
Aug 24 Javascript
通过bootstrap全面学习less
Nov 09 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
js前端图片加载异常兜底方案
Jun 21 Javascript
vue.js父子组件通信动态绑定的实例
Sep 28 #Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 #Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 #Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 #Javascript
学习jQuery中的noConflict()用法
Sep 28 #jQuery
代码分析vue中如何配置less
Sep 28 #Javascript
使用JavaScript破解web
Sep 28 #Javascript
You might like
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
投标单位介绍信
2014/01/09 职场文书
经理岗位职责范本
2015/04/15 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA