JavaScript运算符中的隐式转换规律

转载 2016年08月31日 15:40:25

隐式转换规律:

一、递增递减运算符(前置、后置)


  1. 如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类型是:number类型。
  2. 如果不包含有效数字字符串,则会将字符串的值转换为NaN,返回值的类型是:number类型。
  3. 如果是boolean类型,则先会把true或者false转换为1或者0,再进行加减操作,返回值的类型是:number类型。
  4. 如果是null类型,则先会把null转换为0,在进行加减操作,返回值的类型是:number类型。
  5. 如果是undefined,则先会把undefined转换为NaN,再进行加减操作,返回值的类型是:number类型。
  6. 如果是对象,则先会通过对象的valueOf()方法,进行转换,如果返回的是NaN,调用toString()方法,在进行前面的操作,返回值的类型是:number类型。(注:空数组[]会返回0,在进行加减操作,空对象则会返回NaN)。

二、逻辑操作符中的隐式转换规律


注:只有undefined、null、NaN、0、空字符串会被转换为false,其余都为true

逻辑操作符一般用于语句判断中。通过判断结果返回的值进行后面的语句操作。

  1. 逻辑非(!)操作符:首先会通过Boolean()函数将其操作值转换为布尔值,然后求反。
  2. 逻辑与(&&)操作符:如果第一个值经过Boolean()函数转换后为true,则返回第二个操作值,否则返回第一个操作值。如果有一个操作值为null这返回null,如果有一个操作值为undefined,则返回undefined,如果有一个值为NaN,则返回NaN。
  3. 逻辑或(||)操作符:如果第一个值经过Boolean()函数转换为false,则返回第二个操作值,否则返回第一个操作值。
    (注:逻辑操作符的运算为短路逻辑运算:前一个条件已经能够得出结果后续条件不再执行!)

三、关系操作符的隐式转换规律


(关系操作符的操作值也可以是任意类型):
1. 如果两个操作值都是数值,则直接比较大小。
2. 如果两个操作值都是字符串,则字符串进行其Unicode编码进行比较。
3. 如果一个操作值是数值,则另一个值转换为数值进行比较。
4. 如果一个操作值是对象,则调用对象的valueOf()和toString()方法,然后再进行上述比较。
5. 如果一个操作值是布尔值,则将布尔值转换为数值再进行比较。
(注:NaN和任何值都不相等,包括自己,同时它与任何类型比较都会返回false。)

相等操作符==和===的隐式转换规律:

  1. 布尔值、字符串和数值进行比较,会先将其转换为数值再进行比较。
  2. null和undefined比较是相等的,但不是全等的。
  3. NaN与任何值都不相等,都会返回false。

C++中算术运算的隐式转换规则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并...
  • yusiguyuan
  • yusiguyuan
  • 2014年12月01日 10:12
  • 1721

JS各种类型问题与隐式类型转换

由于JS中的数据类型是松散类型,并且其在进行操作符运算时并不会像C++和Java一样先检测数据类型,而是隐式的进行数据类型转换,返回值有时并不如我们想象的那样。尤其是对于像&&操作符涉及到短路操作,并...
  • Debbie1993
  • Debbie1993
  • 2016年03月24日 16:30
  • 1406

C语言运算中的数据类型自动转换原则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给...
  • cherish_2012
  • cherish_2012
  • 2014年03月14日 17:19
  • 24022

运算符重载中的隐式转换问题

问题描述: 谭浩强c++书中运算符重载隐式转换关于以下两句话的问题 friend Complex operator+(Complex&, Complex&); friend Complex ope...
  • zurenci4516
  • zurenci4516
  • 2017年07月27日 17:31
  • 124

C语言精华记录——贰(几个关键字、几个运算符、隐式转换/溢出、表达式求值的顺序、左值和右值)

贰 几个关键字 sizeof 1、sizeof是关键字而不是函数。 例:int i=3;   sizeof(i) ;  与  sizeof i ; 是完全等同。 sizeof在计算变量所...
  • yang_yulei
  • yang_yulei
  • 2012年10月13日 20:31
  • 3047

警惕C++隐式转换(More Effectiv C++_5(运算符))

C++的类型转换,对于显示类型,C++定义了四种新的类型类型转换,即static_cast、dynamic_cast、const_cast、reinterpret_cast;当然C++也继承了C语言的...
  • zhangchen1003
  • zhangchen1003
  • 2015年08月20日 22:07
  • 291

javascript中神奇的隐式转换

最常见的==和!=造成的隐式转换,网上已经有很多人总结了,总结起来就一张图:Object → String → Number ↑ Boolean不同的类型会按...
  • shengandshu
  • shengandshu
  • 2017年05月11日 10:41
  • 154

javascript学习之数据类型隐式转换

一、函数类     isNaN()     该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true;     alert()     输出的内容隐式的转换为字符串 ...
  • zzzkk2009
  • zzzkk2009
  • 2015年03月24日 22:25
  • 277

JavaScript数据类型隐式转换原则总结(干货!)

这篇博客对JavaScript之中数据类型隐式转换做一个总结,叙述内容如有错误望大牛们指正 js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 ...
  • siboogi
  • siboogi
  • 2016年12月15日 13:53
  • 293

JavaScript中的隐式转换 总结

一、js中的类型有这些String、Number、 Boolean、Null、Undefined、Object、Array、Symbol、NaN其中:Symbol不参与任何计算和比较 Array 不...
  • lx376693576
  • lx376693576
  • 2017年10月20日 17:26
  • 130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript运算符中的隐式转换规律
举报原因:
原因补充:

(最多只允许输入30个字)