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 时会主动将其疏忽,在数组中则会返回 null
2. 如果对象中定义了 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 规定将单方强制类型转换为数字来进行比拟。