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 函数式编程的原理
Oct 16 Javascript
判断用户是否在线的代码
Mar 05 Javascript
当jQuery1.7遇上focus方法的问题
Jan 26 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
Nov 09 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
JS实现简单拖拽效果
Jun 21 Javascript
vue-router项目实战总结篇
Feb 11 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 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/02/28 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
webpack构建react多页面应用详解
2017/09/15 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python抓取文件夹的所有文件
2018/02/27 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
python实现宿舍管理系统
2019/11/22 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
采购主管工作职责
2013/12/12 职场文书
前处理组长岗位职责
2014/03/01 职场文书
五分钟演讲稿
2014/04/30 职场文书