今日刷题-类型转换必须解决
题目1
1 | 下面结果为真的表达式是:() |
答案
- C
解析
A:
- null instanceof Object ;// false
- typeof null === ‘object’;// true
- 同理
- undefined instanceof Object ; //false
- typeof undefined === ‘undefined’ //true
B,C
- null 遇到二个等号( == ) 和 undefined 比较,无条件返回true
- null 遇到三个等号( === ) 和undefined 比较,无条件返回false
D:
- NaN 不与 任何值相等 包括自身
题目2
1 | 以下哪个语句打印出来的结果是false? |
答案
- A
解析
A: == 会隐式转换,二个都是基本数据类型比较,true转化为数字为1,然后3==1返回false
B: == 会隐式转换,二个都是基本数据类型比较,都转化为数字,字符串’2’ 转化为数字为2,所以 2 == 2返回为true
C: null 遇到2个等号(==) 和undefined 无条件返回true**(规定)**
D: isNaN的转换好像都是将参数通过**Number()**来进行转换,凡是Number不能转换的都返回NaN
1
2
3
4
5
6
7
8
9
10
11
12
13isNaN(123) //false
isNaN(-1.23) //false
isNaN(5-2) //false
isNaN(0) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2005/12/12') //true
isNaN('') //false
isNaN(true) //false
isNaN(undefined) //true
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0 / 0) //true
总结下
只要是基本数据类型的
==
比较,都会转化为数值来进行比较只要是引用数据类型和基本数据类型的的比较,都会转化为字符串 然后 转化为 被比较的基本数据的类型 后 再进行比较((除了引用数据类型和布尔值进行比较的时候是将二者转化为布尔值比较))
(比如 对象和布尔值比较 )
1
2
3// 输出结果为false
// 过程: [ ]转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
[] == true;(比如 对象和数字比较)
1
2
3// 输出结果为true
// 过程: [1]转化为字符串'1' ,然后转化为数字1 然后数字1 和 1进行比较 ,返回true
[1] == 1;还有一些需要记住的,像
1
2
3
4
5
6
7null == undefined // true null和undefined二个等于号比较则返回true,二者和其他比较就返回false
//举例子,下方的就是
null == false //false
null === null //为true
undefined === undefined //为true具体可以看这个博主写的js中的一些隐式转换和总结
题目2扩展
1 | //各自的返回结果是? |
- 答案
1 == true
;// true (基本数据类型和布尔值比较,二者转化为数值1
不变化true
变为了1
,所以二者相等返回true)"" == false
; // true (基本数据类型和布尔值比较 , 二者转化为数值,""
转化为数值为0
,false
变为0,所以二者相等返回true)false == null
; // false (null除了和undefined二个等号比较返回为true,null和其他比较均返回为false(undefined也是))null == undefined
;// true (null
和undefined
比较,返回为true,可以看上面第五条)
扩展
- 对象转换为数字的时候的时候,会依次调用
valueOf
方法和toString
方法,我们可以进行重写这二个方法来完成一些看似不可能的操作- valueOf 取出对象内部的值,不进行类型转换 mdnDoc文档地址
- toString 一定将所有内容转为字符串! mdnDoc文档地址
- 当调用valueOf方法没有获取到基本数据类型的时候,就会再次调用toString方法
证明1:当调用valueOf方法没有获取到基本数据类型的时候,就会再次调用toString方法
1 | var a = []; |
证明2:当调用valueOf方法没有获取到基本数据类型的时候,就会再次调用toString方法
1 | var test = { |
证明3:当调用valueOf方法没有获取到基本数据类型的时候,就会再次调用toString方法
1 | var test = { |
也许有人会说,为什么我重写了valueOf方法和toString方法还是只会调用valueOf啊
- 那是因为你没有加return,你没加return在valueOf方法里面,那么相同会自动添加
return undefined
1 | var test = { |
有没有什么办法可以使得 a==1 && a==2 && a==3为真?
1 | var a = { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦洁小站-属于你我的小天地!
评论