Javascript 进阶 3-10 第三章总结

这边用这篇文章来做总结一下

会用一些範例帮大家複习观念

範例一

var a = 1;var b = new Number(1);console.log(a == b);  // trueconsole.log(a === b); // false

可以看到在 宽鬆相等 的时候型别会自己转换,所以 建构式建构出来的 包裹物件 数字 1 是等同于 原始型别 的数字 1。

但 严格相等 的比较状况下,就会将 建构式建构出来的 包裹物件 视为是物件,型别不相等因而回传 false的结果。

範例二

console.log(1 || 0); // 1

使用逻辑运算子 || 会回传经过判断为第一个为 truthy 的值,就回传第一个值,否则就回传第二个。
这边依照这个概念判断,1 为 truthy 就直接回传 1 。

範例三

var a = 1;var b = 2;var c = 0;console.log(a && b && c); // 0

使用逻辑运算子 && 为二元运算子,一次只会处理左右两个运算元,且其相依性为 左到右。

又,&& 会判断第一个值为 falsy 会直接回传,不然就回传第二个的值,所以~ 这边 a = 1 是 truthy, 他就直接回传 b = 2。

接着表达式就变成 2 && 0 ,这时候一样 2 是 truthy ,所以直接回传 的结果。

如果上面的逻辑没问题的话,再看看一样用範例三的範例来进行说明:

console.log(c || c && c || a);

这边同时有 && 以及 || 这两个逻辑运算子,在优先度来说,&&|| 还高,所以会先执行 c && c ,并且回传结果为 0。 之后才进行 c || 0 的判断结果, 因为第一个 c 是 falsy,所以回传第二个值。

之后 0 || a,很明显 0 就是 falsy,所以回传 a 的值,也就是 1。

console.log(c || 0 || a);console.log(0 || a);console.log(a); // 1

好,依照上面的逻辑,我们再来看一下这个练习题,也是延续範例三的变数设定喔

console.log(a && b || c && a);

这边直接公布答案是 2。

大家可以自己推演看看喔。

範例四

var a = 1 + 1 === 1;console.log(a); // false

这题很明显就是在考优先序的部分,因为 + 的优先序大于 === ,所以自然 2 === 1 会回传 false。

範例五

console.log(1000 < 10000 < 10); // true

这边就是考大家相依性的问题 < 的相依性是从左到右,并且是二元运算子。

所以她的比对流程会是

1000 < 10000 回传 truetrue < 10 型别转换Number(true) => 回传 11 < 10 // tureconsole.log(true);

所以结果就是true。

範例六

var a = '1';var b = 2;var c = (a > b) ? a * b : sum(a, b);function sum (a, b) {    return a + b;}console.log(c); // '12'

这边的逻辑首先先从 (a > b) 这个判断开始看,在比对的时候虽然 a 是字串 1 ,但会被转型为 数字 1,接着 1 > 2 会回传 false,所以会执行 sum(a, b)。

而这个sum又会回传依照传入的 a , b进行处理。

又因为 字串'1' + 数字2 => 会转型为字串'12'。

所以最后印出来的结果就是 '12'。

这个篇文章就用这六个範例帮大家複习第三章学习到的观念跟知识,没有问题的话就可以往下进行噜~汪汪


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章