JavaScript类型转换(五)——习题和答案
这是JavaScript类型转换系列文章的第五篇,提供了一些习题和解答。
自测一下
JavaScript类型隐式转换单选题(30道)
执行表达式
"" == 0的结果是( )A. true B. false C. NaN D. undefined
表达式
[] == 0的结果为( )A. true B. false C. [] D. 0
执行
"5" + 3的结果是( )A. 8 B.
"53"C. 53 D."8"表达式
"5" - 3的结果是( )A. 2 B.
"53"C."2"D. NaN执行
!""的结果是( )A. true B. false C.
""D. 0表达式
[] == ""的结果是( )A. true B. false C. [] D.
""执行
"true" == true的结果是( )A. true B. false C.
"true"D. 1表达式
null == 0的结果是( )A. true B. false C. null D. NaN
执行
undefined == 0的结果是( )A. true B. false C. undefined D. NaN
表达式
"123a" == 123的结果是( )A. true B. false C.
"123a"D. NaN执行
[] + {}的结果是( )A.
"[object Object]"B."{}"C.[]D. NaN表达式
{} + []的结果是( )A. 0 B.
"[object Object]"C."[]"D. NaN执行
true + 1的结果是( )A. 2 B.
"true1"C. true1 D. NaN表达式
false + 1的结果是( )A. 1 B.
"false1"C. false1 D. NaN执行
![]的结果是( )A. true B. false C. [] D. 0
表达式
!![]的结果是( )A. true B. false C. [] D. 1
执行
"undefined" == undefined的结果是( )A. true B. false C.
"undefined"D. undefined表达式
"null" == null的结果是( )A. true B. false C.
"null"D. null执行
1 + null的结果是( )A. 1 B.
"1null"C. null D. NaN执行
1 + undefined的结果是( )A. NaN B.
"1undefined"C. undefined D. 1表达式
"2" > 1的结果是( )A. true B. false C.
"2"D. 1表达式
"10" > "2"的结果是( )A. false B. true C.
"10"D."2"执行 [] + 1 的结果是( )
A.
"1"B. 1 C. [] D. NaN表达式
{} + 1的结果是( )A. 1 B.
"[object Object] 1"C. {} D. NaN表达式
true == 1的结果是( )A. true B. false C. true1 D. NaN
表达式
false == 0的结果是( )A. true B. false C. false0 D. NaN
执行
"a" * 1的结果是( )A. NaN B.
"a1"C. 0 D. a表达式
"3" * 2的结果是( )A. 6 B.
"32"C."6"D. NaN表达式
[] == ![]的结果是( )A. true B. false C. [] D. ![]
执行
null + undefined的结果是( )A. NaN B. nullundefined C. 0 D. null
答案
答案:A
考点:
- 比较运算两运算子不同时为字符串或者数字,隐式转换为数字。
""转换为数字,结果是0
0 == 0结果为true。
答案:A
考点:
- 比较运算两运算子不同时为字符串或者数字,隐式转换为数字。
[]是引用类型,转换为数字需要进入toPrimitive流程处理,转换方向是number。优先执行其valueOf方法,但该方法返回的是引用类型,所以执行其toString方法,得到""。""转换为数字,结果是0
0 == 0结果为true。
答案:B
考点:
- 二元
+运算,只要操作数有一个是字符串,所有操作数都要转换为字符串(包括BigInt)
3转换为字符串得到"3","5"与"3"拼接得到"53"。- 二元
答案:A
考点:
- 算数运算运算子不是数字的都要隐式转换为数字
"5"转换为数字得到5,5-3等于2答案:A
考点:
- 逻辑非会将运算子隐式转换为布尔值
""转换为布尔值得到false
false,取反后为true。答案:A
考点:
- 比较运算两运算子不同时为字符串或者数字,隐式转换为数字。
[]是引用类型,转换为数字需要进入toPrimitive流程处理,转换方向是number。优先执行其valueOf方法,但该方法返回的是引用类型,所以执行其toString方法,得到""。
"" == ""结果为true。答案:B
考点:
- 比较运算两运算子不同时为字符串或者数字,隐式转换为数字。
NaN不与任何内容相等,包括它自身
"true"转换数字得到NaN,NaN == true结果为false答案:B
考点:
null和undefined不与除了对方和自身之外的任何内容相等
等式不成立,结果为
false易错:
依据“比较运算两运算子不同时为字符串或者数字,隐式转换为数字”,把null转换为数字得到0,得到的等式成立。答案:B
考点:
null和undefined不与除了对方和自身之外的任何内容相等
等式不成立,结果为
false答案:B
考点:
- 比较运算两运算子不同时为字符串或者数字,隐式转换为数字。
NaN不与任何内容相等,包括它自身
"123a"转数字得到NaN,NaN == 123结果为false答案:A
考点:
- 二元
+运算子没有字符串,非数字的运算子要转换为数字 - 空数组和空对象向数字方向转换,会进入toPrimitive流程,优先采用执行
valueOf函数的结果,但它们的结果都是引用类型(自身),所以最终会采用toString函数的返回值。 - 数组的
toString函数,返回其元素的字符串拼接 - 对象的
toString函数,返回固定字符串[object Object]
在都转换为字符串后,二元
+执行字符串拼接,所以得到"[object Object]"。- 二元
答案:A
考点:
{}出现在表达式头部,会被当作空代码块- 算数运算的运算子不为数字的,隐式转换为数字
[]是引用类型,转换为数字需要进入toPrimitive流程处理,转换方向是number。优先执行其valueOf方法,但该方法返回的是引用类型,所以执行其toString方法,得到""。""转换为数字得到0
因此结果为
0。答案:A
考点:
- 算数运算运算子不是数字的都要隐式转换为数字
true转换为数字得到1
1 + 1 = 2答案:A
考点:
- 算数运算运算子不是数字的都要隐式转换为数字
false转换为数字得到0
0 + 1 = 1。答案:B
考点:
- 逻辑非会将非布尔值运算子转换为布尔值
[]是引用类型,转换为布尔值得到true
!true结果为false。答案:A
考点:
+ 逻辑非是右结合
对15题答案再取反得到`true`
答案:B
考点:
null和undefined不与除了对方和自身之外的任何内容相等
答案:B
考点:
null和undefined不与除了对方和自身之外的任何内容相等
答案:A
考点:
- 二元
+运算子没有字符串,非数字的运算子要转换为数字 null转为数字得到0
1 + 0 = 1- 二元
答案:A
考点:
- 二元
+运算子没有字符串,非数字的运算子要转换为数字 undefined转为数字得到NaN
1 + NaN = NaN- 二元
答案:A
考点:
- 关系运算不同为字符串或不同为数字,两侧会发生向数字的隐式类型转换
"2"转换为数字得到2,2 > 1结果为true答案:A
考点:
- 关系运算不同为字符串或不同为数字,两侧会发生向数字的隐式类型转换
题目中运算子都为字符串,所以不需要转换。字符串比较按 “Unicode 编码” 逐字符对比,
"1"的编码(
49)小于"2"(50),因此"10" > "2"结果为false。
- 答案:A
考点:
+ 二元`+`运算子没有字符串,非数字的运算子要转换为数字
+ `[]`是引用类型,转换为数字需要进入toPrimitive流程处理,转换方向是`number`。优先执行其`valueOf`方法,但该方法返回的是引用类型,所以执行其`toString`方法,得到`""`。
+ 二元`+`运算,只要操作数有一个是字符串,所有操作数都要转换为字符串(包括BigInt)
以上,`[]`先转换为`""`,此时二元`+`有一个运算子是字符串,另一个不是,所以`1`转换得到`"1"`。字符串拼接得到`"1"`。
答案:A
考点:
{}出现在表达式头部,会被当作空代码块
后续
+1结果为1答案:A
考点:
- 关系运算运算子不同为字符串或不同为数字,两侧会发生向number的隐式类型转换
true转为数字得到1,1 == 1结果为true答案:A
考点:
- 关系运算运算子不同为字符串或不同为数字,两侧会发生向number的隐式类型转换
false转为数字得到0,0 == 0结果为true答案:A
考点:
- 算数运算运算子不是数字的都要隐式转换为数字
"a"转为数字得到NaN,NaN * 1 = NaN答案:A
考点:
- 算数运算运算子不是数字的都要隐式转换为数字
"3"转为数字得到3,3 * 2 = 6答案:A
考点:
- 关系运算运算子不同为字符串或不同为数字,两侧会发生向number的隐式类型转换
[]是引用类型,转换为数字需要进入toPrimitive流程处理,转换方向是number。优先执行其valueOf方法,但该方法返回的是引用类型,所以执行其toString方法,得到""。""转换为数字得到0
![]结果为false(见第 15 题),转换为数字得到0,最终0 == 0结果为true答案:A
考点:
+ 关系运算运算子不同为字符串或不同为数字,两侧会发生向number的隐式类型转换
+ `null`转为数字得到`0`
+ `undefined`转为数字得到`NaN`
`0 + NaN = NaN`