JavaScript中的操作符类型转换示例总结


Posted in Javascript onMay 30, 2016

首先,我们先来做一些题目吧!为了统一,我不混着来写这些题目,面试题目中,经常将这些题目混起来,这样对你的迷惑度会更大,为了更方便演示,我在这里分模块写了一些题目,大家可以看下!

操作符字符串的隐性转换
 乘法

console.dir("-------以下乘法---------");
 console.dir(5*"5");
 console.dir(5*"a");
 console.dir(5*NaN);
 console.dir(5*null);
 console.dir(5*undefined);
 console.dir(5*5);
 console.dir("-------以上乘法---------");

除法

console.dir("-------以下除法---------");
 console.dir(5/"5");
 console.dir(5/"a");
 console.dir(5/NaN);
 console.dir(5/null);
 console.dir(null/5);
 console.dir(5/undefined);
 console.dir(5/5);
 console.dir(5/0);
 console.dir(0/5);
 console.dir(0/0);
 console.dir("-------以上除法---------");

 取余、求模

console.dir("-------以下取余、求模--------");
 console.dir(16%"5");
 console.dir(5%"a");
 console.dir(5%NaN);
 console.dir(5%null);
 console.dir(null%5);
 console.dir(5%undefined);
 console.dir(5%5);
 console.dir(5%0);
 console.dir(0%5);
 console.dir(0%0);
 console.dir("-------以上取余、求模---------");

 加法

console.dir("-------以下加法--------");
 console.dir(16+"5");
 console.dir(5+"a");
 console.dir(5+NaN);
 console.dir(5+null);
 console.dir(5+undefined);
 console.dir(5+5);
 console.dir("两个数的和是"+5+5);
 console.dir("两个数的和是"+(5+5));
 console.dir("-------以上加法--------");

 减法

console.dir("-------以下减法--------");
 console.dir(16-"5");
 console.dir(5-"a");
 console.dir(5-NaN);
 console.dir(5-null);
 console.dir(5-undefined);
 console.dir(5-5);
 console.dir(5-true);
 console.dir(5-"true");
 console.dir(5-"");
 console.dir("两个数的差是"+5-5);
 console.dir("两个数的差是"+(5-5));
 console.dir("-------以上减法--------");

 关系操作符

console.dir("-------以下关系操作符--------");
 console.dir(16>"5");
 console.dir("16">"5");
 console.dir(5<"a");
 console.dir(5>=NaN);
 console.dir(5<NaN);
 console.dir(NaN>=NaN);
 console.dir(5>=null);
 console.dir(5>=undefined);
 console.dir(5>=5);
 console.dir(5>=true);
 console.dir(5>="true");
 console.dir(5>="");
 console.dir("Brick">"alphabet");
 console.dir("brick">"alphabet");
 console.dir("-------以上关系操作符--------");

 乘法

console.dir(5*"5"); //25
 console.dir(5*"a");//NaN
 console.dir(5*NaN);//NaN
 console.dir(5*null);0
 console.dir(5*undefined);//NaN
 console.dir(5*5);//25

下面说一下乘法隐性转换原则:

1、如果2个数值都是数字,那么直接进行乘法运算,(相信大家都会的,和小学数学一样,同时要注意数字的符号),如果乘积数值超过了ECMAscript的数值表示范围,则返回Infinity(正无穷)或者-Infinity(负无穷)
2、如果一个数是NaN,那么结果就是NaN
3、如果Infinity与0相乘,结果是NaN
4、假如一个操作符是数字,另外一个不是数值,那么先用Number()函数,将其进行转化,将转化出来的值与数字进行相乘。假如转换出来的结果出现NaN,那么结果就是NaN。
除法

console.dir(5/"5");//1  将字符转化为数字进行相除
 console.dir(5/"a");//NaN  将“a”用Number()函数进行转化,出来的值是NaN,结果就是NaN
 console.dir(5/NaN);//NaN
 console.dir(5/null);//Infinity null用Number()函数进行转化,结果是0,那么5/0是正无穷
 console.dir(null/5);//0 同上0/5是0
 console.dir(5/undefined);//NaN  undefined 用Number()进行转化,结果是NaN
 console.dir(5/5);//1
 console.dir(5/0);//Infinity
 console.dir(0/5);//0
 console.dir(0/0);//NaN //0除以0结果是NaN

下面说一下除法隐性转换原则:

和乘法类似,唯一多的一条就是0/0结果是NaN
取余、求模

求余在项目中用的最多的是求奇数偶数的时候。我们经常用一个数值与2进行求余,结果是0那么这个数是偶数,结果是1那么这个数是奇数。

看看上面的题目:

console.dir(16%"5"); //1 将字符串5通过Number()转化为5然后进行求余
 console.dir(5%"a");//NaN
 console.dir(5%NaN);//NaN
 console.dir(5%null);//NaN 将null 通过Number()转化,结果是0,然后计算5%0 ,结果是NaN
 console.dir(null%5);//0 同上0%5 取余,结果是0
 console.dir(5%undefined);//NaN
 console.dir(5%5);//0
 console.dir(5%0);//NaN
 console.dir(0%5);//0
 console.dir(0%0);//NaN
console.dir(Infinity%Infinity);//NaN
console.dir(5%Infinity);//5
 console.dir(Infinity%5); //NaN

