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 相关文章推荐
js过滤HTML标签以及空格的思路及代码
May 24 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
js is_valid_filename验证文件名的函数
Jul 19 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
js实现无缝轮播图效果
Mar 09 Javascript
vue实现移动端input上传视频、音频
Aug 18 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正则校验用户名介绍
2008/07/19 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
php 中英文语言转换类代码
2011/08/11 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
社区义诊活动总结
2014/04/30 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
考博专家推荐信
2014/05/10 职场文书
贷款委托书
2014/08/01 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
小学家长意见怎么写
2015/06/03 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
Python 内置函数速查表一览
2021/06/02 Python