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 相关文章推荐
做网页的一些技巧(续)
Feb 01 Javascript
关于jQuery中的end()使用方法
Jul 10 Javascript
javascript数组的使用
Mar 28 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
bootstrap css样式之表单
Jan 19 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 Javascript
vue实现表格过滤功能
Sep 27 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 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
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
js实现左右轮播图
2020/01/09 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python实现的分层随机抽样案例
2020/02/25 Python
keras 权重保存和权重载入方式
2020/05/21 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
Django xadmin安装及使用详解
2020/10/26 Python
财务支持类个人的自我评价
2014/02/14 职场文书
合作经营协议书范本
2014/09/16 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Java设计模式之代理模式
2022/04/22 Java/Android