隐式转换
- 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算。这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换
隐式转换规则
1.字符串连接符(+)
- 只要遇到字符串就会变成字符串拼接
- i = “a”+1+ 2; 结果为:a12
- i = 1+2+“a”; 结果为:3a
- var arr = [“俄罗斯”,“乌克兰”,“三个方向”,“高达”];
console.log("arr => " + arr); //arr => 俄罗斯,乌克兰,三个方向,高达
2.数值运算符 (正号+ 负号-)
- *在字符串前加+或-可以使得其变为number类型,只是值为NaN
- var i = +“123”;console.log(i, typeof i); //控制台输出为:NaN ‘number’
3.算术运算符 ( + - * / % )
- **隐式转换:**除了+外,其他有隐式的数据类型转换的作用,把其他类型转成number类型
4.比较运算符
1.("> < >= <=")的隐式转化
- 数字与非数字比较,会把非数字转化成数字
- 比如,
console.log(1 >true);//1和1的比较
console.1og(1 >false);//1和0的比较
console.1og(1 >“aa”);//1和NaN的比较,NaN无法比较大小,这里会打印false
- 比如,
- 字符串与字符串比较
- 比较他们的unicode编码
- js使用的编码: unicode编码(统一码,万国码)
大写字母: A-Z,65-90
小写字母:a-Z,97-122
简体中文的范围:\u4e00 - \u9fa5
“字符”. charcodeAt() 可以查看字符的unicode编码 - 两个字符串的比较是单个单个字符比较编码大小,直至出结果
- 除了两个字符串比较,其他情况都转成number类型比较
2.("== !=")的隐式转化
- 如果两个操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true。就是他们指向的地址一样时才相等。
- 如果一个操作数是null,另一个操作数是undefined或者null,则返回true。
- 如果两个操作数是不同类型的,就会尝试在比较之前将它们转换为相同类型:
- 当数字与字符串进行比较时,会尝试将字符串转换为数字值。
- 如果操作数之一是Boolean,则将布尔操作数转换为1或0。
- 如果是true,则转换为1。
- 如果是 false,则转换为0。
- 如果操作数之一是对象,另一个是数字或字符串,会尝试使用对象的valueOf()和toString()方法将对象转换为原始值。
- 如果操作数具有相同的类型,则将它们进行如下比较:
- String:true仅当两个操作数具有相同顺序的相同字符时才返回。
- Number:true仅当两个操作数具有相同的值时才返回。+0并被-0视为相同的值。如果任一操作数为NaN,则返回false。
- Boolean:true仅当操作数为两个true或两个false时才返回true。
5.条件表达式:(! || && 三目运算符)
- 介绍:在JavaScript中用于条件表达式中时被视为true或false。要记住哪些值是真值, 哪些值是假值,只需记住5个假值:undefined、 null、0、"" 和NaN,其他的值都是真值。