2 .比较操作符 ==
3 .+,-
4 . 点 号操作符
5 .在对数字,字符串进行点操作方法时,默认将数字,字符串转成对象
5 .关系符比较的时候
1 .
1 .null 转为“null”
2 .undefined 转为 “undefined”
3 .Boolean true转为“true”,false转为“false”
4 .number :11 转化为“11”,11e20 科学计数法转为“1.1e+21”
5 .数组,空数组转为字符串“”,如果数组中有null,或者undefined,同样当作空字符串处理,[1,2,3,4]="1,2,3,4"
6 .函数function a(){}转为字符串为 “function a(){}”
7 .一般对象:“[object,object]”
8 .NaN "NaN"
1 .只有null,undefined,0,false,NaN,空字符串,这6种情况转为布尔值的结果为false,其余都是true
2 .转换为布尔值得场景
1 .null 0
2 .undefined NaN
3 .Boolean true 1,false 0
4 .字符串:纯数字的字符串,转为对应的数字,空字符串转为0,其余都是NaN
5 .数组,数组首先会被转换为原始类型,然后根据上面的原始类型转换规则进行转换
6 .对象,和数组一样 {}=NaN
7 .NaN NaN
1 .Data对象会先调用toString
2 .当对象转为其他原始类型时,会先调用对象的valueOf方法,如果valueOf方法返回的是原始类型,直接返回这个原始类型
3 .返回的不是原始类型,或者valueOf方法不存在,继续调用toString()方法。如果toString()返回的是这个原始类型。直接返回这个原始类型,如果不是原始类型,直接报错
1 .将一个值转换为他为真正的布尔值
2 .!![] false ![]==true
1 .字符串和数字类型相比较的时候,字符串会被转换为数字类型
2 .布尔值和其他类型值比较
3 .null ,undefined 和其他类型的比较
4 .js规定null,undefined宽松都与自己相等,但是与其它值都不相等
1 .会把对象按照对象转换规则转换成原始类型,再次比较
1 .如果两个对象指向同一个对象,相等操作符返回true,否则返回 false
1 .字符串连接符的情况
在之前我们讨论到布尔运算符&&
和
||
的时候,我说过它们的结果是布尔值。这样说起来有点过于简单化了。如果你用它们来计算布尔数据类型,它们确实会返回布尔值。但是它们也能用于计算其他的类型的数据,这种时候,返回的就将是其中的一个参数了。
或运算符“||”
真正做的事是这样的:它首先检查一下它左边的参数,如果转换成布尔类型的值后为true,那么就返回左边的参数,否则就返回右边的参数。
仔细想想当运算符两边都是布尔类型的值的时候,是不是这样的。为什么它这样运行?这样运行的结果其实非常实用。我们来看这个例子:
复制代码
代码如下:
var
input
=
prompt("What
is
your
name?",
"Kilgore
Trout")
alert("Well
hello
"
+
(input
||
"dear"))
如果用户按“取消”或者直接关掉prompt对话框,input的值将是null或者“”。这两种情况下,转换成布尔类型的值都是false。那么这时候
input
||
“dear”
这个表达式的意思就是input有值的时候就得到input的值,否则就得到“dear”。这是一个很简单的提供一个默认值的方法。
与运算符
“&&”
的工作原理类似,但是与
“||”
正好相反。当它左边的参数转换成布尔类型的值为“false”的时候,它就返回那个值,否则返回右边的值。这两个操作符还有一个特点就是,只有在必要的时候,才会计算它右边的表达式的值。在“true
||
X”
这个表达式中,不管X是什么,结果都是true,所以X就不会被计算,如果X有其他的效果,那这个效果也不会产生。“false
&&
X”
也是同样的道理。
复制代码
代码如下:
false
||
alert("I'm
happening!")
true
||
alert("Not
me.")