Javascript 继承学习
JavaScript的类型转换,分为隐式转换和显式转换。
# 显示转换
JavaScript有一些方法,可以强制的转换变量的类型
- Number()
- parseInt()
- parseFloat()
- String()
- Boolean()
- obj.toString()
这些方法会在接收一个或几个参数,把不同类型的变量变成其他类型。
# 隐式转换:
JavaScript这种弱类型语言,在处理四则运算、==、比较运算符等运算的时候,会有隐式的转换变量的类型,
# 1、四则运算
- 当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型,并且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。
- 其他运算只要其中一方是数字,那么另一方就转为数字
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'
# 2、== 运算
比较x==y
若type(x)和type(y)相同 a. 若type(x)为Undefined,返回true b. 若type(x)为Null, 返回true c. 若type(x)为Number,则:
- 若x为NaN, 返回false
- 若y为NaN,返回false
- 若x和y数值相等,返回true
- 若x=-0,y=+0,返回true
- 若x=+0,y=-0,返回true
- 其他返回false
d. 若type(x) 为String,则当且仅当x和y为完全相等的字符序列时返回true,否则返回false e. 若type(x)为 Boolean,则x和y同为true或同为false时返回true,其他返回false f. 若type(x)为Object时,则引用同一个对象时返回true,否则返回false
若x为undefined,y为null,返回true,反之亦成立。
若type(x)为Number,type(y)为String,则比较 x==Number(y)
若type(x)为String,type(y)为Number,则比较Number(x)==y
若type(x)为Boolean,则比较Number(x)==y
若type(y)为Boolean,则比较x==Number(y)
若type(x)为String,type(y)为Object,则比较x==y.toPrimitive()
若type(x)为Number,type(y)为Object,则比较x==y.toPrimitive()
若type(x)为Object,type(y)为String,则比较x.toPrimitive()==y
若type(x)为Object,type(y)为Number,则比较x则比较x.toPrimitive()==y11. 返回false toPrimitive 就是对象转基本类型
比如有一些奇怪的隐式转换
eg1:[] == ![] // -> true
// [] 转成 true,然后取反变成 false
[] == false
// 根据第 8 条得出
[] == ToNumber(false)
[] == 0
// 根据第 10 条得出
ToPrimitive([]) == 0
// [].toString() -> ''
'' == 0
// 根据第 6 条得出
0 == 0 // -> true
eg2: 'a' == true // -> false
'b' == false // -> false
// 根据第6条得出
'a' == 1
'b' == 0
// 根据第4条得出
Number('a') == 1 -> NaN == 0
Number('b') == 0 -> NaN == 0
最后得出两个false
null == undefined // true
null == false // false
undefined == false // false
'0' == false // true
[] == 0 // true
[] == true // false
[] == false // true
[2] == 2 // true
['0'] == false // true
'0' == false // true
[null] == 0 // true
null == 0 // false
[null] == false // true
[undefined] == false // true
undefined == false // false
{} == !{} // false
{} == {} // false
3、关系和逻辑运算符 关系运算符:会把其他类型的数据转换成数字再比较大小
'2’ > 10 // false
'2'>'10' // true 都是字符串,会按照unicode方式转成其charCodeAt(‘2’) > charCodeAt(‘10’)
'abc' > 'b' // false 同上