javascript类型转换

mac2022-06-30  24

转Boolean

在条件判断时,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都转为 true,包括所有对象。

对象转基本类型

对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。

let a = { valueOf() { return 0 } }

也可以重写 Symbol.toPrimitive ,该方法在转基本类型时调用优先级最高。

let a = { valueOf() { return 0; }, toString() { return '1'; }, [Symbol.toPrimitive]() { return 2; } } 1 + a // => 3 '1' + a // => '12'

四则运算符

只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型。 并且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。 其他运算只要其中一方是数字,那么另一方就转为数字。

1 + '1' // '11' 2 * '2' // 4 [1, 2] + [2, 1] // '1,22,1' // [1, 2].toString() -> '1,2' // [2, 1].toString() -> '2,1' // '1,2' + '2,1' = '1,22,1' 'a' + + 'b' // -> "aNaN" // 因为 + 'b' -> NaN // 你也许在一些代码中看到过 + '1' -> 1

== 操作符

比较运算x==y,其中和和y是值,产生tue或者 false.这样的比较按如下方式进行: 1.若Type(x)与 Typey)相同,则    a.若Type(x)为 Undefined,返回true    b.若Type(x)为Nu,返回tue    c.若Type(x)为 Number,则     1.若x为NaN,返回fase     2.若y为NaN,返回 False     3.若x与y为相等数值,返回true     4.若x为+0且y为-0,返回true     5.若x为-0且y为+0,返回te     6..返回fase   d.若 Type(x)为 String则当x和y为完全相同的字符序列(长度相等且相同字符在相同位置)时返回ue.否则返回fase   e.若Type(x)为 Boolean,当x和y为同为rue或者同为 false时返回true.否则,返回 false   f.当x和y为引用同一对象时返回tue.否则,返回 false 2.若x为nu且y为 undefined,返回true 3.若x为 undefined且y为nu,返回te 4.若Type(x)为 Number且 Type(y)为Stng,返回 comparison x== ToNumbery)的结果. 5.若Type(x)为 String且Type(y)为 Number, 6.返回比较 ToNumber(x)==y的结果 7.若Type(x)为 Boolean,返回比较 ToNumbert(x)==y的结果. 8.若 Type(y)为 Boolean,返回比较x== ToNumber(y)的结果 9.若Type(x)为Stng或 Number,且 Type(y)为 Object,返回比较x== ToPrimitivey)的结果. 10.若Type(x)为 Object且Type(y)为 String或 Number,返回比较 ToPrimitive(x)==y的结果. 11.返回 false.

上图中的 toPrimitive 就是对象转基本类型。

DEMO

// 解析[] == ![] // -> true ,下面是这个表达式为何为 true 的步骤 // [] 转成 true,然后取反变成 false [] == false // 根据第 8 条得出 [] == ToNumber(false) [] == 0 // 根据第 10 条得出 ToPrimitive([]) == 0 // [].toString() -> '' '' == 0 // 根据第 6 条得出 0 == 0 // -> true

比较运算符

如果是对象,就通过 toPrimitive 转换对象 如果是字符串,就通过 unicode 字符索引来比较

转载于:https://www.cnblogs.com/guangzan/p/11270612.html

相关资源:javascript类型转换使用方法
最新回复(0)