[ JS个人笔记 ] 各种讨人厌的运算&转型案例—DAY2

特殊的数字

Infinity 系列:

Infinity + Infinity      // Infinity-Infinity + -Infinity    // -Infinity-Infinity + Infinity     // NaNInfinity - Infinity      // NaN-Infinity - -Infinity    // NaN-Infinity - Infinity     // -InfinityInfinity - -Infinity     // Infinity// ------------------- 乘 除 取余 -----------------------Infinity * Infinity       // InfinityInfinity / Infinity       // NaNInfinity % Infinity       // NaNInfinity % -Infinity      // NaN// -------------- 0 & Infinity 系列 ----------------Infinity * 0               // NaNInfinity / 0              // InfinityInfinity % 0              // NaN0 % Infinity              // 0// -------------- 常数 & Infinity 系列 ---------------Infinity * 100             // InfinityInfinity / 100             // InfinityInfinity % 100            // NaN100 % Infinity            // 100-------------------------------------------------

NaN 系列:

其中一个是 NaN,那么结果就必定是 NaN

10 + NaN            // NaNInfinity + NaN      // NaN-Infinity + NaN     // NaN

情况简单判别

当加号 + 两侧的其中一方是字串

当加号 + 两侧的其中一方是字串的情况下,加号 + 会将两者都视为「字串」连接在一起。

10 + 'abc'          // "10abc"true + 'abc'        // "trueabc""abc" + undefined   // "abcundefined""123" + null        // "123null"
var num1 = 10;var num2 = 100;var str = "10 加 100 的数字会是" + num1 + num2;

当 减(-) 乘(*) 除(/) 取余数(%) 两侧的其中一方是数字

基本型别:

若其中一方属于基本型别(string、boolean、undefined、null)且不是数字的情况,那么 JavaScript 会在先在背后透过 Number() 尝试将数值转为「数字」,再进行运算。

true 转型成数字后,会变成 1false 转型成数字后,会变成 0null 转型成数字后,会变成 0undefined 转型成数字后,会变成 NaN

当被除数为0时

除数为正(+),结果为 infinity除数为负(-),结果为 -infinity除数为0,结果为NaN
100 - "50"        // 50100 - "abc"       // NaN100 - false       // 100100 - true        // 99100 - undefined   // NaN100 - null        // 100100 * "10"      // 1000100 * abc       // NaN100 * true      // 100100 * false     // 0100 * {}        // NaN

物件型别

- 会先透过物件的 valueOf() 方法- 如果物件没有 valueOf() 方法的话,则是透过 toString() 先转成「字串」后,再以 Number() 尝试将数值转为「数字」后进行运算。
// 简单物件100 - { }         // NaN// 自订物件,透过 Object.prototype.valueOf 来指定物件的 valuefunction Obj(number) {  this.num = number;};Obj.prototype.valueOf = function(){  return this.num;};var o = new Obj(50);// 因为 o.valueOf() 的值为 50100 - o         // 50

奇怪的判别

两个等号 == 会自动将资料转型

true == 'true'      // falsefalse == 'false'    // falsefalse == 0    // truetrue == 1     // true[] == []      // false[] == ![]     // true[] == ''      // true[] == 0       // true[''] == ''    // true[0] == 0      // true[0] == ''     // false[''] == 0     // truenull == undefined   // true[null] == ''        // true[null] == 0         // true[undefined] == ''   // true[undefined] == 0    // true

练习题

1.以下变数 a, b, c, d, e, f 它们的值、型别各自为何?

let a = 1 +"2"+ 3 ;let b = "1" * "1";let c = 2 - "1";let d = 1 > 2;let e = 2 > 1;let f = "我好棒" - 1;

Ans:
a = '123'、String;
b = 1、Number;
c = 1、Number;
d = false、boolean;
e = true、boolean;
f = NaN、Number;

2.分别印出甚么答案

console.log(1 + "2" + "2")console.log(1 - "1" + "2") console.log("1" + "1" + "2") console.log("A" - "B" + "2")console.log("A" - "B" + 2) 

Ans:122、02、112、NaN2、 NaN

3.进阶题,一元运算子

let a = 5console.log( --a + "2" + "2") console.log( a-- * "2" + "2") console.log( --a * NaN + "2") console.log(Infinity / --a + "2") console.log(Infinity * 0 + "--a" ) 

Ans:422、102、NaN2、Infinity2、 NaN--a


关于作者: 网站小编

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

热门文章