题目1
下面结果为真的表达式是:()
A: null instanceof Object
B: null === undefined
C: null == undefined
D: NaN == NaN
-
答案
-
解析
-
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:
题目2
以下哪个语句打印出来的结果是false?
A: alert(3 == true)
B: alert(2 == '2')
C: alert(null == undefined)
D: alert(isNaN('true'))
-
答案
-
解析
-
A: == 会隐式转换,二个都是基本数据类型比较,true转化为数字为1,然后3==1返回false -
B: == 会隐式转换,二个都是基本数据类型比较,都转化为数字,字符串’2’ 转化为数字为2,所以 2 == 2返回为true -
C: null 遇到2个等号(==) 和undefined 无条件返回true**(规定)** -
D: isNaN的转换好像都是将参数通过**Number()**来进行转换,凡是Number不能转换的都返回NaN isNaN(123)
isNaN(-1.23)
isNaN(5-2)
isNaN(0)
isNaN('123')
isNaN('Hello')
isNaN('2005/12/12')
isNaN('')
isNaN(true)
isNaN(undefined)
isNaN('NaN')
isNaN(NaN)
isNaN(0 / 0)
总结下
-
只要是基本数据类型的==比较,都会转化为数值来进行比较 -
只要是引用数据类型和基本数据类型的的比较,都会转化为字符串 然后 转化为 被比较的基本数据的类型 后 再进行比较((除了引用数据类型和布尔值进行比较的时候是将二者转化为布尔值比较)) -
(比如 对象和布尔值比较 )
[] == true;
-
(比如 对象和数字比较)
[1] == 1;
-
具体可以看这个博主写的js中的一些隐式转换和总结
|