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 相关文章推荐
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 Javascript
Jquery注册事件实现方法
May 18 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
小程序Request的另类用法详解
Aug 09 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
发布你的Python模块详解
2016/09/15 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
应聘教师自荐信
2013/10/12 职场文书
初中三年学生的学习自我评价
2013/11/13 职场文书
父母对孩子的寄语
2014/04/09 职场文书
推荐信模板
2014/05/09 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
教师节横幅标语
2014/10/08 职场文书
小学运动会加油词
2015/07/18 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js