讨论JS隐式类型转换

说到隐式类型转换,首先咱们要明白何时会出现隐式类型转换?数组

转为Number类型

一、数学运算符(+ - * / %),可是加号运算里不能出现字符串或对象类型数据
二、一元+-(正负操做符)后的数据
三、某些比较运算符
eg:函数

6 - "3"   //3
var str = "7";
++str;    //8
转为String类型

一、有字符串的加法运算
二、有对象类型(函数,数组,对象)的加法运算
三、某些比较运算符
四、调用alert、document.write方法code

1+[2, 3]        //"12,3"
1+{name: "sf"}  //"1[object Object]"
转为Boolean类型

一、取反运算:!表示把这个数据转成布尔值后取它的反值;!!表示把这个数据转成布尔值
二、三目运算符
三、条件语句的小括号里
四、逻辑运算符对象

!{name: "sf"} //false
[]&&"sf"      //"sf"
比较运算符

大于和小于比较:
一、字符串与字符串、字符串与对象、对象与对象比较时,都会转成字符串,而后对比Unicode码值
二、其它类型数据,转成数字对比,NaN和任何值(包括自身)比较均返回false字符串

"18" > 9             //true
"18" > "9"           //false
{name: "sf"} > 9     //console.log()打印结果为false

相等比较:
一、不一样类型的原始类型数据,把全部的数据转成数字后进行对比
二、null与undefined除了它们本身与本身、本身与对方相等,与其它的任何数据都不相等
三、对象与原始类型数据比较时,把对象转成原始值,再进行比较
四、对象与对象类型比较时,比较的是他们的引用地址,除非引用地址相同,不然都不相等数学

null == undefined //true
[null] == null    //false
["1"] == true     //true
{name: "sf"} == {name: "sf"}  //false
逻辑运算符

&&逻辑与,咱们一般称为短路运算。从左到右每一项进行Boolean类型的隐式类型转换,返回第一个布尔值为false的表达式
||逻辑或,咱们一般称为兼容运算。从左到右每一项进行Boolean类型的隐式类型转换,返回第一个布尔值为true的表达式it

逗号运算符

从左到右每一项依次进行运算返回最后一个逗号后边的运算结果;console

console.log(1+1, 2+2, 3+3)     //2, 4, 6
console.log((1+1, 2+2, 3+3))   //6

首先咱们要明白 , 何时会被看成运算符,何时又会是分割语句的做用
通常当逗号两边的表达式运算完须要返回一个确切的值时逗号就会被做为运算符(我的总结)
eg:for循环

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++只是进行递加操做,也不须要返回一个确切的值,因此这里的 , 做为语句分割。object

相关文章
相关标签/搜索