ToString
toString()
非string类型转换为string时会默认执行它的toString办法。
true->'true'1->'1'[1,2]->'1,2'{}->'[object Object]'function(){}->"function()\n{}"
JSON字符串化
1. JSON.stringify(..)在对象中遇到undefined、function和symbol时会主动将其疏忽,在数组中则会返回null2. 如果对象中定义了toJSON()办法,JSON字符串化时会首先调用该办法,而后用它的返回值来进行序列化。3. 咱们能够向JSON.stringify(..)传递一个可选参数replacer,它能够是数组或者函数,用来指定对象序列化过程中哪些属性应该被解决,哪些应该被排除,和toJSON()很像。如果replacer是一个数组,那么它必须是一个字符串数组,其中蕴含序列化要解决的对象的属性名称,除此之外其余的属性则被疏忽。如果replacer是一个函数,它会对对象自身调用一次,而后对对象中的每个属性各调用一次,每次传递两个参数,键和值。
ToNumber
1. 其中true转换为1, false转换为0。undefined转换为NaN, null转换为0。2. ToNumber不会解决0结尾的8进制数,但会解决0x结尾的16进制数
数字解析
parseInt和parseFloat用将其它类型解析为数字
解析容许字符串中含有非数字字符,解析按从左到右的程序,如果遇到非数字字符就进行。而转换不容许呈现非数字字符,否则会失败并返回NaN。解析空字符为NaN
数字解析同样不能解析0结尾的八进制数,然而parseInt和parseFloat反对传递第二个参数来传递解析进制,默认值为10
对象转换(ToPrimitive)
对象(包含数组)会首先被转换为相应的根本类型值,如果不是指标类型则持续进行转换
ToPrimitive规定
1. 如果对象的ValueOf办法的后果是原始值,返回原始值。2. 如果对象的toString办法返回原始值,就返回这个值;3. 其余状况都返回一个TypeError谬误
ToBoolean
JavaScript中的值能够分为以下两类:
(1) 能够被强制类型转换为false的值
(2) 其余(被强制类型转换为true的值)
以下这些是假值:
• undefined
• null
• false
• +0、-0和NaN
• ""
假值列表以外的都应该是真值(truthy)
显式强制类型转换为布尔值最罕用的办法是!!和Boolean(..)
||和&&
&&和||运算符的返回值并不一定是布尔类型,而是两个操作数其中一个的值。
对于||来说,如果条件判断后果为true就返回第一个操作数的值,如果为false就返回第二个操作数的值。
&&则相同,如果条件判断后果为true就返回第二个操作数的值,如果为false就返回第一个操作数的值。
算法操作
+(加法)
存在一个操作数为字符串或者对象的状况,+为拼接操作,两方都转换为字符串进行操作
其它状况为数字操作,两方都转换为数字进行操作
-,*,/(其它算法符)
单方都转换为数字操作
比拟
宽松相等和严格相等
正确的解释是:“==容许在相等比拟中容许进行强制类型转换,而===不容许。
比拟规定
1. 数字的优先级最高,任何类型与数字比拟都须要将其转换为数字。2. 布尔类型在比拟时会先被强制转为数字,再进行比拟3. 在==中null和undefined相等(它们也与其本身相等),除此之外其余值都不存在这种状况。4. 对象与任何对象都不相等和全等,对象与根底类型比拟时先转化为根本类型,比拟单方首先调用ToPrimitive,如果后果呈现非字符串,就依据ToNumber规定将单方强制类型转换为数字来进行比拟。