栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

举例子说说你对js隐式类型转换的理解

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

举例子说说你对js隐式类型转换的理解

forever-z-133/blogs#13

其实这里面的坑实在是有点多,比如等于判断,大小判断,入参类型转换,运算时类型转换等等。

等于判断

等于判断时,是会去先转为相同数据类型,再判断的。
Array -> String -> Number -> Boolean 有顺序的。

0 == '0';   // true,转为 0 == 00 == [];    // true,转为 0 == '' 再转 0 == 0'0' == [];  // false,转为 '0' == '''0' == true  // false,转为 0 == true 再转 false == true

大小判断

也是要先转为相同数据类型再比较的,但有很多令人费解的地方。
特别是两个字符串的大小比较,至今不懂其中规律,虽然不会这样去玩。

'1' > '-1';   // true,实则为 1 > -1,反例 '1' > '1.1' 为 false'a' > 'A';    // true,实则为 97 > 65,反例 'a' > 'b' 为 false'a' > -1;     // false,这里不知是不是转成了 NaN > -1'a' > '';     // true,这个也不知是不是 97 > undefined

所以这会造成下面这种结果:

[-1] > 0;    // false,实为 -1 > 0[-1] > '';   // true,实为 '-1' > ''

再者,undefined、null 和 NaN 一直都很特别。

undefined == undefined;  // trueundefined <= undefined;  // false,怀疑是 0 <= undefined 在比较null > 0;     // falsenull == 0;    // falsenull >= 0;    // trueNaN > -1;     // false,NaN 基本无法被比较NaN  == NaN;  // false

入参类型转换

比如 Number 和 Math 相关的方法,都会进行数字化转化等。
没仔细整理过,就不多逼逼了。

运算时类型转换

+' 014'   // 14+'0x12'   // 181 + '14'    // '114'1 + '0x12'  // '10x12'1 + +'14'   // 15'14' + 1    // '141'1 + [1, 1];     // '11,1'1 + {};         // '1[object Object]'1 + null;       // 11  +undefined;  // NaN++'14'    // ReferenceErrorInfinity+Infinity;      // Infinity-Infinity+(-Infinity);  // -InfinityInfinity+(-Infinity);   // NaN+0+(+0);     // 0(-0)+(-0);   // -0(+0)+(-0);   // 0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号