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中获取出错代码所在文件及行数的代码
Sep 23 Javascript
PHP 与 js的通信(via ajax,json)
Nov 16 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
connection reset by peer问题总结及解决方案
Oct 21 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
Vue.extend实现挂载到实例上的方法
May 01 Javascript
详解json串反转义(消除反斜杠)
Aug 12 Javascript
JS实现简易留言板特效
Dec 23 Javascript
JavaScript修改注册表实例代码
Jan 05 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 curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
Python对List中的元素排序的方法
2018/04/01 Python
Python I/O与进程的详细讲解
2019/03/08 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
舞蹈教师自荐信
2014/01/27 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
质量标语大全
2014/06/12 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
师德师风自查总结
2014/10/14 职场文书
求职自我评价范文
2015/03/09 职场文书
张丽莉观后感
2015/06/16 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
Golang map映射的用法
2022/04/22 Golang
mysql幻读详解实例以及解决办法
2022/06/16 MySQL