js操作符类型转换
乘法
我们来看下前面的题目:
console.dir(5*"5"); //
console.dir(5*"a");//NaN
console.dir(5*NaN);//NaN
console.dir(5*null);0
console.dir(5*undefined);//NaN
console.dir(5*5);//
下面说一下乘法隐性转换原则:
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);//
console.dir(5%0);//NaN
console.dir(0%5);//
console.dir(0%0);//NaN
console.dir(Infinity%Infinity);//NaN
console.dir(5%Infinity);//
console.dir(Infinity%5); //NaN
下面说一下取余隐性转换原则:
和乘法一样,我说一下比较特别的地方吧!我们都知道被除数和除数的概念吧,小学的时候就学过的。
1、被除数是无穷大,除数是有限大的值,那么结果是NaN
2、被除数是有限大的值,除数是0,那么结果是NaN
3、Infinity%Infinity结果是NaN
4、被除数是有限大的值,除数是无穷大的值,结果是被除数。
5、被除数是0,结果是0
减法
看看上面的例子吧!
console.dir(16-"5");//
console.dir(5-"a");//NaN
console.dir(5-NaN);//NaN
console.dir(5-null);//
console.dir(5-undefined);//NaN
console.dir(5-5);//
console.dir(5-true);//
console.dir(5-"true");//NaN
console.dir(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"); //
console.dir(5+"a");//5a
console.dir(5+NaN);//NaN
console.dir(5+null);//
console.dir('5'+null);//5null
console.dir(5+undefined);//NaN
console.dir(null+undefined);//NaN
console.dir(5+5);//
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、剩下的原则和其他的差不多,就不多说了。
js操作符类型转换的更多相关文章
- 项目期复习:JS操作符,弹窗与调试,凝视,数据类型转换
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/huangyibin628/article/details/26364901 1.JS操作符 ① 除法 ...
- 关于js操作符需要注意的地方
本文仅仅介绍部分js操作符在实际应用中需要注意的地方. 布尔操作符: //1.逻辑与操作属于短路操作,即如果第一个操作数能够决定结果那么就不会再对第二个操作数求值 var found=true; va ...
- JS 数据类型转换
JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- JS数据类型转换
JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- js操作符
JS操作符 x + y(数字) 将x和y相加; x + y(字符串) 将x和y拼接在一起; x - y 从x中减去y; x * y 将x和y相乘; x / y 将x除以y; x % y x和y的模(既 ...
- js值类型转换(boolean/String/number),js运算符,if条件,循环结构,函数,三种弹出框
js值类型转换 number | string | boolean boolean类型转换 num = 0; var b1 = Boolean(num); console.log(b1) 转化为数字类 ...
- js 自动类型转换
js自动类型转换 1.==符号在判断左右两边数据是否相等时,如果数据类型一致,直接比较值即可 2.==符号左右数据类型不一致时,如果两方数据为布尔型.数值型.字符串型时,不为数字的那一方自动调用Num ...
- JS的类型转换,强制转换和隐式转换
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
- JS的类型转换
首先我们要知道,在 JS 中类型转换只有三种情况,分别是: 转换为布尔值 转换为数字 转换为字符串 我们先来看一个类型转换表格 转Boolean 在条件判断时,除了 undefined, null, ...
随机推荐
- qmake-how to
简单例子 假设已经实现如下程序: hello.cpphello.hmain.cpp 首先,使用编辑器,在上述文件目录下创建文件hello.pro.然后加入几行语句告诉qmake项目中的源文件和头文件. ...
- Cadence丢失了csdCommon.dll
http://bbs.elecfans.com/jishu_450237_1_1.html
- linux (centos 6.4)下编译安装git
是时候动手尝试下 Git 了,不过得先安装好它.有许多种安装方式,主要分为两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包(yum install git). 若是条件允许,从 ...
- Java内存模型(一)
主存储器和工作存储器 Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域包括方法区,堆,虚拟机栈,本地方法栈,程序计数器.方法区存储类信息,常量,字节码等数据 ...
- 集合(二)LinkedList
上一篇中讲解了ArrayList,本篇文章讲解一下LinkedList的实现. LinkedList是基于链表实现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是一种线性的存储结构,意思是 ...
- 用C#开发的双色球走势图(原创)值得园友拥有(二)接上一篇
昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(原创)值得园友拥有 新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好 ...
- python 查找字符串同时包含数字和字母的最长子字符串的几种实现方法
有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符.数字和字母,输出最长的子字符串和他的长度 例如上面的字符串同时包含数字和字母的字符串是svda123,长度 ...
- JavaScript正则表达式匹配中英文以及常用标点符号白名单写法
我们在编程中经常会遇到特殊字符过滤的问题,今天我们提供一种白名单方式过滤 直接上代码 function RegEXP(s) { var rs = ""; for (var i = ...
- matlab学习笔记---(1)
Matlab学习笔记 一. Desktop Basics (Matlab 基础知识) 当你打开Matlab的时候,matlab按照以下默认的方式展示出来. 该桌面主要包括以下几部分内容: 当前文件夹: ...
- Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路
Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路 那就是利用mvvmlight中的messager组件(可单独提取出),制作双向的一个消息发送.通过公共的类的定义,来传递数 ...