当前位置: 首页 > 面试题库 >

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

慕铭
2023-03-14
本文向大家介绍举例子说说你对js隐式类型转换的理解相关面试题,主要包含被问及举例子说说你对js隐式类型转换的理解时的应答技巧和注意事项,需要的朋友参考一下

forever-z-133/blogs#13

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

等于判断

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

0 == '0';   // true,转为 0 == 0
0 == [];    // 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;  // true
undefined <= undefined;  // false,怀疑是 0 <= undefined 在比较

null > 0;     // false
null == 0;    // false
null >= 0;    // true

NaN > -1;     // false,NaN 基本无法被比较
NaN  == NaN;  // false

入参类型转换

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

运算时类型转换

+' 014'   // 14
+'0x12'   // 18

1 + '14'    // '114'
1 + '0x12'  // '10x12'
1 + +'14'   // 15
'14' + 1    // '141'

1 + [1, 1];     // '11,1'
1 + {};         // '1[object Object]'

1 + null;       // 1
1  +undefined;  // NaN

++'14'    // ReferenceError

Infinity+Infinity;      // Infinity
-Infinity+(-Infinity);  // -Infinity
Infinity+(-Infinity);   // NaN

+0+(+0);     // 0
(-0)+(-0);   // -0
(+0)+(-0);   // 0
 类似资料:
  • 本文向大家介绍请你来说一说C++中的隐式类型转换?相关面试题,主要包含被问及请你来说一说C++中的隐式类型转换?时的应答技巧和注意事项,需要的朋友参考一下 首先,对于内置类型,低精度的变量给高精度变量赋值会发生隐式类型转换,其次,对于只存在单个参数的构造函数的对象构造来说,函数调用可以直接使用该参数传入,编译器会自动调用其构造函数生成临时对象。

  • 本文向大家介绍说说你了解的类型转换?相关面试题,主要包含被问及说说你了解的类型转换?时的应答技巧和注意事项,需要的朋友参考一下 reinterpret_cast:可以用于任意类型的指针之间的转换,对转换的结果不做任何保证

  • 本文向大家介绍举例说说你对white-space属性的理解相关面试题,主要包含被问及举例说说你对white-space属性的理解时的应答技巧和注意事项,需要的朋友参考一下 控制文本内容如何展示。 值 说明 normal 默认。空白会被浏览器忽略。 pre 空白会被浏览器保留。其行为方式类似 HTML 中的 标签。 nowrap 文本不会换行,文本会在在同一行上继续,直到遇到 标签为止。 pre-w

  • 本文向大家介绍说说你对css盒子模型的理解相关面试题,主要包含被问及说说你对css盒子模型的理解时的应答技巧和注意事项,需要的朋友参考一下 盒子模型分为ie盒子模型和标准盒子模型 ie盒子模型 padding+content+border border-box 标准盒子模型 content content-box

  • 本文向大家介绍说说你对数据类型转换的理解是什么?类型转换的方法有哪些?相关面试题,主要包含被问及说说你对数据类型转换的理解是什么?类型转换的方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 这个题有点大,,,写几个常用的吧 String to Number Number(str) +str Number to String toString(num) ''+num All to Boolea

  • 本文向大家介绍说说你对js包装对象的理解相关面试题,主要包含被问及说说你对js包装对象的理解时的应答技巧和注意事项,需要的朋友参考一下 包装对象是用来处理基础类型数据的对象,使得字符串、布尔值等变量可以直接调用方法,在对字符串、布尔值进行方法调用的时候,js引擎会自动创建一个包装对象,将操作的值作为原始值,这一过程是隐式的。但是数字类型除外,想要调用数字对象的方法必须显示创建一个Number对象,