四则运算中的转换
这些操作符会尝试将他们的操作数转换为数字(使用Number()),如果操作数没法转换为数字的话,他们的结果就是NaN。
‘+’运算符
基本类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| a. true+1
Number(true)+1
b. undefined+1
Number(undefined)+1
c. null+1
Number(null)+1
d. "2"+1
如果使用‘+’符号时,存在一个值为字符串类型,那么另一个值无条件的被转化为字符串类型
e. “dede”+1
|
引用类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| a. []+1
b. ['12']+1
c. var f=function(){} ; f+1;
f.valueOf()
f.toString()
左侧为字符串类型,右侧自动转化为字符串类型,其它的同理。
d. 1+{} 与{}+1
Object.prototype.valueOf.call({})
Object.prototype.toString.call({})
所以1+{}的结果是"1[object Object]"
对于{}+1,{}被解释成代码块,执行的操作就是+1,结果为1
e. {}+[]
{}被当成是代码块,执行的是+[]这个取正运算,[]首先被转化为string类型的空字符串,由于取正运算符,转化为0
|
取正值(均转化为number类型)
‘+’作为一元操作符时,都是尝试将他们的操作数转换为数字(使用Number()),如果操作数没法转换为数字的话,他们的结果就是NaN。(转化的具体值见第一篇的表格)
减号,乘号,除号运算
这些操作符会尝试将他们的操作数转换为数字(使用Number()),如果操作数没法转换为数字的话,他们的结果就是NaN。
比较运算符中的判断
1 2 3 4 5 6 7 8 9 10 11 12
| 1. []==![] a. [].valueOf() b. [].toString() c. ![]首先会进行显式类型转换,将其转化为 false d. 如果 x,y 类型不一致,且 x,y 为 String、Number、Boolean 中的某一类型,则将 x,y 使用 toNumber 函数,转化为 Number 类型再进行比较。 e.Number("")===Number(false)
2. +0==-0
3. undefined==null
4. NaN==NaN
|
alert等方法中参数是某一固定类型的时候的转换
alert(string)传入的参数会发生隐式类型转换,转换为string