说到隐式类型转换,首先我们要明白什么时候会出现隐式类型转换?
转为Number类型
1、数学运算符(+ - * / %),但是加号运算里不能出现字符串或对象类型数据
2、一元+-(正负操作符)后的数据
3、某些比较运算符
eg:
6 - "3" //3
var str = "7";
++str; //8
转为String类型
1、有字符串的加法运算
2、有对象类型(函数,数组,对象)的加法运算
3、某些比较运算符
4、调用alert、document.write方法
1+[2, 3] //"12,3"
1+{name: "sf"} //"1[object Object]"
转为Boolean类型
1、取反运算:!表示把这个数据转成布尔值后取它的反值;!!表示把这个数据转成布尔值
2、三目运算符
3、条件语句的小括号里
4、逻辑运算符
!{name: "sf"} //false
[]&&"sf" //"sf"
比较运算符
大于和小于比较:
1、字符串与字符串、字符串与对象、对象与对象比较时,都会转成字符串,然后对比Unicode码值
2、其它类型数据,转成数字对比,NaN和任何值(包括自身)比较均返回false
"18" > 9 //true
"18" > "9" //false
{name: "sf"} > 9 //console.log()打印结果为false
相等比较:
1、不同类型的原始类型数据,把所有的数据转成数字后进行对比
2、null与undefined除了它们自己与自己、自己与对方相等,与其它的任何数据都不相等
3、对象与原始类型数据比较时,把对象转成原始值,再进行比较
4、对象与对象类型比较时,比较的是他们的引用地址,除非引用地址相同,否则都不相等
null == undefined //true
[null] == null //false
["1"] == true //true
{name: "sf"} == {name: "sf"} //false
逻辑运算符
&&逻辑与,我们通常称为短路运算。从左到右每一项进行Boolean类型的隐式类型转换,返回第一个布尔值为false的表达式
||逻辑或,我们通常称为兼容运算。从左到右每一项进行Boolean类型的隐式类型转换,返回第一个布尔值为true的表达式
逗号运算符
从左到右每一项依次进行运算返回最后一个逗号后边的运算结果;
console.log(1+1, 2+2, 3+3) //2, 4, 6
console.log((1+1, 2+2, 3+3)) //6
首先我们要明白 , 什么时候会被当作运算符,什么时候又会是分割语句的作用
一般当逗号两边的表达式运算完需要返回一个确切的值时逗号就会被作为运算符(个人总结)
eg:
for(var i = 0, j = 0, k; i < 5, j < 10; i++, j++){
k = i + j;
}
console.log(k) //18
这道题里,每次i < 5, j < 10
时因为需要返回一个确切的布尔值用于判断for循环是否继续,所以会在进行运算后返回j < 10
的布尔值。i++, j++
只是进行递加操作,也不需要返回一个确切的值,所以这里的 , 作为语句分割。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。