视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js隐式转换的知识实例讲解
2020-11-27 22:06:53 责编:小采
文档


开胃菜

[] == ![] //true ==> "" == false
123 ^ [] //123 ==> 123 ^ 0
~{} //-1 ==> ~0
{} >= {1,2} //true ==>因为大于等于的比较,不是相等的比较,所以[object Object] >=[object Object]
[null] == "" //true ==> [""] == ""

值得注意的操作符:

一元操作符:通过Number()进行转换;其中包括*号运算符,/号运算符,都是经Number()转换

+undefined //NaN

逻辑运算符:!等价于Boolean(),将操作数进行布尔值类型转换

位操作:~, |, &, ^;当一边操作数为NaN时,可等价于操作数为0;

//由以下变化可以证得:
NaN ^ NaN ^ NaN = 0

加号运算符,比较复杂

优先级最高的是字符串,任何操作数与字符串相加都将其String(x)成字符串,再进行字符串拼接

console.log("a" + 1); //"a1"
console.log("a" + "1"); //"a1"
console.log("a" + false); //"afalse"
console.log("a" + undefined); //"aundefined"
console.log("a" + NaN); //"aNaN"
console.log("a" + null); //"anull"
console.log("a" + {}); //"a[object Object]"

其次number,而object在正常情况下输出的就是string类型

//console.log(1 + "1"); //"11"
console.log(1 + 1); //2
console.log(1 + true); //2 
console.log(1 + undefined); //NaN
console.log(1 + NaN); //NaN
console.log(1 + null); //1
console.log(1 + {}); //"1[object,Object]"

当一方为Boolean,或者两方都是Boolean时,都将其进行Number处理,同理undefined与null也一样

console.log(true + true); //2 
console.log(true + undefined); //NaN
console.log(true + NaN); //NaN
console.log(true + null); //1
console.log((true + [NaN])); //"trueNaN"

减号,则将两边都进行Number()处理

比较运算:==, >, <, >=, >=, != 遵循规则(摘自高程3):

1.null和undefined是相等的

2.要比较相等之前,不能将null和undfined转换成其他任何值

3.如有一个操作数为NaN,相等操作符返回fasle,不相等操作符返回true, NaN不等于NaN

4.两个对象之间的比较,两者指向同一个对象(地址相同),相等操作符返回true,否则返回false

值得注意的是:对象间的>=与==(!=)比较方式是不同的,前者是toString()返回值的比较,后者是引用地址的比较

当都是两边都是字符串时,按字符编码大小进行比较

当一方操作数为boolean,string,object,转成number类型的数值再进行比较;

console.log("NaN" == NaN); //false
console.log(undefined == null); //true
console.log({} >= {1:2}); //true
console.log({1:2} != {}); //true
console.log({} == {1:2}); //false
console.log([1] == [1]); //false
console.log(null == 0); //false

下载本文
显示全文
专题