总结
- 操作符通常会调用 valueOf()和/或 toString()方 法来取得可以计算的值。 let o = { valueOf() { return -1; } }; o—; // 值变成-2
- 使用两个叹号(!!),相当于调用了转型函 数 Boolean()。
- 逻辑与如果有一个操作数是 null,则返回 null;有一个操作数是 NaN,则返回 NaN;有一个操作数是 undefined,则返回 undefined;console.log(null && ‘a’) //null console.log(NaN && ‘a’) //NaN console.log(undefined && ‘a’) //undefined
- Math.pow()现在有了自己的操作符。 console.log(3 2); // 9
- 加性操作符,如果有任一操作数是对象、数值或布尔值,则调用它们的 toString()方法以获取字符串,然后再 应用前面的关于字符串的规则。对于 undefined 和 null,则调用 String()函数,分别获取 “undefined”和”null”。 console.log({} + ‘’); //[object Object]
- 减法操作符,如果有任一操作数是字符串、布尔值、null 或 undefined,则先在后台使用 Number()将其转 换为数值,然后再根据前面的规则执行数学运算。如果转换结果是 NaN,则减法计算的结果是 NaN。 let result2 = NaN - 1; // NaN let result6 = 5 - null; // null 被转换为 0,所以结果是 5
- 关系操作符,对字符串而言,关系操作符会比较字符串中对应字符的编码,而这些编码是数值。比较完之后,会返回布尔值。问题的关键在于,大写字母的编码都小于小写字母的编码, let result = “Brick” < “alphabet”; // true 因为B 的编码是 66,字母 a 的编码 是 97。
- 任何关系操作符在涉及比较 NaN 时都返回 false。 let result1 = NaN < 3; // false let result2 = NaN >= 3; // false
- 逗号操作符,在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值:let num = (5, 1, 4, 8, 0); // num 的值为 0
训练
说出以下打印结果
let num1 = 5
let num2 = 10
let message = “The sum of 5 and 10 is” + num1 +num2
console.log(message) //The sum of 5 and 10 is510
第一次加法的操作数是一个字符串和一个数值(5),结果还是一个字符串。第二次加法仍然是用一个字符串去加一个数值(10),同样也会得到一个字符串。
说出以下打印结果
let result = “23” < “3” //true
因为两个操作数都是字符串,所以会逐个比较它们的 字符编码(字符”2”的编码是 50,而字符”3”的编码是 51)。不过,如果有一个操作数是数值,那么比 较的结果就对了:
let result = “23” < 3; // false
这次会将字符串”23”转换为数值 23,然后再跟 3 比较,结果当然对了。只要是数值和字符串 比较,字符串就会先被转换为数值,然后进行数值比较。
说出以下打印结果
let result1 = NaN < 3 //false
let result2 = NaN >= 3 //false
任何关系操作符在涉及比较 NaN 时都返回 false。