乐趣区

关于javascript:js类型转换

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 规定将单方强制类型转换为数字来进行比拟。
退出移动版