JavaScript之隐式类型转换

作者: a333661d6d6e | 来源:发表于2018-11-13 17:40 被阅读3次

布尔操作符(!、&&、||)

  • 当使用 条件判断语句(if...else) 以及 布尔操作符(!、&&、||) 时,会调用Boolean()进行隐式类型转换

  • 转换为false的有:0, null, undefined, NaN, '', false,其余都为true([], {}为true)

![];  //  !Boolean([]);   ------------>    false     
!2;   // false
!null; //  !Boolean(null);   ------------>  true
!undefined;  // true
!0;  // true
if([]) consolo.log('true');   //  if(Boolean([])) ... ----------->  true

乘/除法操作符(*、/)

  • 若有一个操作数为NaN,则结果为NaN
  • 若其中一个操作数不为数字,则调用Number()将其转换为数值
2 * '5';   // 10
2 * '5a';  // 2 * Number('5a')  -------->  2 * NaN  ------------>   NaN

加法操作符(+)

  • 若有一个操作数为NaN,结果为NaN
  • 若有一个操作数为字符串,则将另一个数转换为字符串然后拼接
  • 若有一个操作数为对象,则调用对象的toString方法再执行上一步
// num: 数值操作数   str: 字符串  obj: 对象
num + 非字符串操作数(NaN/undefined/null/false/true) = num + Number(非字符串操作数)
num + str = 'numstr';        // 1 + 2 + '3' = '33'

str + NaN = 'strNaN';        //  '1' + NaN = '1NaN'
str + null = 'strnull';      // '1' + null = '1null'
str + true = 'strture';

obj + num = obj.toString() + num;  // Math + 123 = '[object Math]123'
obj + str = obj.toString() + str;  // Math + '123' = '[object Math]123'

减法操作符(-)

  • 若一个操作数为字符串、null、undefined、布尔值,就调用Number()将其转换为数值再运算
  • 若一个操作数为对象则调用该对象valueOf(),没有valueOf()则调用toString()
1 - '2' = -1;
1 - '123a' = NaN; // 1 - Numer('123a')
1 - Math = NaN;   // 1 - Math.valueOf()
1 - true = 0;

关系操作符(>、<、>=、<=)

  • 与NaN比较都会返回false
  • 若两个操作数都为字符串,则比较字符串的编码值
  • 若有一个操作数为数值,则对另一个操作数用Number()转换
  • 若有一个操作数为对象,则调用该对象valueOf(),没有valueOf()则调用toString()
4 > '2';  // true
4 > '2a'; // false
4 > Math; // false
4 > true; // true
               //欢迎加入全栈开发交流圈一起学习交流:864305860 
              //面向1-3年前端人员
             //帮助突破技术瓶颈,提升思维能力  
'ab' > 'a' // true 

相等操作符(==、!=)

  • 字符串、布尔类型和数值比较,现将前者用Number()转换为数值
  • 若一个操作数是对象另一个不是,则调用该对象valueOf(),没有valueOf()则调用toString()
  • 若两个操作数都是对象,则比较它们是不是同一个对象(地址是否相同)
  • null和undefined是相等的
  • null和undefined不会转换成任何值
  • 任何数都不等于NaN,包括NaN自己
// true
== '123';
== true;
'123' == new String(123);
== new String(123);
null == undefined;

// false
null == 0;
== true;
new String(123) == new String(123);

全等操作符(===、!==)

全等操作符不会转换操作数

123 ===  '123';  // false
null === undefined; // false

结语

感谢您的观看,如有不足之处,欢迎批评指正。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

相关文章

  • javascript数据类型隐式转换

    javascript数据类型隐式转换 一、函数类 isNaN()改函数会对参数进行隐式的Number()转换,如果...

  • JavaScript精选练习(1)

    打印100以内的所有质数 写出斐波那契数列 如果对于隐式类型转换不太了解可以看看:JavaScript隐式类型转换

  • 类型转换

    在JavaScript中,共有两种类型转换:隐式类型转换,显示类型转换。 “字符串”转换为“数字” 在JavaSc...

  • js类型转换

    javaScript类型转换 标签(空格分隔): 未分类 隐式转换 当遇到以下几种情况,JavaScript会自动...

  • JavaScript之隐式类型转换

    布尔操作符(!、&&、||) 当使用 条件判断语句(if...else) 以及 布尔操作符(!、&&、||) 时,...

  • scala学习 - 隐式转换和隐式参数

    本文来自《Programming in Scala》一书 scala学习之隐式转换和隐式参数 1 隐式类型转换 ...

  • JavaScript预编译

    JavaScript预编译,你不知道的JavaScript 隐式类型转换 typeof   typeof 用来校验...

  • 前端常见面试题(十三)@郝晨光

    列举三种强制类型转换和两种隐式类型转换 JavaScript是一门弱类型语言,在JavaScript中声明变量不需...

  • JavaScript的强制类型转换

    强制类型转换 将javascript的值从一种类型转换为另一种类型的值——>类型转换隐式类型转换——>强制类型转换...

  • 03.【JS怪癖1】隐式类型转换

    参考资料:JavaScript 的怪癖 1:隐式类型转换 1.布尔值的隐式转换 1.1 转为false 四种情况:...

网友评论

    本文标题:JavaScript之隐式类型转换

    本文链接:https://www.haomeiwen.com/subject/htylfqtx.html