js类型转换练习

if  ('hello') {
        console.log('hello')
}
输出hello。
这里if语句括号里的条件转化为逻辑上的
布尔值作为判断标准,真则输出第一项,假则第二项。
if ('') {
        console.log('empty')
}
''空字符串为假,输出不了第二项。
if ('  ') {
        console.log('blank')
}
输出blank,在这里'     '有空白字符的空字符串为真的,跟单独测试它的布尔值是冲突的。这是为什么呢?等下面讲“==”的时候,就明白了,测试时,用的是
'    ' == false
然后得到一个真,这里的==让这个成立了,等到了下面,就明白了!
if ([0]) {
        console.log('array')
}
输出array,在这里[0]值为真,但是脱离if后,布尔值也是假的,同上面的情况,也是先特殊处理对待吧。
if (0.00) {
          console.log('0.00')
}
无法输出,这里为假,符合它本身的布尔值。


小结:这些都是典型错误写法,写的时候要像这样
if (a === '   '){
      ,,,,,,,,,,,
}
不要写这种——
if ( a ),,,,,,,
另外,这里的原理是——
undefined                       false
Null                                 false
Boolean                          直接判断
Number                           +0,-0,NaN为false,其他为true
String                             ''为假其他为真
Object                             true
没有真实值的都为假,除了'      ' ,[ ]。有真实值的都为真,除了数值正负0。我觉得只是想让if语句更有意义,有应用价值,才会让'      '或者[0]的布尔值不同于以往。


==的判断——
规则就是等号两边的全都向着数字去转化,不顾一切地转化,最后再比较,所以,以后在if(a == b)会更麻烦,直接写成if (a === b)!
原理——
null == undefined 
true
Number (null)
0
Number(undefined)
NaN
Boolean中的:
Number (true)
1
Number(false)
0

String转化的结果是NaN或数字。
Object用其valueOf值或toString值。
练习——

 ''  == 0
真的。''转数字是0。
'   '  == 0
真的。'    '转数字是0。

'' == true
false,true转成1。

'' == false
true,false转成0。

'    ' == true
false

'   ' == false
true
小结:它两的数值都是0,布尔值也都是假。

!'   '  == true
取反的优先级大,先取反,转化成布尔,'      '的布尔是真,取反为假,数值为0,真的数值为1,不等。
!'    ' == false
先取反,得0, false数值化也是0.为真。
'hello'  == true 
数值转化得NaN == 1,false
'hello' == false
同上,假。
'0' == true
数值化为0 == 1,false
'0'  == false
同上,真。
同理——
'0.00'  == false
true
'00' == false
true
undefined  == null
不用转,直接规定为真。
{} ==true
数值转化为NaN和1,假。
[] == true
数值转化为0和1,假。
var obj ={
     a :  0,
     valueOf:  function(){return  1}
}
obj == ' [object Object]' 
数值转化,obj取valueOf值,为1。
右边其实是字符串,转值为NaN。
不等,为假。
obj == 1
同上,为真。
obj == true 
同上,又true转化为1,所以为真。  



最后把前面的貌似的冲突来解释下——
规定说了:
'       '的布尔值为真,当时验证用的是
'      '    ==  false
运行得到了true,也就是为假,所以冲突了,源于 == 的用法比较的不是布尔值了,比较的是趋向对目标的数值转化的结果的比较了,都是0,所以这句话是真,但是证明不了两者间的布尔值哦,那布尔值如何得到??
请记结论就好了。
至于那个[0]也是如此的套路了。
这里的启发是什么?
慎用 ==,还有if (a)也经常出错,都不如if (a === b)。
包括练习题,那些写法都是容易产生歧义的,让人看不懂,自己写就要,写的有逻辑,还要明显体现,用小括号哦。








你可能感兴趣的:(js类型转换练习)