下面说一下取余隐性转换原则:

和乘法一样,我说一下比较特别的地方吧!我们都知道被除数和除数的概念吧,小学的时候就学过的。

1、被除数是无穷大,除数是有限大的值,那么结果是NaN
2、被除数是有限大的值,除数是0,那么结果是NaN
3、Infinity%Infinity结果是NaN
4、被除数是有限大的值,除数是无穷大的值,结果是被除数。
5、被除数是0,结果是0
减法

看看上面的例子吧!

console.dir(16-"5");//11
 console.dir(5-"a");//NaN
 console.dir(5-NaN);//NaN
 console.dir(5-null);//5
 console.dir(5-undefined);//NaN
 console.dir(5-5);//0
 console.dir(5-true);//4
 console.dir(5-"true");//NaN
 console.dir(5-"");//5
 console.dir(5-Infinity);//-Infinity
 console.dir(Infinity-Infinity);//NaN
 console.dir("两个数的差是"+5-5);//NaN
 console.dir("两个数的差是"+(5-5));//两个数的差是0

下面说一下减法隐性转换原则:

和上面一样,相同的就不说了,我说一下减法特有的。

1、Infinity-Infinity结果是NaN
2、-Infinity-Infinity结果是-Infinity
3、一个数字减Infinity结果是-Infinity
4、Infinity-(-Infinity)结果是Infinity
5、如果操作数是对象,则调用对象valueOf方法,如果结果是NaN那么结果就是NaN。如果没有valueOf方法,那么调用toString()方法,并将得到的字符串转换为数值。
关系操作符

关系运算符统一返回true或者false

console.dir(16>"5"); //true
 console.dir("16">"5");//false
 console.dir(5<"a");//false
 console.dir(5>=NaN);//false
 console.dir(5<NaN);//false
 console.dir(NaN>=NaN);//false
 console.dir(5>=null);//true
 console.dir(5>=undefined);//false
 console.dir(5>=5);//true
 console.dir(5>=true);//true
 console.dir(5>="true");//false
 console.dir(5>="");//true 
 console.dir("Brick">"alphabet");//false B的字符串编码值是66 ,而a的字符串编码是97.因此false
 console.dir("brick">"alphabet");//true 小写字母b比a大,所以是true

下面说一下关系运算符隐性转换原则:

还是和上面一样,相同的就不说了。

如果比较的两个数都是字符串,那么会比较字符串对应的字符串编码值。

加法运算

加法运算隐性转换,我之所以最后说,是因为加法运算隐性转换和之前的不一样,之前的所有的运算符号,只要一个是数字,另一个也默认使用Number()进行数字转换。加法运算不一样。加法运算只要其中一个是字符串,那么另外一个也会转换为字符串,然后进行字符串的拼接!

console.dir(16+"5"); //156
 console.dir(5+"a");//5a
 console.dir(5+NaN);//NaN
 console.dir(5+null);//5
 console.dir('5'+null);//5null
 console.dir(5+undefined);//NaN
 console.dir(null+undefined);//NaN
 console.dir(5+5);//10
 console.dir("两个数的和是"+5+5);//两个数的和是55
 console.dir("两个数的和是"+(5+5));//两个数的和是10

下面说一下加法运算符隐性转换原则:

1、有一个是字符串,那么另外一个也会转换为字符串进行拼接。假如一个是字符串,另外一个是null或者undefined,那么相加,null或者undefined就会调用String()方法,获得字符串“null”或者“undefined”,然后进行拼接。
2、假如一个数字加null或者undefined,那么还是把null或者undefined进行Number()转换之后再相加。
3、剩下的原则和其他的差不多,就不多说了。

双等号隐性转换
把以下代码运行一遍,相信你自然就懂了~

var a;

console.dir(0 == false);//true

console.dir(1 == true);//true

console.dir(2 == {valueOf: function(){return 2}});//true

console.dir(a == NaN);//false
console.dir(NaN == NaN);//false

console.dir(8 == undefined);//false

console.dir(1 == undefined);//false

console.dir(2 == {toString: function(){return 2}});//true

console.dir(undefined == null);//true

console.dir(null == 1);//false

console.dir({ toString:function(){ return 1 } , valueOf:function(){ return [] }} == 1);//true

console.dir(1=="1");//true

console.dir(1==="1");//false
Javascript 相关文章推荐
JavaScript XML实现两级级联下拉列表
Nov 10 Javascript
jQuery的链式调用浅析
Dec 03 Javascript
JSON格式化输出
Nov 10 Javascript
javascript每日必学之循环
Feb 19 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
Angular.JS学习之依赖注入$injector详析
Oct 20 Javascript
JavaScript构建自己的对象示例
Nov 29 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
解决vue 项目引入字体图标报错、不显示等问题
Sep 01 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
jQuery中的通配符选择器使用总结
May 30 #Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 #Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 #Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 #Javascript
JS检测移动端横竖屏的代码
May 30 #Javascript
BootStrap中Tab页签切换实例代码
May 30 #Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 #Javascript
You might like
URL Rewrite的设置方法
2007/01/02 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php多线程并发实现方法
2016/09/30 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
《望洞庭》教学反思
2014/02/16 职场文书
医学生求职自荐书
2014/06/12 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python