今日地铁看书总结
强制类型转换
toString()
其他数据类型转化为字符串的方法
注意,数组重写了toString()方法。
对于JSON.stringfy()
不安全值有undefined
,null
,function
,symbol
,循环引用对象,转化他们结果为undefined
JSON.stringfy(function(){}) //undefined
当使用JSON.stringfy()转换类型的时候,如果该对象定义了toJSON()
方法,就会先调用toJSON()
方法。
当遇到参数为不安全值的时候,也需要toJSON()
方法返回一个安全值。
在toJSON()
方法方法里面可以定义一些特别的转化方式。
var o ={
e =a //循环引用对象
}
var a ={
b:42,
c:o,
d:function(){}
}
a.toJSON=function(){
return {b:this.b} //因为c,d属性均不合法
}
JSON.stringfy(a) //"{b:42}"
强制转化为布尔值
通过new Boolean
进行强化转化或者
!!a // 返回true或者false
一些假值:通过boolean强制转型之后,就会转换为false
undefined
null
false
+0,-0,NaN
'' ''
还有一些看起来像假值,但其实是真值的。
各种字符串(包括:"false","0","''")
空数组,空对象,空函数
总结:不在假值列表的均为真值
还有一点容易与boolean产生混淆.就是if()
语句内的判断
0、-0、0.0、null、""、false、undefined、NaN //判断为false
其他情况都是判断为true的
可以看看以下的特殊情况。
看到
[]==true //false
这是因为比较的时候,==进行强制类型转换。把[]转换成了0,true转换成了1.所以返回false
显式解析数字字符串
`parseInt(a)接受参数为字符串
var a= '42'
var b= '42px'
Number (a) //42 转换
parseInt(a)//42 解析
Number (b) //NAN
parseInt(b)//42
隐式类型转换
可以使用+""
进行数字和字符串的隐式转换。他会对a调用valueOf()
方法,然后通过toString()
抽象操作,把返回值转换为字符串。所以如果valueOf()
方法和toString()
方法定义存在不和谐的地方,那么最终的返回值就不是23了
42+"" // "42"
不和谐是指:
var a={
valueOf:function(){return 42}
toString:function() {return 4}
}
a+"" //"42"
String(a) //"4"
||和&&
操作数选择器运算符
var a = 42
var b = null
var c = 'abc'
a||c //42
a||b //null
a&&b //42
a&&c //'abc'
可以看到:
||判断结果为true时,返回第一个值。结果为false时,返回第二个值
&&判断结果为true时,返回第二个值。结果为false时,返回第一个值
&&的优先级比||高
可以利用||特性,为变量赋予默认值
a=a||42
利用&&特性,为函数执行把关
a&&foo()
布尔类型和其他基本类型的比较
核心:先转化数值再比较
var a ='42'
a==true //false
a== false //false
为什么比较中两个都是返回false呢?
首先它会将布尔型通过toNumber()
转化为数字。所以toNumber(true)
变成1,toNumber(false)
返回了0.所以怎么比较都不会相等。
所以日常不要使用if(a==true)
这种形式
使用if(a)
是可以的。
https://blog.csdn.net/qq_41846861/article/details/100585542
网友评论