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 输入框数字限制插件
Nov 10 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
js实现双击图片放大单击缩小的方法
Feb 17 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 Javascript
Vue.JS入门教程之自定义指令
Dec 08 Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
json_decode 索引为数字时自动排序问题解决方法
Mar 28 Javascript
Echarts.js无法引入问题解决方案
Oct 30 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP集成FCK的函数代码
2008/09/27 PHP
php 常用类整理
2009/12/23 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
教研活动总结
2014/04/28 职场文书
开工典礼策划方案
2014/05/23 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
小学生读书活动总结
2014/06/30 职场文书
日语专业求职信
2014/07/04 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
网吧温馨提示
2015/07/17 职场文书
Python面向对象编程之类的概念
2021/11/01 Python
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android